Wi-Fi контроллер управления освещением

Сегодня хочу Вам показать интересное устройство, при помощи которого можно управлять чем угодно через интернет при помощи Wi-Fi модуля ESP8266 (ESP-01) и микроконтроллера ATmega8A .
В данной связке модуль, выполняет роль контроллера сети WiFi и вебсервера, а ATmega8A выполняет роль контроллера силового узла, принимает строку по простому протоколу от ESP8266 и обработав ее выдает команду  на открытие того или иного реле через сдвиговый регистр 74HC595 и транзисторную сборку ULN2003.

Базовую информацию о ESP8266 можно почитать здесь, а приобрести на AliExpress по этой ссылке.

Схема устройства:

Обращаясь по заданному  IP адресу , по умолчанию: 192.168.4.1 , можно настраивать различные режимы и управлять освещением в квартире или доме.  Устройство имеет веб интерфейс . Прошивка для ESP8266 создана на основе «вебсвалки» от уважаемого «PVVX» . Я просто дописал пару тройку обработчиков в файле что при получении определенной строки со стороны веб в UART интерфейс будет отсылаться 4 байтная строка — идентификатор команды . На каждый канал управления приходится две таких команды , это включить и выключить . Также, есть еще дополнительных две команды которые могут включить и выключить сразу все каналы освещения .
И потом, написав простую вебстраничку я легко управляю освещением квартиры.

Работает устройство следующим образом:

Со стороны веб: если по-простому, то при нажатии на любую из кнопок сначала вызывается скрипт , который меняет фон кнопки и меняет переменной значение с 1 на 0 и наоборот при каждом нажатии и потом вызывается обработчик AJAX, который обрабатывается  программой в ESP8266 и отправляется в UART код , соответствующий команде AJAX. А уже ATmega8A , эту строку принимает и обрабатывает.

Со стороны микроконтроллера:  принимается строка, обрабатывается, и если совпадает строка с проверочной, то выполняются необходимые действия. Выглядит это вот так:

 void send_data() {   static char buff_data=0, rel_data=0;  static char x=0;                                         if(string_search("@1A00",rx_buffer))   // LIGHT ON кухня                    {                       rel_data|=0x81;                        printf("1CH ONrn");                        clear_buffer_rx();                           x=0;                        if(demo<42000 && demo_off==0) demo++;                    }                ....................  ....................                    else  if(string_search("@2A00",rx_buffer)) // LIGHT OFF  кухня                    {                       rel_data&=~0x81;                         printf("1CH OFFrn");                       clear_buffer_rx();                         x=0;                       if(demo<42000 && demo_off==0) demo++;                    }                                     relay_send(rel_data);         }

В данной функции сравнивается пришедшая строка в юарт, со строкой, которая выполняет определенные команды. Если она совпадает — то выполняется действие .

функция парсера юарт самодельная, вот ее код:

 char string_search(char *str1,char *str2) { unsigned char addr=0,x=0,y=0; str1+=0; str2+=0;  while(str1[addr]!=0) {  addr++; }  while(str1[y]!=0 && str2[x]!=0) { if(str1[y] == str2[x]) {  y++;  x++;  } else {  if(y<addr)y=0;   x++; } }

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

При нажатии на любую из кнопок происходит включение освещения!

Веб странички настроек скрыты от основной и открывается при вводе ссылок. Чуть ниже я их укажу.

По желанию, любой может доработать основную страницу, добавив на нее кнопку или ссылку для перехода к настройкам.

Ссылки по умолчанию для конфигурации WiFi и прочих настроек: 

192.168.4.1/protect/wifi.htm
192.168.4.1/protect/setup.htm
192.168.4.1/protect/uart.htm
192.168.4.1/protect/upload.htm

По вопросам доработки прошивки, можно обратиться в ЛС.

Фото смонтированного устройства:

Внимание! Печатные платы разрабатывались как универсальные (для общего применения) и применялись платы из того, что было уже изготовлено, это все связано с сокращением времени разработки и экономии расходов на изготовление заводских плат. Поэтому некоторые узлы распаяны не для задачи управления освещением.