Авторизация
Регистрация

Напомнить пароль

Безумная розетка с мозгами лампочки. Пятничные эксперименты со здравым смыслом.

В относительно недавнем материале был рассмотрен Реверс-инжиниринг копеечных умных лампочек, но только в теории. Пришла пора немного размяться и заняться практикой. Для этого на базе мозгов лампочки соберем розетку. Да-да! В полку HomeAssistant ожидается пополнение. Заинтересованных прошу под кат.

Прежде чем собирать какое-либо устройство, следует определиться с его назначением, списком требуемых материалов и примерным планом работы. Без этого набора лучше за инженерный проект не браться! Описывать буду в порядке хода работы.

Задумка

Итак, мне понадобилась умная розетка в прихожую. Для тех, кто не в курсе, это устройство, способное активировать и деактивировать питание 220В на подключенные устройства по автоматизации, таймеру, либо удаленно. Некоторые розетки поставляются с датчиками, например температуры и влажности, либо, что намного полезнее, мощности.

В моем случае мощность я буду измерять другим устройством и в другом месте, намного полезнее будет установить туда датчик движения. Дело в том, что я уже устанавливал умное устройство управления освещением в прихожую (см. Безумный радиошлюз для контроля освещения и многого другого), но как оказалось, покрытия его датчика движения не хватает для того, чтобы надежно фиксировать людей в нижней половине комнаты. А поскольку в прихожей необходимо снимать обувь… В общем, чтобы пофиксить эту досадную оказию, мне и понадобился еще один датчик на уровне ног. Так как информация с розетки будет поступать на центральный сервер умного дома напрямую, мне придется добавить лишь пару строчек в код автоматизаций, чтобы интегрировать новый сенсор. Очень удобно!

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

Идея с датчиком климата (температура и влажность) мне тоже понравилась, так что решил воплотить и ее.  

И вообще, кто мне запретит? Я тут свою розетку делаю, с мозгами лампочки и гирляндой сенсоров!

В прихожей у меня также расположены светильники на аккумуляторах из поста Автономный светильник с датчиком движения и освещения (подсветка полок). В какой-то момент заряжать их мне надоело, так что решил их запитать на постоянку. И тут как раз вспомнил о розетке — почему бы в нее не вмонтировать порт для запитки? Питания от стандартного БП должно быть за глаза и для контроллера с реле, и для подзарядки светильников. На том и порешил.

Реализация

С основными фичами ТЗ разобрались, теперь можно приступать к технической части. На основе имеющейся рассыпухи и модулей, набросал схему в KiCAD.

Схема

В качестве драйвера 5В реле выступает ULN2003. Достаточно дешевая (<10 р./штука) и универсальная сборка транзисторов (в принципе пригодна для коммутации любых небольших потребителей, даже униполярных шаговиков).

Датчиком температуры и влажности был выбран AM2320. Это крайне удобный, достаточно точный и дешевый сенсор, подключаемый по I2C. Удобство в том, что его можно подключить еще и по шине 1Wire (ВАЖНО, нужен подтягивающий резистор 5.1 кОм — у меня вместо него параллельные по 10 кОм). Это не только экономит выводы контроллера, но и в данном конкретном проекте вообще позволило хоть как-то приделать эту периферию. Об этом чуть позже расскажу.

Датчиком присутствия взял LD2420. Тому всего две причины: его относительно легко настроить прямо в интерфейсе умного дома, и у меня их много. Рекомендовать не могу. Довольно капризные и ужасно дружат с дешевыми сенсорами (неудивительно — скорость обмена UART 115200 бод, сильно забивают I/O), плохо калибруются (честно говоря, вообще не разобрался, может нужно на esp32 калибровать — там UART устойчивее), а значения Gate по умолчанию странноватые. И нет именно определения присутствия, только микродвижения. В общем, решил влепить что есть, благо лежать в прихожей не собираюсь.

И, наконец, венцом всей этой схемотехники выступил бывший мозг умной лампочки, чип BK7231N под маркировкой CB2L. 

Когда я писал предыдущий разбор, то нормально почитать даташит не удосужился, а зря. Оказывается, контроллер-то голый! Вернее, в нем не выведено никаких портов, ни I2C, ни SPI, только UART. И вроде бы ничего есть же эмуляция. Есть же?..

Ну если эмуляция и есть, то не в текущей версии LibreTiny. Тут-то мой сенсор AM2320 и должен был покинуть чат, но повезло, что я нашел его даташит со схемой для 1Wire. Потому-что 1Wire-то как раз эмулируется без проблем.

Примечание

Кстати, схема изначально была немного другая. Я пробовал эмулировать UART на пинах контроллера для LD2420, но это работало настолько нестабильно, что я просто вынужден был перейти на аппаратный UART. Это возможно только в случае отключения логов api в прошивке, иначе датчик сойдет с ума.

