Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал

Всем привет

Как известно, к Новому году всегда надо готовиться заранее. Вот и мне подумалось, что надо расчехлять паяльник и начинать делать праздничную иллюминацию в квартире. На данный момент готовы два устройства из трёх, для последней гирлянды едут адресные светодиоды. Но идея обкатана и показала себя вполне рабочей.

Этап первый. Теоретический.

Любое мало-мальски инженерное устройство должно начинаться с
1) Составления ТЗ
2) Подбора железа
3) Подбора ПО
Второй третий пункт взаимосвязаны, что логично.

Итак, техническое задание.

У меня работали две гирлянды, собранные на WS2812b под управлением маленькой платки Arduino Nano (родом из Китая) с микроконтроллером ATmega328p. Как это водится в Китае - маркировка чипа была почти нечитаемой, прошивка заливалась раза с третьего-четвёртого. Но система работала, и даже не тормозила.

Гирлянд было две: одна висела на ёлке и состояла из 126 последовательно соединённых светодиода, оконная гирлянда состояла из 74 светодиодов и представляла собой 9 линий светодиодов переменной длины, соединённых последовательно.

В старой гирлянде было крайне неудобно включать/выключать подсветку и переключать режимы. Это же необходимо встать с дивана, подойти к устройству, нажать кнопку. Соответственно, в новой системе необходимо реализовать управление через мобильный телефон. Так же, стоит учесть, что в моём доме ёлка стоит около окна, и будет видно сразу две гирлянды. Соответственно, стоит предусмотреть возможность обмена данными между этими гирляндами для возможности синхронизации режимов. Причём, синхронизация должна быть не "приколоченной намертво", а вполне себе опциональной.

Подбор железа

Исходя из ТЗ становится очевидно, что достаточно просто поменять контроллер с старой-доброй атмеги на что-то из семейства ESP. Эта система на кристалле (да, именно так её называет производитель, SoC) из коробки имеет на борту достаточно шустрое ядро, WiFi и приличный объём памяти. Но, имеет место быть небольшой конфликт: рабочее напряжение пинов ESP 3.3В. А напряжение питания WS2812b составляет от 3.5 до 5.3В, исходя из даташита. Причём, "протокол" передачи данных для светодиодов подразумевает формирование прямоугольных испульсов, кодирующих 24 бита цвета для каждого светодиода. Уровень "0" в этой последовательности должен быть <0.3VDD (напряжение питания), уровень "1" >0.7VDD.

Я покопался в своих закромах и обнаружил две платы Wemos D1 mini (на базе ESP8266) и одну плату LOLIN S2 mini (на базе ESP32-S2). Обе платы имеют всю необходимую обвязку для подключения внешнего питания 5В и подтягивающие резисторы для запуска МК. Там же, в закромах родины нашёл весьма удобные макетные платы под форм-фактор этих устройств.

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Макетная плата для Wemos D1. К LOLIN S2 mini тоже подходит, но маркировака пинов не совпадёт

Это снимает проблему согласования напряжения питания ESP и WS2812b. Но возникает опасение, что уровень логической "1" от контроллера будет недостаточным для формирования управляющего сигнала. Ведь, согласно даташиту, уровень "1" >0.7VDD. А питание светодиодов у нас 5В, соответственно, требуемый уровень логической единицы равен 0,7 * 5 = 3,5В. Тут я пошёл по пути экспериментов, быстренько набросал схемку на бредборде и проверил, а как оно, заведётся, или нет. Ведь, исходя из моего опыта общения с контроллерами семейства STM32, уровня 3.3В должно быть вполне достаточно. И оно завелось!

Подбор ПО

Очевидно, что прошивка будет самописная. Надеяться, что вот сейчас я зайду в гугл, забью "прошивка ESP8266 с моими требованиями" и все найдётся и заработает достаточно наивно. Да и неспортивно это. В случае с ESP есть два основных фреймворка для написания прошивки. Профессиональный ESP-IDF с его ориентированностью на чистый С и Arduino IDE с ядром ESP. Причём второе - это, по сути своей, обёртка вокруг ESP-IDF. Так как у меня была хоть и ущёрбная, но рабочая прошивка для Arduino Nano, написанная в Arduino IDE, я остановился на втором варианте.

