Практически в каждом обсуждении очередной реализации домашней автоматизациии возникает такой вопрос – «Хочу одну кнопку, чтобы уходя из дома ее нажал, и все выключилось\перевелось в режим энергосбережения».
Что ж, как говорил один известный персонаж, вызов принят.
Как я уже рассказывал, у меня используется RS485 и MODBUS. Кнопку можно сделать как мастером, так и слейвом. И у каждого решения есть свои недостатки. Если кнопка будет выступать мастером, то в приборной сети получается два мастер-устройства, если она будет слейвом, то задержка между нажатием и началом выполнения команд будет порядка минуты (частота опроса контроллеров серверной частью). Оба решения меня не устраивали, поэтому было найдено третье – кнопка будет работать через серверную часть. Этот вариант также не лишен недостатков, например, при отсутствии связи с сервером она просто не будет работать, но так как эта Большая Красная Кнопка выполняет вспомогательную функцию (свет можно выключить и обычными выключателями), то с этим решено было мириться. Также решено вместо одной кнопки сделать 4, вернее от одной до четырех. Если можно выключить все – то почему бы не иметь возможность все включить?
Итак, аппаратная часть
Берем кнопочный пост, прозрачные кнопки и выкидываем все лишнее.
Из прозрачных кнопок убираем родные переключатели и вклеиваем другие. Зачем этот колхоз? Что бы была возможность добавить светодиоды подсветки (изначально кнопки без подсветки, хотя и имеют прозрачную нажимную часть) и по еще одной простой причине – они по высоте не влезали в этот корпус.
Использован Wi-Fi модуль ESP8266-03 и PIC12F1840. Так как одновременные нажатия нескольких кнопок не планируются – то они подключены через резисторный делитель к входу АЦП, что позволило обойтись одним выводом МК. Светодиоды подключены по два к одному выходу – при высоком уровне горит один, при низком – второй, при переключении вывода на вход – выключены оба. Диодный мост, стабилизатор и перемычки – для разных вариантов питания, переменка, постоянка или аккумуляторы.
Разводим, травим, собираем. Не забываем добавить перемычки для удержания МК в сбросе и переводе ESP8266 в режим прошивки, так как выпаивать его неудобно. 11-контактный разъем – питание, кнопки и светодиоды, пятиконтактный – ICSP и по совместительству UART для прошивки и просмотра логов обмена.
Как это работает
При включении устройство регистрируется в домашней Wi-Fi сети, при нажатии кнопки – на сервер отправляется простейший GET запрос, при обработке которого серверный скрипт выбирает из базы список адресов контроллеров и записывает в регистры нужные значения. Так как кнопка также является полноценным контроллером со своим MODBUS адресом, то первой командой в ней обнуляется флаг нажатия кнопки, а последней – устанавливается флаг окончания выполнения последовательности команд, что индицируется светодиодами в кнопках. Нажали кнопку – загорелся светодиод, пришла первая команда из серии – замигал, пришла последняя – потух.
Консоль настроек.
Самих устройств в сети может быть несколько, количество кнопок в каждом устройстве от одной до четырех, количество команд настраивается и, в принципе, ничем не ограничено. Также в веб-интерфейсе есть виджет для групповых операций с таким же функционалом.
Пару слов о самих ESP8266. для макетирования я использовал ESP-01, в окончательном варианте – ESP-03. Прошил в них последнюю прошивку, 01 заработал нормально, 03 работал при первом включении, при последующих ругался на убитую прошивку. Как оказалось, на них было установлено разное количество памяти, на 01 – 8Мбит, на 03 – 4Мбита. Но никаких предупреждений софт для прошивки не выдавал, все шилось и почти работало. Вылечилось более старой прошивкой с одного известного сайта. Также, крайне желательно при старте делать сброс ESP и ПОСЛЕ сброса слать команду на отключение от точки доступа, а уже потом делать нормальную инициализацию. Иногда модуль при включении считал себя уже подключенным к точке доступа, и даже имел IP 104.111.109.* но естественно доступа к сети у него не было. Также при перенастройке UART-а на скорость отличную от дефолтной 115200 – периодически он эти настройки забывал.
Ссылки на предыдущие части: