Anya is live and ready to show you everything. Watch her strip, dance, and perform exclusive shows just for you. Interact in real-time and make your fantasies come true.
✓ Live Streaming✓ Interactive Chat✓ Private Shows✓ HD Quality
Anya is LIVE right now
FREE
Free to watch • No registration required • HD streaming
Двух проходной выключатель с обратной связью на основе esp8266
Часто наборы для создания умных домов, страдают излишнем упрощением. К примеру, я бы хотел, чтобы выключатель контролировался не только удаленно, но и непосредственно самим выключателем, как мы привыкли, вкл/вкл прямо на месте. Более того, мне важно знать статус этого выключателя, вдруг я его включил и забыл выключить? И конечно, это IoT должно подключаться к моему серверу, управления дома, чтобы все контролы были под рукой и могли участвовать в общей цепочке принятия решений.
Корпус
В качества корпуса я использовал готовый, который можно купить на http://kosmodrom.com.ua/el.php?name=UNI-M-BOX-050-01BE Состоит из двух алюминиевых профилей и двух пластмассовых щечек. В разобраном виде это выглядит, вот так:
Схемотехника
Здесь все достаточно просто: из интересного - я обнаружил, что при загрузке esp8266 имеет высокий уровень на GPIO и только потом устанавливается в заданный уровень. Чтобы избежать “мигания” при включении, я использовал логический инвертер 74HC04. (Подозреваю, что это пушкой по воробьям и можно было использовать MOSFET. А что вы используете для таких целей?) Таким образом, логическая единица на GPIO 5 у меня инвертируется и далее нужно использовать в коде LOW для включения и HIGH для выключения.
Для отрисовки схемы я использовал KiCad. А что вы используете? В качестве управляющего реле используется реле SSR-40DA. Никто не мешает использовать любую другую которую вытянет 74HC04.
Дополнительную проблему составила дальность действия устройства. Мне необходимо было, чтобы он мог работать на расстоянии порядка 40 метров и сигнал мог проходить через разнообразные перекрытия из дома на улицу. Эксперименты с esp-12 показали, что он не вытягивает это расстояние и пришлось использовать esp-07, у которого есть возможность подключить внешнюю антенну. Интересной особенностью esp-07, является то, что для работы внешней антенны нужно отпаять конденсатор идущий к внутренней - керамической антенне. Вот тут подробное обсуждение.
Плата
Не мудрствуя долго, я собрал все схему на макетной платне 4x6см.
Практически в собранном виде это выглядит вот так
По плану предполагалось что блок питания будет внутри корпуса, но пока я его подключал, он умер смертью храбрых и я решил подключить внешний, чтобы не тратить время на поиск нового.
Кроме того я не припаивал MCU для того, чтобы иметь возможность ее просто перепрограммировать. К сожалению в esp-07 всего 1M памяти и удаленное обновление OTA мне недоступно.
Home Automation Server
С програмной частью оказалось все сложнее. У меня был ряд требований:
Работа по mqtt протоколу
Включение/выключение возможно как удаленно, так и выключателем
Необходимо постоянно знать статус выключателя
И самое главное, работа выключателя без сети или без mqtt брокера. С этим оказалось все сложнее
Совместная работа с home-automation сервером
Работа по доменным именам, а не ip
Так как я планирую сделать несколько устройств и все они должны дополнять друг друга и работать совместно. Мне нужно было использовать, какой-то общий сервер для визуализации и отслеживания всей информации от этих устройств. В качестве него я выбрал home-assistant.io, опенсорсное решение на питоне, которое поддерживает много полезных протоколов. Все это было установленно на Raspberry PI 2, там же стоит mqtt брокер, DHСP и DNS сервисы, через которые я управляю IP адресами всех устройств.
Программа
Исходники доступны на GitHub. Код более менее очевиден (disclaimer: нуждается в рефакторинге и вылизывании, но он рабочий :)
Из интересных моментов:
Я использовал библиотеку PubSubClient для работы с MQTT и отталкивался от примера с неблокирующим реконектом к брокеру. Но в действительности реконект блокирует loop и если вы в этот момент, нажмете кнопку, с большой вероятностью, что это событие будет пропущено. По этому поводу я создал тикет и автор подтвердил, что это действительно так. (Как бы это обойти?) Чтобы оптимизировать работу, я увеличил время между попытками реконекта, таким образом вероятность попасть на реконект уменьшается, а также использую вместо кнопки именно выключатель - это увеличивает время подачи необходимого сигнал для обнаружения его в loop()
Инсталяция
Инсталяция состоит из двух частей:
Установка окружения
Необходимо установит home-assistan.io (HA)
Поставить MQTT брокер, сконфигурировать его и подключить к HA. Я использую mosqutto broker
Добавить в конфиг секцию HA, конфигурацию для этого выключателя
Заливка скетча
Необходимо поправить credentials, согласно настроек вашей сети
Скомпилировать и залить на esp8266 c помощью Arduino IDE или PlatformIO, ну или еще как-то :)
Ссылки
Вся техническая документация на github https://github.com/glebv/esp8266-wifi-relay-2way-switch
Буду рад обсудить все замечание по этому проекту или помочь с инсталяцией и сборкой!