Этап второй. Практическая реализация в железе.

Схема в общем виде выглядит так:

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Ничего сложного и интересного. Единственное, для одной из систем одна из кнопок была заменена на устройство bme280, работающее по протоколу I2C. Интересно отслеживать влажность в помещении и уровень давления. Показания температуры врут безбожно: датчик находится слишком близко к ESP, которая имеет привычку сильно нагреваться. Спаять устройство по этой схеме не представляет ничего сложного. Но ведь хочется сделать всё красиво. А значит нужен корпус для устройства и система крепления гирлянды. С корпусом всё довольно просто. Минут 30 в Компас3D, час работы 3D принтера и в руках корпус, подогнанный под конкретное спаянное устройство. Магия термоклея, и на выходе получается вполне себе симпатичный прибор:

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Безусловным плюсом будет возможность заменить плату в случае необходимости

С системой крепления всё чуточку интереснее. Если на ёлку крепить гирлянду не требуется (просто берём и обматываем гирлянду вокруг дерева), то на окно требуется крепёж. Тут возможно реализовать два варианта: установить гирлянду непосредственно перед окном, но за шторой. Тогда праздничное настроение будет создано людям, гуляющим на улице и смотрящим на мой седьмой этаж. Либо размещать гирлянду перед шторой. Тогда праздничное настроение будет у всех, находящихся в комнате. Я пошёл по второму пути. Штора крепится на гардину с Т-образными пазами. И вновь на помощь приходит компас и 3D-принтер. В каждой точке, из которой спускается светодиодная гирлянда была изготовлена вот такая сборка из двух деталей:

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Бонусом, такая конструкция хорошо фиксирует сборки проводов, и конструкция получается довольно добротной. Следующей "железной" проблемой стало то, что провод со светодиодами достаточно лёгкий, и гирлянда отказывалась висеть вертикально. И вновь 3D принтер спасает положение. Я напечатал несколько тематических грузиков, и привязал их на тоненькие верёвочки. Получилось весьма достойно:

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Этап третий. Программное обеспечение aka прошивка

А вот прошивку не скину в чистом виде. Только если кто-то хочет повторить - могу ему слить данное поделие. Ибо в коде есть ряд проблем, которые пока не решены.

Принцип работы системы прост до ужаса. Намертво зашиты константы с SSID/PASS моей локальной WiFi сети и IP адреса всех гирлянд, участвующих во взаимодействии. Arduino IDE хорош, в первую очередь, невероятным количеством библиотек. Итак, что есть сейчас, и для чего используется.

  1. Разумеется, WiFi, для подключения к локальной сети. SSID и пароль забиты в дефайны, что есть хардкод, и вообще моветон

  2. FastLED для управления WS2812b. Реализован простейший алгоритм отслеживания потребляемого гирляндой тока и ограничение оного к возможностям источника питания. Работает, на мой взгляд, лучше встроенного в библиотеку.

  3. WebServer для поднятия странички управления гирляндой, если сильно лень подходить и нажимать кнопку. Я не сильно дизайнер, но страничка получилась довольно простой и информативной.

  4. UDP для общения между гирляндами. Да, я знаю, что есть ненулевой шанс потери данных, поэтому пришлось реализовать достаточно простой алгоритм проверки корректности пришедших данных. Битые пакеты отбрасываются. Вроде бы это не очень хорошо, но я тут не космический корабль запускаю, и не ядерным реактором управляю. Если синхронизация произойдёт на 100мс позже, то ничего страшного. Хардкод в данном случае - IP-адреса гирлянд, участвующих в обмене информацией, жестко прописанные в роутере.

  5. ArduinoOTA. Лень каждый раз подключать ESP напрямую к компу, когда хочется что-то поменять в прошивке. А так всё выходит просто: обновились по воздуху, и радуемся.

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Web-страничка для управления гирляндой

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

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Примеры гирлянды, которую мне лень снимать сейчас :)

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Примеры гирлянды, которую мне лень снимать сейчас :)

Кто празднику рад, тот накануне пьян, или как я "умную" гирлянду делал Своими руками, Esp8266, Esp32, Arduino, Умный дом, Самоделки, Электроника, Длиннопост, Рукоделие с процессом