По итогу имеем следующий список деталей:

  1. CB2L (или любой аналогичный)
  2. Реле с 5В питанием, 220В 10А, 2 шт.
  3. Драйвер реле ULN2003
  4. Блок питания 5В (нашел какой-то из неиспользуемых)
  5. Преобразователь в 3.3 вольта LM1117. Нестареющая классика.
  6. Сенсор климата AM2320
  7. Датчик присутствия LD2420

Ну и всяких там конденсаторов с резисторами и прочего по мелочи.

Предварительная прошивка

Чтобы не морочиться с пайкой программатора на смонтированную схему, обычно контроллер прошивается без ничего. Общий принцип описан в статье про реверс-инжиниринг. Здесь оставлю схему. Она от другого контроллера, но названия пинов те же.

Вкратце, понадобится программа ITChipTool (не забудьте замкнуть пин CEN на землю когда попросит!), UART-программатор и базовая прошивка, которую генерирует ESPHome. В ней нет пинов, но имплантируется связь через API и прошивка по воздуху. Это реально удобнее, чем морочиться с проводами. Шить конечную прошивку в общем случае не рекомендую. Хотя бы потому, что она будет спамить неверные показания в историю умного дома при включении.

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

Пайка

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

Так или иначе, собрал я все довольно быстро. Силовая часть отделена от логической, сенсор вывел на проводе подальше, чтобы он все-таки измерял температуру среды, а не электроники. В качестве порта для питания светильников использовал выпаянный разъем флоппи-привода. Можно было и круглым обойтись, но флоппи-разъем фиксируется в гнезде, да и чего он просто так валяется?.. 

Прошивка

Теперь, когда есть базовая схема без подключения 220В, в пору писать и тестировать прошивку. Углубляться сильно не буду, все конфиги стандартные. Гуглятся буквально на раз-два у каждого сенсора. Собственно, я и нагуглил. Часть, сгенерированную ESPHome с паролями я пропущу.

uart:
  id: uart_bus
  # Используем аппаратные пины UART1
  tx_pin: TX1  # или явно GPIO11
  rx_pin: RX1  # или явно GPIO10
  baud_rate: 115200
  parity: NONE
  stop_bits: 1

ld2420:
  uart_id: uart_bus
###############################################################################

number:
  - platform: ld2420
    presence_timeout:
      name: Detection Presence Timeout
    min_gate_distance:
      name: Detection Gate Minimum
    max_gate_distance:
      name: Detection Gate Maximum

###############################################################################

button:
  - platform: shutdown
    name: "Shutdown"
  - platform: restart
    name: "Restart"
  - platform: safe_mode
    name: "Restart (Safe Mode)"

  - platform: factory_reset
    disabled_by_default: True
    name: "Factory Reset ESP"
    id: factory_reset_all

  - platform: ld2420
    apply_config:
      name: Apply Config
    factory_reset:
      name: Factory Reset
    restart_module:
      name: Restart Module
    revert_config:
      name: Undo Edits

select:
  - platform: ld2420
    operating_mode:
      name: Operating Mode

###############################################################################
binary_sensor:
  - platform: ld2420
    has_target:
      name: Presence
  - platform: gpio
    pin: P8
    name: "Присутствие в прихожей"
    
text_sensor:
  - platform: ld2420
    fw_version:
      name: LD2420 Firmware
  - platform: template 
    name: ${friendly_name} uptime 
    lambda: |- 
      int seconds = (id(uptime_sec).state); 
      int days = seconds / (24 * 3600); 
      seconds = seconds % (24 * 3600);  
      int hours = seconds / 3600; 
      seconds = seconds % 3600; 
      int minutes = seconds /  60; 
      seconds = seconds % 60; 
      return { (String(days) +" д. " + String(hours) +" ч. " + String(minutes) +" мин.").c_str() }; 
    icon: mdi:clock 
    update_interval: 113s 

sensor:
  - platform: ld2420
    moving_distance:
      name : Moving Distance
  - platform: uptime   
    name: ${name}-uptime 
    id: uptime_sec 
    internal: true 
  - platform: wifi_signal 
    name: ${name}-WiFi-Signal" 
    update_interval: 60s

  - platform: dht
    pin: P7
    temperature:
      name: "Температура в прихожей"
      id: hallway_temperature
    humidity:
      name: "Влажность в прихожей"
      id: hallway_humidity
    update_interval: 60s
################################################################################ 
switch:
  - platform: gpio 
    pin: P24
    inverted: True
    restore_mode: RESTORE_DEFAULT_ON
    id: outlet1
    name: "Розетка 1"

  - platform: gpio 
    pin: P26
    id: outlet2
    restore_mode: RESTORE_DEFAULT_ON
    inverted: True
    name: "Розетка 2"

Думаю, все названия говорят сами за себя. Для LD2420 предусмотрены дополнительные фичи вроде перезагрузки контроллера или его самого в целях отладки.

Проверил — все работает. Реле щелкают, датчик климата корректно показывает, присутствие фиксируется — идем дальше.

Корпус

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

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

Собственно, весь реверс-инжиниринг состоял в том, чтобы подогнать внутреннюю раму под размеры гнездовой запчасти во Freecad. Зачем-то по инерции я и скругление корпуса сначала повторил, так что вышла полная копия обода.

Но быстро одумался, и низ расширил. 

Поскольку размеры макетки я изначально прикинул так, чтобы в сборе с БП оно не было сильно шире исходного корпуса розетки, мне оставалось только примерно попасть в габариты распаянного флоппи-разъема. Чтоб не запарывать большую деталь при печати (или не колхозить), отверстие я сделал пошире, а для разъема уже после печати вымерял размеры рамы. 

Мелкую раму перепечатать не жалко пару раз, а фиксируется она вполне жестко. 

Далее накидал крышку с фиксацией на трении, но с небольшим заусенцем, чтобы фиксировалась поплотнее.

Оставалась самая простая часть — выключить свет и на клеммных разъемах подключить схему к сети...

«Самая простая часть»

В общем, выключая свет, разбираю розетку, а там...

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

Обе пластины я распилил и вывел провода. К счастью, фиксация пластин сохранилась и контакт сильно не ухудшился.

Чуть позже до меня дошло, что хватило бы и одной клеммной группы, вторая-то все равно запараллелена на ноль. Но фарш обратно не прокрутишь, как говорится...

Делал я все это в темноте. Нет, не темной-темной ночью на темной-темной улице, просто в прихожей темно из-за отсутствия окон, а еще не летний сезон. Естественно, взял с собой подсветку в виде аккумуляторного прожектора (отличная, кстати, штука — есть про нее обзор), но все равно на полу с ярким бьющим по глазам светом не сильно удобно на длинной дистанции.

А еще долго пытался все провода с клеммами уложить, чтобы они удобно разбирались потом, и чтобы не мешали сборке. В итоге часа 4 возился с этой частью. Мораль? Быть предусмотрительнее во время планирования!

Интеграция

Теперь, когда розетка полностью работает (а включилось все без сюрпризов), интегрируем ее, как и планировалось, в умный дом. Для этого я добавил на страничку прихожей графики и переключатели, отвечающие за работу розетки.

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

Теперь добавим в прошлую автоматизацию условие от нового сенсора в пункте «И если». Также учел, если сенсор по каким-то причинам станет недоступным.

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

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

Итоги

Думаю, очевидно, что проект не предусматривает полного повторения, ибо некоторые аспекты сделаны колхозно, а другие начерно. Еще в цвет не попал… Моей задачей было собрать устройство под свою среду, что благополучно и было сделано. Оно работает уже где-то месяц без нареканий, потому сам подход (хаб с множеством сенсоров) могу рекомендовать. И чип лампочки, хоть и не без ограничений, вполне подходит для небольших DIY-проектов. Сейчас, глядя на девайс, добавил бы индикаторы включенных розеток. Ну и само собой сделал бы на печатной плате...

В дальнейшем хочу потыкать BLE-стек у этого самого контроллера лампочки. По идее, с его помощью можно организовать крайне дешевый беспроводной датчик, или подключить как хаб. В LibreTiny такое не предусмотрено, а тыкать голый камень пока что лень. В любом случае, спасибо, что зашли. Приятного вечера (утра, дня, ночи)!

 

Добавить в избранное
+4 +8
свернутьразвернуть
Комментарии (4)
RSS
+
avatar
0
Комментарий ожидает проверки администрацией сайта. Подробнее...
+
avatar
+1
  • l1bbcsg
  • 20 марта 2026, 23:02
Программирование автоматизации такого рода девайса лучше делать на самом ESPHome, а состояния и кнопки уже проборосить в HA отдельно. Так у вас свет продолжит включаться пока роутер или сервер недоступны.
+
avatar
0
А какой датчик присутствия из этих LD посоветуете? Покупать готовую коробку за 10-20 баксов как-то жаба не позволяет.
+
avatar
0
Думаю, ld2450 неплох. Закрывает несколько зон сразу плюс трекинг до трех объектов. Правда у него скорость 256000 бод, младшие контроллеры могут не справиться. Но модуль имеет бортовой Bluetooth и можно подключить напрямую к серверу через компонент. Было бы питание.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.