esp-ir-center-and-relays
esp8266/8285 IR universal reciever/sender with HTTP GET actions 02.12.2022 added MQTT support (wqtt.ru example).
Прибор предназначен для централизации управления умным домом с любого ИК-пульта, одновременно интегрируясь с другими устройствами и сервисами, поддерживающими обмен по HTTP GET запросам. Устройство оснащено WiFI Manager [https://www.arduino.cc/reference/en/libraries/wifimanager/], что позволяет легко подключаться к существующим сетям 2.4Ггц. Если установленная сеть недоступна, устройство запускает точку доступа, подключившись к которой можно настроить подключение к нужной сети. Поддерживается обширный список протоколов, благодаря библиотеке IR Remote [https://github.com/Arduino-IRremote/Arduino-IRremote].
Имеется поддержка MQTT брокера, проверена на wqtt.ru. Стоит 300р в год, имеет навык в Яндекс.Алисе, позволяющий легко интегрировать оную. Необходимо при компиляции скетча раскомментировать (если закомментирован) параметр USE_MQTT и далее в вебморде указать настройки брокера: хост, порт, логин, пароль. Далее для нужных команд заполняем MQTT topic, например, пишем cmd1. Этот же топик пишем в брокере при создании устройства Выключатель. Для запуска команды необходим payload = 1, после чего устройство исполняет связанную с topic команду и публикует payload = 0 назад в топик. В Алисе это выглядит как автоматическое выключение кнопки спустя пару секунд после выполнения команды. Это необходимо для избежания выполнения команд, связанных с retain топиками при загрузке или переподключении.
Прототип запущен на ESP M3 модуле, но должен работать и на обычных esp8266 модулях. Необходимое условие - наличие SPIFFS, для хранения конфиг-файлов команд.
Алгоритмы работы. Все крутится вокруг понятия "команда", число их задается #define CMD_SIZE. У каждой команды есть событие для ее старта (event) и действия (actions). Для начала исполнения команды необходимо обучить поле event нужной кнопке пульта. Навести пульт на устройство, нажать кнопку, затем в веб-интерфейсе перед нужным полем event нажать кнопку read. Поле должно заполнится строкой вида HEXNUMBER,PROTOCOL,BITS. Поле заполняется последней полученной устройством ИК-последовательностью. При наличии проблем можно наблюдать вывод дебаг в serial. Также команда запускается , если запросить любым сервисом или браузером соответствующую ссылку, которая пишется под именем команды в заголовке, вида http://192.168.1.200?cmd=0.
Полей actions у каждой команды четыре - два для ИК-передатчика, и два для механизма HTTP GET. Доступно два режима команды - Linear и Trigger. В первом последовательно выполняются первые и вторые команды ИК и HTTP GET, возможно установить паузу в миллисекундах между выполнениями. В режиме Trigger команды выполняются по очереди - при первом вызове первые actions, при втором - вторые, далее по кругу. Если какое либо поле actions пустое, данное действие выполнятся не будет. ИК-поля, если их очистить и сохранить, принимают вид 0,UNUSED,0; это нормально. Необходимо сохранять каждую команду отдельно, кнопкой SAVE под каждой командой. Работать она начинает сразу после сохранения.
В приведенном ниже примере CMD 0 в режиме триггера управляет другой esp m3 с реле на борту, включая и выключая розетку с лампой. CMD 1 работает аналогично, включая и выключая розетку с блоком питания. CMD 2 в Linear посылает два сигнала включения проектора, будучи обучена с его пульта, с задержкой между ними. Это не мешает включению и нужно для выключения - проектор после первого ИК-сигнала просит подтвердить выключение вторым таким же.
Платы esp прошиваются через arduino ide с ядром esp8266, используемые библиотеки приложены. Также приложу bin для прошивки без компиляции.
В каталоге sketch_relay4ch лежит прошивка для esp с четырмя реле, управляемыми по http get и/или MQTT. Первые две CMD на скрине выше работают именно с ним. Это реле работает с навыком Яндекс.Алисы "Домовенок кузя" и отдает правильные ответы в json для того, чтобы алиса могла запрашивать состояние реле и корректно выводить и озвучивать информацию. Также работает с навыком WQTT.ru, брокер стоит 300р / ГОД.
Пульт не умеет отдавать статусы в json, поэтому могут быть накладки, если вы включили розетку через Алису, и потом нажимая кнопку на пульте ожидаете ее выключения, однако пульт дублирует включение и потребуется еще одно нажатие. Реле при изменении свичей через http дублирует данные в mqtt топики.
Схема:
Я использовал TSOP4838 в качестве ИК-приемника, пару TSAL5100 последовательно с резистором 3,3Ом как передатчики, развернув их в разные стороны и неизвестный N-мосфет в sot23, скорее всего IRLML5203 с резистором 680 ом от пина esp к затвору и резистором 57ком от затвора к земле. Питается устройство от любого 5в блока питания, мощностью не менее 400ма. Также присутствует линейный стабилизатор 1117-3.3 для питания ESP.
Схема, плата в diptrace и герберы для заказа приложены. Как прошить esp m3: [https://www.google.com/search?newwindow=1&q=%D0%BA%D0%B0%D0%BA+%D0%BF%D1%80%D0%BE%D1%88%D0%B8%D1%82%D1%8C+esp+m3]
Вопросы лучше задавать в телеграм-чатике https://t.me/savelylive