Строим безумный дом. ESP8266 — безумно дешевые кирпичи.
Для начала — предупреждение. Мне лично умный дом не нужен. Какие-то его элементы в хате имеются, но не особо заметны. Икеевская подсветка под кухонными шкафами с Zigbee удачно замаскировалась под обычное дистанционное управление. Управление подъемными воротами вполне допустимо — гаражом супруга не пользуется, поэтому ей все равно. А вот подогрев полов в душе ее уже допекает — расписание нагрева и прочие плюшки устанавливаются телефоном через Bluetooth, и это ей уже не нравится. Поэтому дальнейшее повествование имеет больше теоретический характер — а вдруг кому-то надо?
В нынешнее тяжелое время самым дешевым и легко приобретаемым микроконтроллером, пожалуй, является ESP8266, о нем речь и пойдет. Вернее, как сделать какие-то элементы умного дома самому, не прибегая к программированию — просто нащелкаем мышом все, что нам надо.
Основой дома будет Home Assistant — наверно, самая удобная платформа для расширения.
У нее есть возможности установить аддоны — этим и займемся для начала. Понадобится ESPHome. Заодно установим и Terminal & SSH — в жизни пригодится.
Теперь нам нужно прошить ESP8266 — первый раз это придется сделать при помощи проводов, все дальнейшие модификации можно будет выполнить через WiFi. Для программирования понадобится преобразователь USB-serial, но это описано на каждом углу.
У меня имеется программатор с пого-пинами, который позволяет запрограммировать не запаянный модуль ESP-12 или уже впаянный. И еще полезный адаптер, который по сравнению с распространенным на Али, имеет все необходимые компоненты и даже кнопку сброса. При этом он еще и немного уже. Можно завидовать 🙂
Программное обеспечение для прошивки не понадобится вообще, все делается через броузер, поддерживающий USB. Google Chrome вполне пойдет. Заходим на сайт web.esphome.io и следуем инструкциям — устанавливаем первоначальную прошивку и конфигурируем устройство под свою сеть.
Не забудьте перед программированием перевести ESP8266 в режим загрузки, если у вас вместо программатора простой преобразователь и кнопки. И сбросить после программирование — иначе установить сеть не получится.
Теперь наше устройство видит роутер и его даже попинговать можно.
Теперь можно вытащить наш модуль из программатора и запаять в плату — загружаться программное обеспечение будет через WiFi. С таким источником питания, что я использовал и монтажом лучше модуль считать не изолированным от сети со всеми вытекающими последствиями.
Супер-пупер реле собирается строго из того, что нашлось в хламе. А нашелся дешевый маломощный преобразователь с Али, понижающий преобразователь — их продавали пучками на e-bay еще в то время, когда Али и не существовало. Пара самых заурядных реле, датчик температуры DS18B20, который наверняка завалялся у каждого уважающего себя Плюшкина. Ну и датчик движения — тоже частый гость в хламе.
Но нашего устройства нет в списке! Не беда, добавляем:
Меняем автоматически присвоенное малоинформативное имя на что-то другое.
ESPHome создает для нашего устройства файл, который пока ничего не делает, но может выдать лог. Что этот файл значит — даже не спрашивайте, это, наверно, какое-то колдунское заклинание.
esphome:
name: esphome-web-179fe4
friendly_name: Smart relay
esp8266:
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "hcf6/cl1EdJhm5cEkYwXPnvEoMBur98Uuz09pT1sxYg="
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esphome-Web-179Fe4"
password: "bgHP6dGKz9rn"
captive_portal:
Создаем новое устройство в Home Assistant.
В конце этого файла добавляем первую функциональность — наше первое реле
switch:
- platform: gpio
name: "Relay #1"
icon: mdi:power
pin: GPIO14
inverted: no
И случилось чудо — появилась кнопка для управления реле и она даже работает!
На радостях добавляем еще одно реле:
switch:
- platform: gpio
name: "Relay #1"
icon: mdi:power
pin: GPIO14
inverted: no
- platform: gpio
name: "Relay #2"
pin: GPIO12
inverted: no
icon: mdi:power-socket-de
Иконки для устройств, если рисуемые по умолчанию не устраивают, берем отсюда.
Просто пишем строку с наименованием иконки
icon: mdi:power-socket-de
остальное произойдет само.
Добавим еще и пищалку за компанию, но ограничим время пищания, дабы сильно не доставала:
switch:
- platform: gpio
name: "Relay #1"
icon: mdi:power
pin: GPIO14
inverted: no
- platform: gpio
name: "Relay #2"
pin: GPIO12
inverted: no
icon: mdi:power-socket-de
- platform: gpio
pin: GPIO13
id: buzzer
name: "Buzzer"
icon: "mdi:bullhorn"
on_turn_on:
- delay: 1000ms
- switch.turn_off: buzzer
Теперь добавим измерение температуры, у вас же завалялся ненужный DS18B20?
Для начала, нам нужен адрес имеющегося у нас датчика.
Добавляем в yaml файл вот такие строки
dallas:
- pin: GPIO5
update_interval: 5s
Теперь можно посмотреть лог с адресом
и добавить термометр:
dallas:
- pin: GPIO5
update_interval: 5s
sensor:
- platform: dallas
address: 0xba00000013d74228
name: "Relay temperature"
— Сама меряет, — сказал молодой человек, передавая астролябию покупателю, — было бы что мерять.
Ну и под конец, делаем, как казалось, самое простое — подключаем датчик движения:
binary_sensor:
- platform: gpio
pin: GPIO4
name: "PIR Sensor"
device_class: motion
Но не тут-то было! Этот датчик отказывается работать рядом ESP8266, реагируя на помехи от WiFi, а не движение.
Плата модуля разведена как попало, никто помехами не озабачивался, никаких сплошных земель и даже конденсатор стабилизатора напряжения, которому полагается стоять около ножки микросхемы, стоит черти где.
Ставим конденсатор рядом — не помогает. Добавляем интегрирующий конденсатор — как-то все это стало работать. Но вообще, судя по интернетам, народ просто избегает ставить такие датчики рядом с ESP8266.
Полностью yaml файл выглядит вот так:
esphome:
name: esphome-web-179fe4
friendly_name: Smart relay
esp8266:
board: esp01_1m
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "hcf6/cl1EdJhm5cEkYwXPnvEoMBur98Uuz09pT1sxYg="
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Esphome-Web-179Fe4"
password: "bgHP6dGKz9rn"
captive_portal:
switch:
- platform: gpio
name: "Relay #1"
icon: mdi:power
pin: GPIO14
inverted: no
- platform: gpio
name: "Relay #2"
pin: GPIO12
inverted: no
icon: mdi:power-socket-de
- platform: gpio
pin: GPIO13
id: buzzer
name: "Buzzer"
icon: "mdi:bullhorn"
on_turn_on:
- delay: 1000ms
- switch.turn_off: buzzer
dallas:
- pin: GPIO5
update_interval: 5s
sensor:
- platform: dallas
address: 0xba00000013d74228
name: "Relay temperature"
binary_sensor:
- platform: gpio
pin: GPIO4
name: "PIR Sensor"
device_class: motion
Все, на первый взгляд, работает и датчик можно добавить на основную страницу. Как и было обещано, магия случилась безо всякого программирование.
Естественно, такой модуль жрет, как не в себя — средний потребляемый ток ESP8266 около 70 мА, от батарейки подобный модуль не запитаешь.
А как сделать модуль, который будет работать от батарейки в течении года-другого, я опишу в следующий раз, если это кому-то интересно. Но там без программирования уже не обойдешься, хотя с имеющимися библиотеками это очень просто. Но есть нюансы, баги и фичи, которые нужно обойти. Как это сделать — нормального описания я нигде не нашел, пришлось думать 🙂
- Таймеры NE555 и доработка реле омывателя фар
- Teclast T40 Pro 2023 - все необходимое за разумные деньги
- Фильтр для увлажнителей Philips. DIY увлажнитель с ютуба.
- Держатель для плат Зубр.
- Аналоговая видеокамера из фикспрайса.
- Обзор лампы IN HOME LED-HP-PRO светодиодной промышленной 30 Вт E27 6500К 2700 Лм H170/D100 мм
- Питьевой фонтан (автопоилка с фильтром) "Apetdola" для кошек и собак
- USB флеш-накопитель ORICO UFSD-J (версия 256 ГБ USB A)
- Устанавливаем на роутер Xiaomi Redmi AX6S (RB03) "технологии/цена" OpenWrt и измеряем реальную скорость Wi-Fi 6
- Переходник лампы G4 на патрон E14. Как подружить лилипута с гигантом