Примеры гирлянды, которую мне лень снимать сейчас :)

В сухом остатке получилось несколько устройств, на которые не стыдно посмотреть, которые не стыдно показать и которые работают и радуют глаз. Возможно, когда разберусь с текущими проектами - вернусь к доработке гирлянд. Избавиться от хардкода, что не очень сложно и чуть улучшить синхронизацию (заставить гирлянду-мастера передавать не только свой текущий режим, но и конкретный тик из millis() для более эффектного внешнего вида) и всё, пожалуй. Сделать полноценное Android-приложение, управляющее гирляндами. Возможно, имеет смысл сделать отдельный сервер на полновесной ESP32, который собирал бы данные с гирлянд, и синхронизировал их при необходимости. Но это уже вопрос полноценного самописного умного дома, т.к. к такому серверу можно подключить любое устройство на базе ESP. Для работы с MQTT так же есть полноценные библиотеки. В общем, проект получился достаточно простым, но интересным с точки зрения возможности масштабирования.

На этом всё, спасибо, что дочитали. Ссылок на телегу не будет, это всё от лукавого :)

Рукодельники

52.5K постов58.4K подписчиков

Добавить пост

Правила сообщества

В сообществе запрещена торговля, обсуждение цен, ссылки на страницы с продажами, контакты автора в комментариях. Обязательна информация о материалах и инструментах в текстовом виде.

0. Соблюдайте основные правила Пикабу.


1. Будьте вежливы, старайтесь писать грамотно.


2. В публикациях используйте четкие и красивые фотографии.


3. Автор поста с тегом [моё] может оставить ссылку на свой профиль, группу или канал на других источниках, при условии, что ссылки (активные и не активные) не ведут на прямые продажи. Допускается не больше четырёх ссылок и только в конце поста (п. 8.5 основных правил).


Запрещены:

-ссылки рекламного характера/спам;

-ссылки, ведущие на магазины с указанием стоимости товара/услуги;

-ссылки, ведущие на призывы, покупки, продажи, подписки, репосты, голосование и тому подобное.

(нарушение основных правил сайта, п.8.1 и п. 8.2).

При переходе по ссылке запрещено наличие активных (кликабельных) ссылок, ведущих на вышеперечисленное в п.3, содержание таких ключевых слов как «товар», «услуга», «купить», «продам», «в наличии», «под заказ» и т.п.


3.1 Размещение контактов автора (самим автором или другими пользователями) в комментариях запрещено и подлежит удалению (п. 9.1 и 9.3 основных правил).


4. Обязательным для авторов является наличие технических характеристик изделия в публикациях (материалы, техники, авторские приемы, размеры, времязатраты и прочее) в текстовом виде.

Также помечайте свою работу тегом «Рукоделие с процессом» или «Рукоделие без процесса».


5. Пост-видео, пост-фото без текстового описания переносится в общую ленту. Даже если в видео показан подробный процесс изготовления, делайте краткое описание для тех, у кого нет возможности/желания смотреть видео.

Администрация оставляет за собой право решать, насколько описание соответствует п. 5.


6. Посты с нарушениями без предупреждения переносятся в общую ленту.

За неоднократные нарушения автор получает бан.

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

1
Автор поста оценил этот комментарий

Посмотрел - почитал про этот чип и очень порадовал первый коммент на хабре

"сравнивайте его с Arduino Mega 2560 или ESP32S/NodeMCU — характеристики последнего вообще камня на камне не оставляют от STM32"
https://habr.com/ru/articles/406839/#comment_18382279
Наверное все же лучше оставаться на ESP

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Там про stm32f0, discovery который. Самая популярная, на мой взгляд - blue pill stm32f103. Есть варианты за 100р у китайцев. Сейчас ковыряю домашний проект на stm32f401. Он вполне себе рвёт все эти esp уже рвёт по производительности. Что у stm хорошо - код легко портируется с платы на плату, и железо всегда под свои задачи подобрать можно.
1
Автор поста оценил этот комментарий

