Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

BM8036 - удаленное управление через интернет, часть 3


Здравствуйте,

Сначала – анонс. Кроме поступивших на склад SmartHome Masterkit MP3302 и I-Timer MP3301 заканчиваются испытания многоканального таймера, регулятора температуры и контроллера светодиодных лент. Все эти устройства смогут выполнять свои функции под управлением телефона с Android.

 А теперь – продолжение рассказа, как подключить терморегулятор BM8036 к интернет и контролировать его работу удаленно. В предыдущих выпусках рассылки было рассказано, как превратить этот терморегулятор в Arduino. Теперь займемся подключение Ethernet Shield.

 Доработка  «железа»

Собственно, никакой доработки не понадобится. Нужно только сделать разъем, который свяжет 10-ти контактный ISP разъем BM8036 и 6-ти контактный аналогичный разъем Ethernet Shield. (Почему разработчики Ethernet Shield решили использовать для связи с Arduino ISP разъём неизвестно, но нужно подключаться именно к нему, а не к аналогичным ножкам на боковых гребенках.)   Разъемы изготавливаются из обрезанного IDE разъема  от компьютера, шлейфа, двухрядного штыревого разъема и термоклея.

Схема разъема  на рисунке ниже. Нужно просто соединить одноименные ножки друг с другом.

И второе необходимое действие – нужно подключить сигнал выбора устройства SS. (Реально на Ethernet Shield нужно подать два сигнала  SS -  для выбора кардридера или контроллера Ethernet. Но в условиях ограниченной памяти у меня не получилось воспользоваться кардридером. Поэтому фактически нужно на 10 ножку Ethernet Shield подать сигнал с  с ножки PB4 (SS) микроконтроллера,  а ножку 4 подключить к земле.)

 

 Доработка библиотеки Ethernet

Для работы библиотеки Ethernet нужен аппаратный SPI. Поскольку номера выводов, реализующие эту шину, отличаются в различных микроконтроллерах, нужно найти директивы условной компиляции, их определяющие, и добавить блок определения для Atmega32.

Для этого нужно найти все файлы в библиотеке Ethernet, содержащие «defined(__AVR_Atmega», и найти в каком из таких блоков определяются выводы шины SPI. Нужный блок нашелся в файле \arduino-1.0.3\libraries\Ethernet\utility\w5100.h.

Просто добавим еще один блок условной компиляции

#if defined(__AVR_ATmega1280__) || defined(__AVR_ATmega2560__)

  inline static void initSS()    { DDRB  |=  _BV(4); };

  inline static void setSS()     { PORTB &= ~_BV(4); };

  inline static void resetSS()   { PORTB |=  _BV(4); };

#elif defined(__AVR_ATmega32U4__)

  inline static void initSS()    { DDRB  |=  _BV(6); };

  inline static void setSS()     { PORTB &= ~_BV(6); };

  inline static void resetSS()   { PORTB |=  _BV(6); };

#elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB162__)

  inline static void initSS()    { DDRB  |=  _BV(0); };

  inline static void setSS()     { PORTB &= ~_BV(0); };

  inline static void resetSS()   { PORTB |=  _BV(0); };

#elif defined(__AVR_ATmega32__)

  inline static void initSS()    { DDRB  |=  _BV(3); };

  inline static void setSS()     { PORTB &= ~_BV(3); };

  inline static void resetSS()   { PORTB |=  _BV(3); };

#else

  inline static void initSS()    { DDRB  |=  _BV(2); };

  inline static void setSS()     { PORTB &= ~_BV(2); };

  inline static void resetSS()   { PORTB |=  _BV(2); };

#endif

Модификация библиотек закончена.

Теперь можно проверить работоспособность BM8036 cкомпилировав один из примеров для библиотеки Ethernet.

 Контроль BM8036 через интернет

Увы, память в контроллере после добавления библиотеки Ethernet быстро подошла к концу((. Хватило ее только на одну вебстраничку с минимальным функционалом. Поэтому пришлось пойти следующим путем:

Я сделал статическую HTML страницу со стилями и подключенными javascript , которую сохранил на компьютере, с которого предполагалось управление BM8036. Эта страница с помощью Ajax запроса периодически получает формируемый BM8036 JSON с информацией о состоянии платы. И второй Ajax запрос отправляет содержимое формы для управления BM8036. Таким образом, удалось свести всю web активность платы к отработке 2 запросов – отправить json в ответ на запрос и установить режим работы в соответствии с полями формы. Вебстраница использует для отображения и получения данных  JQuery и плагин для отображения графиков Jquery.flot

В результате получилось следующее:


Архивы

- вебстраница со скриптами 

- измененная библиотека Ethernet

- Ардуино проект

 

Итоги

К сожалению, объем памяти микроконтроллера  не позволяет полноценно организовать управление BM-8036  через интернет. Ethernet библиотеки съели память полностью (свободно осталось примерно 500 байт). Так что следующее решение – использовать вместо Ethernet Shield Raspberry Pi – миниатюрный компьютер с OS Linux со сравнимой с Ethernet Shield ценой. В этом случае web сервер можно будет легко развернуть прямо на Raspberry, а гигабайты доступной памяти позволят не ограничивать себя в желаниях.

 

С уважением, Сергей Китаин

electronshik.ru   единственный в России гипермаркет для электронщиков

 

P.S. Обсудить тему рассылки, предложить темы  для следующих выпусков, задать вопросы можно в группе ВКонтакте или по электронной почте kitain@domko.ru.

Приложения:

Для эксперимента использовались:

Многоканальный терморегулятор BM-8036 

Ethernet Shield

 

Переработанная Arduino IDE 1.0.3 для работы с BM8036 

- вебстраница со скриптами 

- измененная библиотека Ethernet 

- Скетч для BM8036 

В избранное