Простая умная розетка на ESP-01 своими руками

Рассмотрим процесс создания дешевой умной розетки на esp8266 с управлением по MQTT. За основу взять модуль ESP-01S (покупался на aliexpress) и модуль с двумя реле с опторазвязкой.

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

Почему нужно брать модуль именно с двумя реле? Потому что если будет только одно реле, может получиться так, что при определенном положении вилки в розетке будет разрываться ноль, а не фаза. Поэтому лучше не рисковать, а разрывать оба контакта, тогда можно будет не задумываться, какой стороной включать вилку.

Подключаем все элементы устройства следующим образом (как показано на рисунке).

Управляющие входы блока реле нужно соединить между собой и подключить на вход GPIO0 контроллера ESP-01S. Также нужно подключить контакты VCC и GND. На клеммы реле нужно подключить вилку 220в. и контакты колодки (используем нормально открытые контакты).

За логику контроллера будет отвечать прошивка ESPEasy. Текущая стабильная версия R120. Как залить прошивку подробно описано тут.

После того как прошивка залита можно подключиться к Wifi устройства. Подключившись к устройству в браузере по адресу 192.168.4.1 необходимо указать имя и пароль вашей домашней сети, после чего можно переходить к настройки прошивки.

Протокол, который будет использоваться для управления розеткой называется OpenHAB MQTT.
Указываем IP-адрес брокера, порт, пользователя и пароль, если требуется авторизация.

В нашем случае используется gpio0, поэтому на закладке Devices создаём новое устройство Switch input — Switch, даём имя socket1, ставим галку PullUP, назначаем gpio , Switch Button Type выбираем Push Button Active LOW, Value называем state.
Имя устройства и имя параметра (value) потребуется для работы скриптов.

Затем создаем прослушивание MQTT, что бы изменение в топике приводило к реакции на нужном входе контроллера.
На закладке «devices» создаём новое устройство Generic — MQTT Import, даём устройству имя, указываем топик/%sysname%/GPIO0, изменения в котором будут отслеживаться.

Далее нужно создать правило, которое определит реакцию на кнопку и публикацию в MQTT состояния gpio0.

on socket1#state do
if [socket1#state] = 0
gpio,0,1
Publish /%sysname%/GPIO0,1
else
gpio,0,0
Publish /%sysname%/GPIO0,0
endif
endon


on socket#GPIO0 do
if [sniff#GPIO0] = 1
gpio,0,1
if [sniff#GPIO0] = 0
gpio,0,0
endif
endon

Пояснения к скриптам: сначала проверяется состояние кнопки по имени socket1 и свойству state, когда кнопка нажата (активный НОЛЬ то есть LOW уровень) gpio0 выставляется в лог.1 и публикуется состояние в соответствующем топике, иначе gpio0 выставляется в лог.0 и так же публикуется состояние.
Во второй части скрипта прослушивается соответствующий топик, при публикации в нём 1 gpio0 выставляется в лог.1, при публикации 0 gpio0 выставляется в лог.0.

В итоге все работает как задумывалось при бюджете не более 300 рублей. Мощность подключаемых к розетке приборов не должна превышать 10А. Это обусловлено максимально допустимой мощностью реле.