Сегодня в продаже представлено огромное количество светодиодных люстр — на любой вкус, цвет и кошелёк. Как правило, такие люстры состоят из групп тёплых и холодных светодиодов, подключённых через двухканальный драйвер. Это позволяет регулировать яркость и цветовую температуру освещения.
Управление обычно осуществляется с помощью инфракрасного пульта. Реже встречаются модели с радиопультом, а в некоторых современных версиях добавлена возможность управления по Wi-Fi через облачное приложение.
Однако все эти «навороченные» «умные» модели стоят значительно дороже обычных. При этом управление через малопонятные китайские приложения выглядит довольно сомнительным решением: как правило, оно требует постоянного подключения к интернету и плохо интегрируется с локальными системами умного дома, например с Home Assistant.
Поэтому во время ремонта квартиры я выбрал бюджетные LED-люстры с инфракрасным управлением. А интеграцию с умным домом решил реализовать самостоятельно — с помощью самодельного ИК-передатчика на базе «народного» микроконтроллера ESP32.
Основные требования
Перед началом разработки я сформулировал несколько требований к будущему устройству:
Во-первых, хотелось сохранить возможность локального управления светом обычными аппаратными кнопками, а также добавить управление через интерфейс Home Assistant.
Во-вторых, устройство должно было уметь обучаться от штатного ИК-пульта. Это позволило бы иметь одну прошивку для разных пультов.
Также было важно обеспечить достаточно мощный ИК-передатчик, способный уверенно работать в пределах комнаты.
Поскольку питание ESP32 с постоянно включённым Wi-Fi от батареи — утопия, я сразу решил сделать стационарное питание 5В.
Ну и наконец, устройство хотелось сделать в габаритах стандартного настенного выключателя.
Выбор железа
В качестве контроллера я выбрал ESP32-C3 в форм-факторе модуля WROOM. Низкая стоимость и встроенная поддержка USB, позволяющая обойтись без дополнительных микросхем для прошивки и отладки — для такого проекта это практически идеальный вариант.
В качестве ИК-излучателей я использовал диоды TSAL6200 от Vishay Semiconductors . Шесть таких диодов, подключённых через внешний транзисторный ключ, позволяют получить суммарную мощность излучения порядка 1 Вт. В результате устройство превращается в достаточно мощный ИК-передатчик, уверенно работающий в пределах комнаты.
Для локального управления были выбраны кнопки OMRON B3F, рассчитанные на один миллион нажатий согласно даташиту.
Приём ИК-сигналов реализован с помощью приёмника TSOP4838 от того же Vishay Semiconductors , работающем частоте 38 кГц, которая используется большинством бытовых ИК-пультов.
Полная схема устройства:
Реализация
Плату сразу решил делать «заводской». Как раз был заказ в Китай. Заодно прикупил там и другие компоненты, чтобы снизить итоговую стоимость проекта.
Размер платы получился 70×40, что с вполне укладывалось в требования размера выключателя.
Монтаж светодиодов я спланировал как в отверстия (THT), так и поверхностный (SMD). В дальнейшем можно ориентировать их в сторону светильника при различных вариантах размещения контроллера.
Плата поместилась в корпус 74*50*14, но я решил, что квадратный «выключатель» более привычен на вид.
Прошивка
Пробную прошивку я сделал в Arduino IDE, используя библиотеки IRremote и PubSubClient. К Home Assistant устройство подключил через MQTT. ИК-коды были зашиты прямо в прошивку. Сначала я хотел сделать простой WEB-интерфейс для конфигурации, но в итоге решил попробовать «классический» путь через ESPHome.
Оказалось, что разработка и отладка YAML-файла на ~350 строк — это настоящий ад по сравнению с обычным программированием, особенно когда в этот же файл приходится вставлять фрагменты кода на C.
После нескольких часов экспериментов появилась конфигурация, выполняющая следующие функции.
Устройство подключается по Wi-Fi к моему Home Assistant и регистрирует 7 кнопок:
- Питание Вкл/Откл
- Свет 100%
- Свет 50%
- Свет 10%
- Свет тёплый
- Свет нейтральный
- Свет холодный
Также создаётся переключатель «Обучение». После его включения и нажатия нужной кнопки в Home Assistant можно отправить ИК-команду, нажав соответствующую кнопку на штатном пульте. Полученная команда записывается во флэш-память ESP32 и затем используется при нажатии этой кнопки в обычном режиме.
Функции аппаратных кнопок следующие:
- Первая кнопка — управление питанием светильника (команда «Вкл/Откл»).
- Вторая кнопка — по очереди отправляет команды 10% → 50% → 100% и управляет яркостью светильника.
- Третья кнопка — по очереди отправляет команды «тёплый → нейтральный → холодный» и управляет цветовой температурой.
Индикаторный светодиод кратко мигает при отправке любой ИК-команды и мигает три раза, если в режиме обучения получена ИК-последовательность от пульта.
Имя устройства содержит уникальный идентификатор ESP, благодаря чему одну и ту же прошивку можно использовать для нескольких устройств в квартире — каждое из них будет автоматически получать своё имя.
Исходники Arduino-кода, YAML-конфигурации и все остальные материалы можно найти в репозитории на GitHub (ссылка приведена в конце статьи).
На некоторых ИК пультах отсутствует отдельная кнопка «нейтральный свет», поэтому я подготовил также альтернативную конфигурацию для шести кнопок управления светом.
В Home Assistant устройство отображается следующим образом.
Далее через Yandex Smart Home я подключил устройство к умной колонке Yandex. Теперь светом можно управлять голосовыми командами, например:
- «Алиса, свет в спальне»
- «Алиса, слабый свет в спальне»
Проблемы
Есть несколько вещей, которые мне не понравились в этом проекте.
Главная проблема — система умного дома не знает достоверного состояния люстры. Её можно включить или выключить штатным инфракрасным пультом, простым размыканием питания настенным выключателем или даже моим самодельным пультом с отключённым Wi-Fi. В этом случае действие происходит в обход системы умного дома.
Поэтому в системе умного дома нельзя использовать действие «включить люстру» как гарантированную команду. Фактически можно лишь продублировать кнопку пульта, отправив команду «Вкл/Откл». По этой же причине невозможно создавать надежные сценарии автоматического управления освещения.
Вторая проблема вытекает из первой. При восстановлении питания люстра всегда включается. Это означает, что если вы уехали в отпуск и в это время произошло отключение электроэнергии, то после её восстановления свет может остаться включённым на всё оставшееся время.
Решить эти проблемы можно, если измерять ток в цепи люстры или хотя бы контролировать наличие фазы на её входе и передавать эти сигналы в систему умного дома. Это позволит определять реальное состояние светильника.
Ещё один практический момент — выключатель не всегда удобно размещать в прямой видимости светильника. Например, в ванной комнате и туалете выключатели часто устанавливаются на внешней стене, и ИК-сигналу может просто не хватить дальности или прямой видимости. Поэтому в будущем стоит попробовать раздельную конструкцию с каким-нибудь радиовыключателем. Заодно применение покупного выключателя может положительно сказаться на внешнем виде решения.
Ну и, конечно, давно пора заменить «Алису» на локальный голосовой ассистент — но это уже совсем другая история.
Подводя итоги
К-пульт/выключатель в целом оправдал мои ожидания. От покупных решений он выгодно отличается отсутствием замороченных облачных приложений и очень простой кастомизацией.
В перспективе хочется поэкспериментировать с сенсорными кнопками и микроконтроллером ESP32-C6, чтобы заменить «тяжёлый» Wi-Fi на ZigBee. Хотя запитать устройство от батареек, постоянно ожидающее команд от системы умного дома, скорее всего не получится.
Все материалы к статье (схему, герберы, STL-файлы корпуса и исходники прошивок) я выложил на GitHub.
Спасибо всем, кто дочитал, и творческих успехов!









