Прогноз погоды на arduino.

Продолжаю героически пилить «Умный дом». На текущий момент сделано:  вывод времени, даты, дня недели, погоды на сегодня и завтра, текущей температуры, включение/выключение дисплея по датчику движения.

Не удалось: подружить плату точного времени ds3231 работающую по шине i2C и Ethernet плату ENC28J60 работающую по шине SPI, Пошел какой-то конфликт между платами, разобраться как разрулить не смог. Пришлось время тоже брать с интернета.

11.09.15 - 1Ниже приведен скетч на текущий момент. » Читать далее

Arduino Mega и шина SPI

Теоретически шина SPI на Arduino  позволяет подключать к ней одновременно несколько устройств. Причем активным устройством на текущий момент, для работы скетча будет считаться то устройство, у которого низкий уровень сигнала на пине Cabel Select.

Например, подключаем два устройства к ардуине :  SD картридер и сетевой интерфейс на микросхеме enc28j60, по следующей схеме:

Arduino Mega enc28j60 SD
49 (SS, nCS, CS, CSB, CSN, nSS, STE) CS
50 (SCLK, SCK, CLK) SO SPI_CLK
51 (MOSI, SDI, DI, SI) SI SPI_MOSI
52 (MISO, SDO, DO, SO) SCK SPI_MISO
53 (SS, nCS, CS, CSB, CSN, nSS, STE) SD_CS
GND GND GND
5V VCC 5V

Или может быть понятнее рисунок:

 

 

схема подключения по шине spi двух устройств: enc28j60 и sd реадер

схема подключения по шине spi двух устройств: enc28j60 и sd реадер

Т.е. как мы видим, часть пинов используется совместно, но пины 49 и 53 выделены для управления, для того чтобы скетч и «железка» знали, какое именно устройство в данный момент может передавать данные по общим пинам. Если на управляющем пине низкий уровень напряжения, то скетч и железка считает, что может передавать данные именно та железка, которая подведена к данному пину. Например по моей схеме: если на 49 пине низкий уровень, а на 53 высокий, то работает сетевая карта. И наоборот.

На деле как оказалось конечному пользователю не нужно заморачиватся выставлением уровней на управляющих пинах…если конечно драйвера железок написаны правильно…

Например мой скетч по работе одновременно и с SD и с сетевой картой заработал с полпинка..

Пример скетча: » Читать далее

Arduino Mega подключение ENC28J60. История боли..

Два дня убил на подключение к Arduino Mega контроллера ENC28J60. Как всегда «дьявол кроется в деталях». Перепробовал кучу библиотек — не работает. Кто-то в интернетиках ляпнул, что библиотеки etherShield и ETHER_28J60 не работают с IDE 1.6.5. Сделал даунгрейд с IDE 1.6.5 на 1.0.5 — не работает. Переобжал кабель — не работает. Полез заказывать уже новый Ethernet shield… Но на по следок «дай думаю посажу его не на 3.3 вольта, как указано НА ВСЕХ схемах по подключению а на 5 вольт». Бьюсь головой об стену и глупо хихикаю.. Работает!

Итак, таки схема подключения в моем случае выглядит так:

arduino-connect-enc28j60

 

 

Оказывается у Arduino Mega/Uno нет нормальной многопоточности…

ArduinoUno_r2_front450pxДумал в выходные про будущую реализацию «Умного дома».. Делал некоторые наброски и т.п.. Стало шоком, что оказывается в Arduino не реализована «железячная» многопоточность т.е. выполнение нескольких подпрограмм одновременно. Реализовать некое подобие можно при помощи костылей «выполнение по таймеру» и прерываний.. Но всё не то.. Так-же есть несколько скетчей, написаных на ассемблере, которые расширяют стандартный вход main в программе, и делают «некий программный аналог» многопоточности. Ну ближе к делу посмотрим… Знать бы конечно сразу, так возможно бы остановился на Raspberry Pi..но цена там конечно более кусачая.

Подключение дисплея 1602a к Arduino

Схема подключения:


collegamenti-lcdРаспиновка по контактам:

Контакт дисплея   Контакт Arduino   Значение

  1                                     GND                                 Vss

  2                                     5V                                    Vdd

  3                                     GND                                 Vo (контрастность)

  4                                     digital 12                        RS

  5                                     digital 11                        R/W

  6                                     digital 10                        ENABLE

  11                                   digital 5                          DB4

  12                                   digital 4                          DB5

  13                                   digital 3                          DB6

  14                                   digital 2                          DB7

  15                                   5V                                    LED+

  16                                   GND                                 LED-

Пример программы:

1 2 3 4