Конечно, название как-бы намекает, что в FixPrice, якобы, можно приобрести умную лампу, интегрируемую в Home Assistant, но это не так. Там продаются обычные USB-лампы, которые можно переделать в умную, работающую, например, с Home Assistant.
Об исходной лампе замолвим слово.
Вообще же, сама лампа из FixPrice представляет из себя довольно приятную и, что не менее важно, недорогую вещь, производящуюся под брэндом Flarx
Тут определенно следует сказать, что не Flarx'ом единым следует обходиться. Учитывая страну происхождения (Китай) я предположил, что можно найти нечто подобное и на АлиЭкспрессе. И таки да, не прогадал- есть варианты разных близких форм и размеров, однако, цена в FixPrice приятнее всех прочих, да и перед покупкой можно покрутить в руках и прикинуть к своему интерьеру, ведь есть несколько расцветок нижней части, а именно: белая, розовая и голубая.
Эта лампа- светильник обладает предельно простым функционалом: при подключении комплектным USB кабелем к компьютеру, заряднику или Power Bank'у просто светит белым. Предусмотрен отсек под батарейки, конечно, но не могу назвать работу от батареек хорошей идеей, ведь придется их менять довольно часто. Включение-выключение контролируется серебристой площадкой- сенсором в верхней части светильника, никакой регулировки яркости или цвета не предусмотрено. Это как раз-таки предстоит исправить.
Конструкция, как кажется сначала, держится на магии- защелок, резьбы или какого-либо пазогребневого соединения между верхней и нижней частями не наблюдается (что, кстати, помогает внешнему виду), однако, крепеж есть, просто скрыт под сенсором. Этот сенсор, по сути- простая наклейка, которую вполне возможно аккуратно отклеить пластиковой или металлической лопаткой:
Под ним скрываются 3 шурупика с потайной головкой, от сенсора идет проводок:
В моем случае это было так: провод, зачищенным от изоляции концом, проходил через пластиковую вставку, а сверху на него клеился кружочек из медной фольги. Он не был припаян, не был приварен точечной сваркой (это Китайцы любят за скорость), а просто приклеен. Что-ж, экономия во все поля... Ладно, откручиваем шурупчики и разбираем конструкцию дальше- снимаем прозрачный колпак. А после предстоит работа руками- внутренний матовый колпак крепится к основанию уже на защелках. Тут важно разобраться, в какую сторону стоят защелки и не прикладывать лишнего усилия без необходимости. Сломать защелки, скорее всего не получится, ведь пластик колпака довольно мягкий, но согнуть их так, что они потеряют жесткость и перестанут надежно цепляться вполне реально.
Итак, слева-направо: нижняя часть с электроникой и светодиодами, внутренний матовый колпак, внешний прозрачный колпак. Светодиодов здесь достаточно (8 штук), но их свет довольно неприятный. Ну а что- дешевые светодиоды с не самым лучшим спектром. Увы, ночью такой свет неприятен, не говоря уже о том, что как ночник использовать вообще невозможно- такой спектр мешает спать. Еще один повод переделать.
Нижняя часть состоят из двух частей- дна и вставки, которые так же скручиваются между собой на 3 шурупа. На вставку крепится плата со светодиодами, на дне же есть отсек под батарейки и плата, на которую припаян разъем MicroUSB, а так же ключ с управлением емкостным сенсором.
Разработка идеи
Как ни крути, а начинать надо с концепции, ибо, как известно, "Без ТЗ- результат ХЗ". Планы, конечно, наполеоновские, но все с ходу не осилить, так что прямо сейчас реализовал следующее:
- Включение-выключение тактовой кнопкой
- Подключение к домашнему Wi-Fi
- Управление через Home Assistant
- 16 RGB светодиодов
- Независимая подсветка кнопки на 2 RGB светодиодах
Пора воплощать идеи в схеме. Сказать честно, схема у меня была нарисована "на коленке" и на клочке бумаги. Результат сумрачного труда, созданного в результате ожидания своей очереди в офисе Сбера я, конечно, показывать не буду. А вот перерисованный в KiCad вариант я, конечно, продемонстрирую:
На всякий случай приложу вариант и в PDF, вдруг что: NigthLight.pdf
Схема-то оказалась довольно простой, хотя, тут есть один момент, на который мне очень хотелось бы обратить внимание. А именно- согласование уровней сигнала между микроконтроллером и светодиодами. Но все по порядку.
Итак, за основу был взят модуль ESP-01S, на базе SoC ESP8226. Такой выбор был сделан ввиду широкой доступности модуля, низкой цены и удобства программирования. Особенностью модуля является флеш на 1 Мб, что позволяет реализовать возможность обновления OTA (Over The Air- беспроводное обновление), посредством ESPHome, после первой прошивки, не требующее программатора и демонтажа.
Модуль ESP-01S питается от источника с напряжением 3.3 вольта, однако, лампа имеет разъем MicroUSB, с напряжением в 5 вольт на его питающих пинах. Для понижения с 5 до 3.3 вольт используется линейный стабилизатор с низким падением напряжения U2, с обвязкой из C12 - C15 для устранения паразитного возбуждения и резких скачков тока.
Управляемые RGB светодиоды D1 - D18 имеют диапазон питающих напряжений от 3.5 в до 5.3 В, при этом требуя для работы уровень управляющего сигнала не менее 70% от напряжения питания. В текущей ситуации, при питании, скажем, от USB порта компьютера, напряжение питания будет 5 В, при этом управляющий сигнал должен быть не ниже 3.5 вольт. Чисто теоретически, уровня сигнала на выходах ESP-01S должно быть достаточно (3.3 В), однако, для подавления помех и исключении возможности перегрузки выхода микроконтроллера все же рекомендуют ставить резистор между микроконтроллером и первым из цепочки светодиодов. Увы, иногда на этом резисторе падает слишком большое напряжение и сигнал становится недостаточного уровня, что приводит к срывам и фризам в работе светодиодов. Чаще всего любители рекомендуют "подбирать номинал резистора" балансируя между защищенностью от помех и стабильностью работы, однако, это не наш метод. Для полного устранения этого явления я применил нехитрую схему для согласования уровней на транзисторах. Основная часть светодиодов подключена через транзистор Q1 с обвязкой в виде резисторов R1 - R3, подсветка кнопки подключена через транзистор Q2 с обвязкой R5 - R7. Такая схема идеально подходит для согласования уровней не только в этом конкретном случае, но и в случае, когда применяются светодиоды, с питанием от 12 В, например WS2815. Однако, тут есть момент: сигнал будет инвертирован! Впрочем, это поправимо программно.
Дизайн платы выполнялся с целью аккуратно вместить конструкцию внутрь лампы и сэкономить, потому выбирался односторонний стеклотекстолит и круглая форма. Размер такой, чтобы не помешать шурупам на вставке, но при этом и комфортно разместить 16 светодиодов. Конструкция будет разделена на основание с основными светодиодами и верхушку с физической тактовой кнопкой, установленной вместо родного сенсора. Обожаю тактовые кнопки- как приятно они щелкают! Части между собой соединяются гибким шлейфом. Для удешевления обе части делаются за раз и разделяются пропилом.
Так как первый вариант схемы был на клочке бумаги, то и плату я отрисовал (именно отрисовал в этом случае) в клочке САПР, герое молодых людей Sprint-Layout 6. Вот плата: NightLight.lay6
По особенностям платы: внутренняя часть отделяется от внешней 4-мя выфрезерованными пропилами, можно делать руками, можно- на станке. Я уже какое- то время не занимаюсь рукоблудством с ЛУТом или фоторезистом, а заказываю прототипы у местного товарища, который занимается этим с весьма завидным профессионализмом и обладает станками, химией и вот этим вот всем. Оставлю ссылочку, вдруг кому понадобится: https://sp-electronics.ru/ Думаю, что в любом сколь-нибудь большом городе можно найти подобного товарища. В моем случае получил я вот такую красоту:
Собираем в кучу
Пока не начался процесс пайки я ОЧЕНЬ рекомендую продумать момент крепления нижней платы на вставку корпуса. Сам я это сделал без особых хитростей, но на полиэтиленовые винты с такими же шайбами, чтобы ничего не коротнуть, если вдруг что. Кстати, по рисунку платы: белые полоски- перемычки, контактные площадки J3 и J4 - питание, разъем J2 запаивается снизу, а вот J1- сверху. И дело это, скажу я по секрету, просто удивительно неудобное. Сделал коллаж, чтобы примерно объяснить, как оно должно быть:
Слева направо: из разъема вытаскиваем пины и втыкаем в плату, стараясь их более-менее ровно выставить (я предусмотрел диаметр отверстия так, чтобы пины влезали туго), потом под самое основание аккуратно тонким припоем (я использую KOKI JM-20 0.4 mm) запаиваем так, чтобы не было высоких наростов из припоя, и следом на горячие пины (подогреть, если есть необходимость) насаживаем пластиковый каркас. Усидчивости и самоконтроля потребуется изрядно.
Разумеется, начинать пайку надо разделив платы заблаговременно ДО, а не кряхтя после- при разделении платы неизбежно гнутся и уже припаянные детали могут лопнуть. Имею опыт. Что касается модуля ESP-01S- тут есть один маленький момент. Модуль, по-хорошему, надо на плату паять, причем постараться запаять как можно ниже к плате, чтобы не было теней от него, но для этого его надо предварительно запрограммировать через ESPHome хоть пустым шаблоном- только лишь чтобы модуль связывался с сервером Home Assistant. Если этого не сделать, то процесс программирования превратиться в увлекательное приключение. Я же поставил разъем- зря, модуль дает заметные тени. Собранное добро выглядит как-то так:
Собранную основную плату крепим к вставке. Как я уже писал выше, я использовал полиэтиленовые винты, но можно просто под головку винта подложить пластиковую или текстолитовую шайбу для изоляции- это тоже вариант. Дальше- больше, дербаним родную плату с разъемом от светильника и оставляем на ней только сам разъем, к которому припаиваем провода. В моем случае серый- минус, оранжевый- плюс:
Саму плату придется оставить, так как она является основанием и крепежом для разъема, однако, сам разъем я советую пропаять к плате с тщательностью- родного бессвинцового припоя мало и разъем легко отваливается от платы. Вставляем плату на место и крепим обратно на пару шурупчиков, провода проводим по сторонам вдоль стенок и выводим наверх так, чтобы они проходили сквозь отверстие вставки и основной платы, после чего припаиваем к основной плате соблюдая полярность. Выглядит все это как- то так:
Я соединил верхнюю плату и основную каким-то китайским шлейфом, коих бывает куча, например, от набора беспечных макетных плат. Красота, пришла очередь верхней платы!
Верхняя плата будет крепиться изнутри матового колпака. Для того, чтобы все сделать как надо, я использовал винты М2.5, засверлил верхнюю часть колпака и вставил винты. Крепление сделал на 3 винта- так будет проще симметрично разместить их между шурупов крепления прозрачного колпака:
Вообще же, надо было бы взять винты с потайными головками, но что уж там- что под рукой было то и воткнул, ведь хотелось-то побыстрее закончить.. Поэтому пришлось выбрать некоторую толщину колпака так, чтобы головки винтов были заподлицо с поверхностью колпака. Между колпаком и платой полиэтиленовые шайбы для выравнивания высоты, а снизу- гайки М2.5:
Перед установкой матового колпака на место я настоятельно рекомендую скрутить шлейф в спираль, так чтобы он более- менее по середине находился, тогда он будет давать меньше тени. В общем, скрутили шлейф, одели матовый колпак, но невтерпеж же, потому решил проверить. Красота...
Ладно, накинули прозрачный колпак и пошли дальше. Теперь последний штрих- кнопка. Я выбрал высоту кнопки такой, чтобы она была излишней и вот для какой цели- после сборки надо выровнять толкатель кнопки с верхней поверхностью прозрачного колпака. Подкладывая шайбы под плату это было бы умопомрачительно долго, поэтому я просто взял острые кусачки и срезал толкатель заподлицо:
Выглядит уродливо? Ну да. Однако, если найти родную наклейку, отклеить от нее пластиковую вставочку с кусочком медной фольги и приклеить наклейку на свое место, то снова станет красиво! А при надавливании посередине будет отчетливо ощущаться щелчок. Обожаю тактильные интерфейсы! А, ну да! Перед наклеиванием наклейки надо не забыть шурупики закрутить на место, а то прозрачный колпак держаться не будет!
Программа передач
Если в свое время модуль ESP-01S был прошит хотя-бы шаблоном ESPHome при непосредственном подключении, то сейчас самое время залить прошивку в полный рост. Я бы хотел выложить код прямо сюда, для удобства восприятия и возможности легко прокомментировать, но Яндекс.Дзен не поддерживает вставку кода, как и многое другое, лишь уродливое подобие, так что придется выложить в виде текстового файла, содержимое которого можно скопировать, вставить в ESPHome и подправить под свои настройки. Постарался вставить комментарии всюду, чтобы было хоть немного понятнее что и как.
Итак, собственно код: NightLight-fw
В Home Assistant ночник определится автоматически через интеграцию ESPHome, и будет выглядеть как- то так:
Скриншот из моего сетапа Home Assistant
У меня 2 ночника, правда, первый совсем вышел куцым и не имел подсветки кнопки. Потому свою прошивку я подправил.
Собственно, Pilotlight- это подсветка кнопки, определена как RGB источник света и поддерживает все подобающие функции.
Nightlight2 Button - кнопка ночника, определена как сенсор, при нажатии переходит во включенное состоянии, при отпускании возвращается в выключенное. Может использоваться для автоматизации.
Nightlight2 - это массив из 16 основных светодиодов, определен как RGB источник света и поддерживает все подобающие функции.
Самое приятное- и подсветка кнопки и основные светодиоды поддерживают адресное обращение, так что через прошивку возможно добавление разных эффектов, типа радуги, мерцания и еще всякого такого. И это очень круто, сам-то я, конечно, не особо с восторгом на это реагирую, однако детям очень нравится.
О высоком и не очень
Как я уже и писал- планов громадьё. Если выстроить список, то получится примерно так:
- Заменить кнопку на сенсор, и, желательно, на сенсор жестов
- Встроить датчик света для подстройки яркости
- Заменить RGB светодиоды RGBW, для более точной передачи белого
- Добавить поддержку зарядников с Quick Charge 3.0
Но это все в будущем, а пока имеем, что имеем. Если есть мысли или замечания о реализации, или требуется подробнее расписать о Home Assistant или ESPHome- оставляйте комментарии и задавайте вопросы. Буду рад поделиться своим мнением или опытом.