если посмотреть одну и работ Алекса, то и будет ссылка на этот проект от vvip-86.
это дальнейшее продолжение проекта.
для stm я не дорос пока еще

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Для STM, насколько я знаю, есть ядро под Arduino IDE. Возможно, и под VS Code+PlatformIO что-то есть. Я пробовал ковырять несколько лет назад, мне не очень понравилось, костылей много. Хотя сейчас, вроде бы как, доделали. Хотя, под родным фреймворком не сильно сложно всё работает. Документация довольно подробная и доходчивая. И HAL не сильно сложнее стандартного Wiring из Arduino IDE. А еще стоят китайские stm дешевле китайских же ардуин. Попробуйте, вдруг затянет :)

показать ответы
Автор поста оценил этот комментарий

Вот еще на этот проект стоит обратить внимание.
https://github.com/vvip-68/LedPanelWiFi

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Весьма любопытно. Я, если честно, в сторону stm32 ухожу. Пора что-то посерьёзнее использовать начинать. Правда, нет такого количества библиотек, как на фреймворке ардуино, но это стимулирует разобраться в работе сторонних железяк, и свои писать. Или готовые портировать.
А автору vvip-68 я бы "+" поставил. Если бы он на пикабу публиковался. :)
Там, кстати, отдельные библиотеки у AlexGyver утащены. И у Алекса на гитхабе и его сайте довольно много любопытных проектов.
показать ответы
1
Автор поста оценил этот комментарий

и это не может не радовать
по крайне мере проще будет следить за обновлениями программы

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

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

показать ответы
Автор поста оценил этот комментарий

спасибо большое
очень познавательно
я в процессе самообучения, поэтому и попросил

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Вы таки будете смеяться, но Вы меня сподвигли гитхаб завести :)

https://github.com/AlexZealot/Cristmas

показать ответы
Автор поста оценил этот комментарий

а ссылочку на исходник плз

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Не совсем уверен, что Вам это нужно, но мне не жалко https://disk.yandex.ru/d/mV1eQmOAqp8ZLA
В коде очень многое приколочено гвоздями к текущим конфигурациям светодиодов. Делать универсальный код цели не было. CristmasTree_ESP - мастер-гирлянда, CristmasWindow_ESP - остальные гирлянды. Пояснения в файле Configuration.h

показать ответы
Автор поста оценил этот комментарий

Не приходилось ли вам сталкиваться/работать с адресными монохромными лентами?

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Честно говоря, нет. И даже беглым гуглением нашёл только стандартные rgb.
Автор поста оценил этот комментарий

Немного про вай фай не верно, вернее будет сказать что радиоканал для синхрона. Про надолго ли хватает батарей, смотря сколько пикселей прицепить, много ли белого в видеоряде, много переменных для точного ответа (2000 пикселей где то 30-40мин работы)

Цена контроллера,  с тех.характеристиками этими 11000+рублей,  модельки попроще подешевле стоят , но тем не менее 6000+рублей. Мне кажется слегка затратно это просто для игрушки типа гирлянды))))

раскрыть ветку (1)
Автор поста оценил этот комментарий
Да, точно, дороговато. Как из пушки по воробьям. :)
1
Автор поста оценил этот комментарий
А как же видео работы?
раскрыть ветку (1)
Автор поста оценил этот комментарий
А вот про это не подумал при написании. Да и, наверное, рейтинга не хватило бы видео прикрутить. Вернусь в родной город - сниму, в комент выложить попробую.
Автор поста оценил этот комментарий

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

раскрыть ветку (1)
Автор поста оценил этот комментарий
С нормальным белым, как мне кажется, стоит в сторону RGBW смотреть. Из ws2812 и их ближайших родственников все отдавали в голубой цвет.
5
Автор поста оценил этот комментарий

Более 5ти лет уже собираю подобные изделия, питание 2шт 26650 батареи, контроллер (попроще) 2024 пикселя тянет, контроллер (посложнее) 8096 пикселей тянет. Всё синхронится по вайфай между собой, есть возможность работать через DMX, есть возможность работать по предзаписанному видеоряду. Список поддерживаемых чипов огромный.  Будут вопросы пишите

Иллюстрация к комментарию
Иллюстрация к комментарию
раскрыть ветку (1)
Автор поста оценил этот комментарий
Круто! А как происходит синхронизация по wifi, в общих чертах? UDP? WebSocket? Надолго хватает 26650? Они, вроде, в среднем раза в два более ёмкие, чем популярные 18650.
показать ответы