Разработка компактного и умного модуля управления освещением на ESP8266

Автор текста: CyberexTech

Приветствую, Пикабу!

В этой статье я хочу поделиться своим опытом создания одного из ключевых элементов умного дома — модуля управления освещением. Хотя работа над этим проектом началась еще в 2021 году, я решил его модернизировать, обновить прошивку и переработать дизайн с использованием современных инструментов. Если тема домашней автоматизации вам близка, добро пожаловать под кат!

❯ С чего все начиналось


Мой путь в домашней автоматизации начался давно, в эпоху, когда беспроводные микроконтроллеры вроде ESP8266 еще не были так распространены, и в ходу были в основном проводные решения на базе 1-Wire. Мой собственный «умный дом» не был исключением.

Как и многие энтузиасты, я начал с самого простого и эффектного — управления светом со смартфона. По тем временам это казалось настоящим чудом. Для реализации я приобрел на AliExpress двухканальный переключатель 1-Wire DS2413P и собрал плату управления с симисторным контролем нагрузки. Конструкция исправно работала до лета 2021 года, пока мощный грозовой разряд, прошедший по витой паре провайдера, не отправил в небытие сетевые карты сервера, USB-адаптеры 1-Wire и мои платы управления. Эффектный взрыв симисторов стал последней каплей. Я понял, что пора переходить на беспроводные решения, чтобы избежать подобных катастроф в будущем, и занялся разработкой собственного беспроводного модуля.

❯ Аппаратная часть: от идеи к схеме


Условно модуль можно разделить на три основные части:

  • система питания;

  • контроллер;

  • силовая часть для управления нагрузкой.


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

LNK306GN — это понижающий преобразователь, требующий минимального количества внешних компонентов. Семейство микросхем LinkSwitch-TN разработано для замены линейных и емкостных источников питания, обеспечивая лучшую эффективность при сопоставимой стоимости.

«Мозгом» устройства стал популярный микроконтроллер ESP8266. Для коммутации нагрузки (например, лампочки) была выбрана связка оптопары MOC3052M и симистора BT136-600. Почему не реле? Они щелкают, громоздки и менее долговечны для частых коммутаций.

Схема и разводка платы были выполнены в открытом пакете KiCAD. Блок питания на LNK306GN генерирует напряжение 3.3В, задаваемое резисторным делителем. Важно отметить, что эта схема не имеет гальванической развязки от сети, поэтому при монтаже и эксплуатации необходимо строго соблюдать меры электробезопасности. Для первоначального запуска рекомендуется последовательно с модулем включать нагрузку (например, лампу накаливания на 60Вт), чтобы избежать повреждений в случае ошибок монтажа.

Схема модуля

Разводка печатной платы

3D-визуализация готовой платы. Отмечу, что в этой версии использован корпус SOP-7 для LNK306GN, что более современно по сравнению с DIP-7 в старых ревизиях.

❯ Производство платы и сборка прототипа


Раньше для изготовления плат я использовал технологию фоторезиста и фотомасок, но сейчас для прототипов перешел на лазерный метод.

На фото ниже — процесс активации фоторезиста с помощью фотомаски и готовый прототип платы с установленными компонентами.

Использование фотомаски

Собранный прототип модуля

❯ Создание корпуса


Корпус для устройства был спроектирован в бесплатной CAD-системе FreeCAD. Задача была довольно простой и не потребовала сложного моделирования.

После проектирования модель была напечатана на 3D-принтере из пластика HIPS. На фото ниже — визуализация корпуса с платой, готовое устройство в сборе и сравнение его размеров с Apple AirTag для наглядности.

3D-модель корпуса с платой

Устройство в собранном виде

❯ Прошивка и веб-интерфейс: умные технологии для удобства


Программная часть была разработана в среде Arduino IDE и построена на базе моей общей прошивки для умных устройств. Для максимального удобства пользователя в прошивке реализованы следующие технологии:

  • Captive Portal (захватывающий портал);

  • Multicast DNS;

  • Автообнаружение по MQTT (Auto Discovery);

  • SSDP (протокол для обнаружения сетевых служб).


Captive Portal — это служба, которая перенаправляет пользователя на страницу настройки при подключении к устройству. Она активируется, когда модуль работает в режиме точки доступа (например, при первом включении или потере связи с Wi-Fi). Устройство создает открытую сеть с именем «CYBEREX-Light», при подключении к которой браузер автоматически открывает страницу авторизации. Для входа используется пароль по умолчанию «admin».

Вот как выглядит веб-интерфейс устройства:

Страница входа в веб-интерфейс

Главная страница с элементами управления светом

Настройка подключения к MQTT-брокеру

Multicast DNS (mDNS) позволяет обращаться к устройству в локальной сети по доменному имени (например, 11395386.local) без необходимости запоминать его IP-адрес.

Одной из ключевых возможностей является управление через простой HTTP API. Это позволяет взаимодействовать с модулем напрямую, без посредников в виде MQTT-сервера или центральной системы умного дома. Например, эту функцию можно использовать для подключения самодельных беспроводных выключателей. У меня есть такой проект: выключатель на ESP8266 в режиме DeepSleep, работающий от двух батареек AAA около трех лет.

API также используется для интеграции с моей «умной колонкой». Приведу фрагмент кода на Python, который обрабатывает голосовые команды для управления светом:

if cmd == 'lightON':
try:
# Запрашиваем текущее состояние каналов
content = urllib.request.urlopen("http://11395386.local/?page=status&apikey=UkFA7").read()
response0 = json.loads(content)
# Логика ответа и включения в зависимости от состояния
if response0['c1'] == 'Off1' and response0['c2'] == 'Off2':
text = "Включаю свет"
# ... (другие условия)
# Включаем нужный канал
if response0['c1'] == 'Off1':
requests.get('http://11395386.local/?page=control&apikey=UkFA7&switch=1')
if response0['c2'] == 'Off2':
requests.get('http://11395386.local/?page=control&apikey=UkFA7&switch=2')
tts.va_speak(text) # Озвучиваем действие
except:
tts.va_speak("Извините, произошла ошибка, повторите попытку позже!")
# Аналогичная логика для команды 'lightOFF'

❯ Интеграция в систему умного дома


Для легкой интеграции в популярные системы (в моем случае — Home Assistant) в прошивке реализована функция MQTT Auto Discovery. При подключении модуля к MQTT-брокеру он автоматически отправляет специальное сообщение, и Home Assistant сам создает сущности (entities) для управления светом. Пользователю остается только добавить их на панель управления.

Вот пример кода для автоматического обнаружения из прошивки (C++) и пример карточки интерфейса в Home Assistant:

// Фрагмент кода отправки конфигурации для Auto Discovery
void mqqt_d_annonce(String namec, String cn, String on_d, String off_d){
String top = String(settings.mqtt_topic) + "/jsondata";
String control = String(settings.mqtt_topic) + "/control";
char jsonBuffer[1024] = {0};
DynamicJsonDocument chan1(1024);
chan1["name"] = namec;
chan1["state_topic"] = top;
chan1["command_topic"] = control;
chan1["payload_on"] = on_d;
chan1["payload_off"] = off_d;
chan1["state_value_template"] = "{{ value_json." + cn + " }}";
serializeJson(chan1, jsonBuffer, sizeof(jsonBuffer));
String top_to = "homeassistant/light/" + cn + "/config";
client.publish(top_to.c_str(), jsonBuffer, true);
}

Карточка управления в Home Assistant выглядит следующим образом:

Для еще большего удобства был реализован протокол SSDP (Simple Service Discovery Protocol) и написано мобильное приложение. Оно позволяет обнаружить все мои устройства в локальной сети и быстро перейти к их настройке буквально в три клика, без необходимости вручную искать IP-адреса.

Интерфейс мобильного приложения для поиска устройств

❯ Поддержка классических выключателей


Чтобы не отказываться от привычного управления светом с помощью настенных выключателей, на плате предусмотрен специальный вход (J5) для их подключения. Это позволяет легко встроить умный модуль в существующую проводку без ее переделки.

❯ Итоги проекта


В итоге получилось компактное, эффективное и надежное устройство для управления освещением. Оно может работать как автономно (через веб-интерфейс или API), так и быть полноценной частью экосистемы умного дома. Модуль рассчитан в первую очередь на светодиодные светильники, но используемые симисторы позволяют коммутировать нагрузку до 300 Вт на канал без значительного перегрева.

На этом, пожалуй, все. Надеюсь, мой опыт окажется полезным для вас. Буду рад комментариям, предложениям и историям о ваших проектах! Если статья понравилась, поддержите ее лайком. Всем добра, здоровья и успехов в творчестве!

Ссылки на материалы проекта:

  • Дизайн печатной платы;

  • Исходный код прошивки устройства;

  • 3D-модель корпуса;

  • Мобильное приложение для поиска устройств.

Статья написана специально для читателей Timeweb Cloud и Pikabu. Больше интересных материалов и новостей ищите в нашем блоге на Хабре и Telegram-канале.

Если вы автор (начинающий или известный) и хотите поделиться чем-то интересным в нашем блоге, напишите об этом здесь.

Облачный сервис Timeweb Cloud — рекомендуемая ссылка, которая может помочь поддержать проект автора.

📚 Читайте также:

  • Azure Stack HCI — что это такое, как его улучшить и использовать;

  • Каждая капля на счету, или как сделать счетчик умным;

  • Простое, но очень нужное устройство. Дверца холодильника открывается и подается сигнал.

Больше интересных статей здесь: Гаджеты.

Источник статьи: Мой умный свет: или как я разработал свой модуль управления освещением.