ESP, IoT WiFi лампа/гирлянда/информер ws2812/HUB75 - Обсуждение прошивки FireLamp_EmbUI

FireLamp_EmbUI - деполитизированный форк проекта "огненной" лампы (исходный проект FireLamp_EmbUI)

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

Проект эволюционировал от "лампы" в гибридную прошивку для адресных лент / HUB75 RGB панелей.

Эволюцию проекта и смежные вопросы (архив) в теме универсальный информер/часы/лампа/гирлянда

Примеры работы проекта:



Внимание!
Актуальное описание и документацию можно найти на странице проекта в GitHub, шапка обновляется редко.
Вопросы сообществу можно задать в группе телеграм - LampDevs
Документация доступна в WiKi проекта,.

Концепт
Исходный проект был значительно переписан и реструктурирован. В разработке основное внимание уделяется структуре кода, декомпозиции и объектоориентированности даже в ущерб функциональнсти и "фичам". Основная идея развития - вся конфигурация и управление периферией должна быть максимально доступна во время работы кода без необходимости пересборки всего проекта. Параметры в конфигурационных файлах и опции сборки сводятся к минимуму, упраздняются и заменяются настройками через WebUI.

ESP8266 vs ESP32

Разработка ведется только под контроллеры семейства esp32. ESP8266 морально устарел, было принято решение не тратить время на поддержку совместимости и уделить больше времени и ресурсов актуальной платформе. Последний стабильно работающий на контроллерах 8266 выпуск проекта - версия v3.1.1, используйте на свое усмотрение, корректная сборка с обновлёнными библиотеками не гарантируется.

Бинарные сборки
Самый простой способ залить прошивку это воспользоваться веб-прошивальщиком из браузера. Прошивка работает из Chrome, Opera, MS Edge. Перейдите на страницу ESPWebFlasher и следуйте описаным инструкциям.
Проект можно прошить в чистую плату используя готовые сборки со страницы выпусков. Бинарные образы подготавливаются и прикрепеляются к выпускам начиная с v3.6.0. В списке Assets можно нати архивы factory_images_XX.zip и firmware_images_v3.6.0.zip. Factory - полный образ прошивки готовый для заливки в чистую плату, содержит в себе полный набор компонентов включая образ файловой системы с веб-ресурсами. Firmware - образы для обновления предыдущей версии прошивки, пригодные для заливки по воздуху через WebUI (OTA).


Как собрать проект
Для Windows понадобится установить git, python, platformio, проще всего это сделать с помощью скрипта. Подробнее можно прочесть в WiKi

Легкий способ:
для пользователей Windows OS можно использовать builder скрипт. Билдер был изначально написан @kostyamat (за что ему спасибо), адаптирован под форк текущей комадой (@andy040670).
Запускаете билдер и последовательно проходите шаги установки питона, гит, платформио, клонирование репозитория и сборку требуемого варианта прошивки.

Правильный способ:
Проект собирается с помощью Platformio
Для сборки проекта понадобится следующее:
Установить IDE Visual Studio Code, и, в качестве плагина к ней, установить Platformio. О том как это сделать можно найти массу роликов на youtube, например этот.

Желательно еще установить Git, обновлять проект будет значительно проще

Как скачать/обновлять проект

Актуальный срез проекта всегда можно скачать в виде zip-архива по ссылке, рекоммендуется скачивать последний выпуск со страницы релизов. Для желающих принять участие в тестировании можно поддерживать клон репозитория и подтягивать свежие обновления перед каждой новой сборкой. Открываем Git-bash, клонируем репозиторий в тукущую папку командой git clone --depth 1 --no-single-branch https://github.com/vortigont/FireLamp_JeeUI.git В дальнейшем для того чтобы обновить репозиторий достаточно перейти в папку проекта и выполнить команду 'git pull'.
Рекомендуется периодически обновлять зависимые библиотеки после обновления репозитория, обновление выполняется командой pio pkg update.

После того как вы скопировали проект (в виде zip архива или через git clone), необходимо в папке include скопировать файл user_config.h.default под новым именем user_config.h и в нем настроить сборку под свои параметры матрицы, номеров выводов и требуемых функций.

заметки по установке ПО под windows от @dina
дляпроверки того что всё ПО было установленн корректно в консоли в папке с проектом должны успешно выпоняться следующие команды:
git --version
git pull обновление репозитария
git status
pio --version
pio pkg update - обновление библиотек
pio run -e esp32 -t upload - прошивка
pio run -e esp32 -t uploadfs - прошивка Фс
git switch master - переключение на ветку мастер
git switch feat переключение на ветку feat


Сборка

  • Открываем папку проекта в VSCode
  • Что бы собрать прошивку, можно воспользоваться кнопками в нижней статусной строке:
    • PlatformIO:Build - собрать прошивку
    • PlatformIO:Upload - загрузить прошивку через USB в плату.

Platformio сам скачает необходимые библиотеки для сборки проекта.

Также можно открыть терминал с помощью клавиш Ctrl+Shit+` и воспользоваться расширенными командами для сборки проекта.

  • pio run -t upload - собрать и записать в контроллер проект по умолчанию под платформу esp32
  • pio run -e esp32debug -t upload - собрать и записать версию esp32 с отладкой, будет собрана прошивка под esp32 c выводом отладочных сообщений через serial интерфейс
  • pio deviсe monitor - запустить serial-монитор для просмотра сообщений, выдаваемых контроллером


Для работы лампы нужно сформировать и залить в контроллер образ файловой системы. Выполняется это командой аналогично записи прошивки, но с параметром -t uploadfs, к примеру
  • pio run -t uploadfs - записать в контроллер образ ФС под платформу esp32

После первой прошивки дальнейшие обновления можно заливать в контроллер по воздуху. Для этого нужно зайти браузером на контроллер по URL вида http://embui-xxxx/update, где xxxx это ID контроллера, нажать на кномку 'Firmware', выбрать файл с прошивкой и загрузить его в контроллер. Файл с прошивкой Platformio кладет в подпапки проекта:

  • .pio/build/esp32/firmware.bin - версия под esp32

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

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


Озвучка для мп3 плеера
набор звуковых файлов для MP3 плеера можно скачать по ссылке из WiKi

Говорящие часы / кукушка
- настраиваема озвучка времени почасовая / пол часа / четверть часа
- тихие часы для отключения озвучки по ночам

Будильник
- 4 независимых будильника со своей мелодией у каждого
- каждый будильник может иметь один из режимов на выбор
- однократное срабатывание
- ежедневное срабатывание
- по будним дням
- по выходным дням

Управление
Лампа управляется через WEB-интерфейс или через мобильное приложение WLED-Native-Android, WLED-Native-iOS, старый WLED


Device API описан на странице в WiKi
 
Изменено:

Комментарии

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
что тестировать с дебагом или без
тестировать лучше всё с логами если есть возможность, иначе приходится много гадать. Правильно собрать логи это тоже задача что бы не выгребать тонны мусора и поймать нужный момент. Но всяко лучше чем ничего, по недавним вашим логам я сразу ошибки нашел.
Раскладывать хотелки/проблемы по билетикам на гитхабе тоже полезно ибо накидываете вы быстро, я все равно большую часть потеряю. Кроме того надо сортировать задачи - какие-то не буду исправлять вообще т.к. планируется полностью что-то переделать, какие-то в низкий приоритет ибо не критично и может подождать. В общем по тикетам триажить и отслеживать удобнее, это обычная практика. Но тикеты надо вести аккуратно. Форум для общения и выяснения подробностей.

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

Showing 149 changed files with 14,587 additions and 12,448 deletions.

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

Дрон

✩✩✩✩✩✩✩
18 Окт 2019
28
5
я недавно там переписал кучу функций-обработчиков, наверняка что-то сломал
Большое Вам спасибо за работу над проектом, другие ветки этого проекта почти заброшены. Терпения Вам и удачи.
По поводу "События": сегодня крутил и так, и сяк, вроде срабатывает(вкл., выкл., вывод строки). Что было утром, не знаю.
Сегодня опять "заряжу".
Можете подробнее описать, дать ссылку(создать инструкцию) как работать с логами?

"События" заработали только после "перезаливки" ФС, код не "заливал".
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
Нажимаешь Default (41), выбираешь esp 32 debug (39) , заливаешь прошивку с дебагом ,после прошивки нажимаешь вилку розетки (40), пойдет лог.
 

Вложения

  • Лойс +1
Реакции: vortigont

Дрон

✩✩✩✩✩✩✩
18 Окт 2019
28
5
Здравствуйте, сегодня запустилась нормально, что было вчера- не знаю. Может то, что прошил ещё раз ФС ?
Кстати, ФС прошивать первой, а потом код, или наоборот?
 

Дрон

✩✩✩✩✩✩✩
18 Окт 2019
28
5
@Дрон, глюки )
заливать сначала прошивку, потом образ ФС
В первый раз так и делал.
Теперь по выключенной кнопке "Плавное переключение эффектов" :
Переключал два эффекта "Пейнтбол" и "Эффект 3Д шума", менял настройки и переходил с эффекта на эффект.
Настройки не сохранялись, и в какое то переключение лампа выключилась.
 

Вложения

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@Дрон, вы хорошую багу нашли. Падения это регрессия после изменений с настройкой матрицы из вебморды.
Надо немного переработать схему переключения эффектов. Повыкидываю несколько схожих методов и сведу всё в один, позже сегодня выложу если успею проверить.

попровил эту проблему
 
  • Лойс +1
Реакции: Дрон

Дрон

✩✩✩✩✩✩✩
18 Окт 2019
28
5
попровил эту проблему
Обновился, стало ещё хуже, при переключении эффект может включиться, а может нет. Если эффект включился, то ведёт себя не как положено.
Но теперь настройки сохраняются, и кнопка "Плавное переключение эффектов" остаётся в том положении, в котором была.
 

Вложения

Дрон

✩✩✩✩✩✩✩
18 Окт 2019
28
5
@vortigont,
После этой(в файле) перезагрузки всё устаканилось и работает нормально. Чудеса какие то. Перезагружалось 2 раза.

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

Вот здесь вроде поймал фрагмент.

Причём, происходит через раз, или 4-5раза(выключения)

не может влиять если у меня выход на лампу на пине RX0, по программе "LED Matrix gpio" 3.

@Дрон,
перевёл на D2-тоже самое.
 

Вложения

  • Лойс +1
Реакции: dina и vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@Дрон,
по вашим логам нашел и поправил еще кучку багов
- вылет за границы списка в пикассо
- чистую перезагрузку эффекта при включении лампы
- исправил остатки мусора на матрице при выключении без фейдера, это был интересный случай
 
  • Лойс +1
Реакции: Дрон

Дрон

✩✩✩✩✩✩✩
18 Окт 2019
28
5
@vortigont,
Здравствуйте,
1. Настройки эффектов сохраняются
2. Лампа выключается и включается нормально.
3. В приложенных логах проблема - при включении этого эффекта лампа перезагружается. В каких то один раз, в других постоянно при включении эффекта. Файлы подписаны.

Источник

Я не разбираюсь в коде, но мне кажется, что лампа постоянно хочет подключиться через MQTT:
UI: Connecting to MQTT...
UI READ KEY: 'm_pref' VAL: ''
UI READ KEY: 'm_host' VAL: ''
UI READ KEY: 'm_port' VAL: ''
UI READ KEY: 'm_user' VAL: ''
UI READ KEY: 'm_pass' VAL: ''
 

Вложения

  • Лойс +1
Реакции: dina

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
приложенных логах проблема - при включении этого эффекта лампа перезагружается
интересные баги вы находите, кстати. Полезли проблемы с плохим дизайном и отсутствием изоляции объектов. Под 8266 это было фиолетово, там всё выполнение линейное, а под есп32 проявляются проблемы с thread safety. Коряво написанные эффекты падают на циклических обращениях к контролам.
Исправил "тени" и добавил заплатку на действия по кнопкам '<<', '>>' в морде. Остальные эффекты, вероятно тоже перестануть падать, проверьте. Но в любом случае как минимум это править все корявые эффекты, а как максимум надо менять архитектуру управления эффектами более глубоко. Существующие контролы уже критики не выдерживают.

Насчет мкутт это самый древний участок кода оставшийся в наследие еще от Марселя. Там бы по-хорошему тоже целиком переписать надо, но т.к. я мкутт не пользуюсь, у меня все руки не доходили. Попробую вокнуть какую-нибудь затычку чтобы хоть не долбилось постоянно если сервер не прописан.
 
  • Лойс +1
Реакции: dina

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
Здравствуйте! Выдался денек выходной. Круто Вы лампу причесали, сколько не крутил вообще ни одной перезагрузки не было! Только точки на дисплее ,глаз режут ,живут своей не понятной жизнью. Ждать энкодер ,в меню гпио? Могу на выходных заморочиться ,с ds18b20 ,на пин aux ,светодиод напаять (поглядеть переключение) ,так же есть модуль rtc ds3231. Надо? Что на данный момент ,надо тестить?
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
ну т.е. считаем что реализация настроек параметров матрицы на лету вполне себе жизнеспособна. Слил то что есть в мастер ветку.
Падавшие эффекты все равно надо перебрать и исправить, муторно это, может с остальными контролами когда.
Дальше что пока думаю... остались крупные и неинтересные куски на переписывание целиком, лениво )
Наверное, таки перелопачу управление яркостью, ибо мешает дальше что-то менять - толи это контрол, толи не контрол. Да и надо что-то делать с неравномерностью динамического диапазона для эффектов. Добавлю разные кривые на каждый эффект. Эндину хотелку с индивидуальной яркостью пока думаю как сделать, весьма странная хотелка.
Плюс еще корявый вывод текста, тоже надо в либу вынести аккуратно как-то. ПОка хватит более чем.

Энкодер и кнопку пока не ждать - там такой беспредел что только с нуля писать. Для этого нужно сначала собрать какую-то шину событий для обмена данными. Это небыстро.
ds и rtc нафиг... это была какая-то Костина закидушка под его личный проект, не знаю кому оно еще может быть нужно впринципе? По идее надо выдрать это всё из существующих объектов и, при желании, оформить как какой-то плагин. Надо подумать на этим в долгую.
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49

@vortigont,
Ладно ,буду эффекты крутить ,в хвост и гриву ) На пин aux светодиод напаяю ,через События погляжу, его оставим ? Автоматизация ,наверно пускай будет ? Свистните ,если что.
 
Изменено:

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
починил я эти дурацкие точки на тм экране, ппц... пользы на копейку, возни на килограмм

AUX останется как сейчас есть пока руки не дойдут на что-то более приличное
 
  • Лойс +1
Реакции: Дрон и dina

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
Ура! Заработало! Куча перезагрузок ,всё чётко!
 
  • Лойс +1
Реакции: vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
полностью переделал управление яркостью

шкала яркости теперь масштабируемая, по-умолчанию изменяется в пределах 0-20. Кому неудобно, можно поменять в "настройки" - "дополнительные" и выставить любое значение вплоть до 255 для особо упортых. Если выставить 100, получатся проценты. Думаю по-умолчанию и 0-10 хватило бы, но ладно, посмотрим.

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

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

1688119379311.png

exponent - экспонента самая медленно нарастающая кривая, хорошо подходит для эффектов "вырви глаз"
cie1931 - по-умолчанию, наиболее равномерная по восприятию
sine -
синус, нарастает медленне чем линейная по краям шкалы, но похожа на линейную в середине
linear - без какой либо коррекции, по сути это управление скважностью ШИМ светодиодов
square - квадратичная, нарастает медленее чем линейная, догоняет линейную к концу шкалы

синус, линейная и квадрат кривые, кажутся "ярче" чем по-умолчанию 1931. Далее надо подбирать под каждый эффект по вкусу. Сравнивать кривые лучше по 3м точкам - примерно на четверти, половине и 3/4 шкалы. Сравнивать только посерёдке смысла нет.

В целом я потыкал, если не упарываться до одури, то вполне норм влепить экспоненту на яркие эффекты, типа "метасферы" и квадрат или синус на убогие типа "акварель" или "бегающий кубик".

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

P.S. То что некторые кривые будут в начале шкалы на малых значениях (1-2) гасить матрицу - это нормально ибо выходит за пределы динамического диапазона 8 битной матрицы. Хотите блеклые и потерянные цвета на очень малой яркости - ставьте шкалу на 255 и линейную кривую.

P.P.S. Для @andy040670 - сейчас "индивидуальной" яркости для каждого эффекта нет, но, в принципе в тукущую архитектуру ее вписать можно. Но будет несколько "но", на эти настройки не будет действовать масштабирование шкалы и кривые (что логичино, ибо нафиг тогда этот ручной контрол нужен). Другой вопрос что в текущей реализации я вот совсем не понимаю зачем этот рудимент таки нужен, кроме как потому что оно у вас просто есть и всё. Процесс ломать не охота.
Давайте так, у вас лампа все равно на 8266 сейчас и текущий проект, я так понимаю, вам ни к чему? Когда соберете лампу на есп32 - посидите и пощупайте новую реализацию, вдумчиво. Если прям вот совсем не зайдет и кровь из носу захотите сохранять значение для каждого эффекта, скажите мне, я сделаю. А пока посмотрим как оно будет жить.
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
Кнопка работает,только на тм1637 клики ,не отображает.Эффект 8 акварель ,кривая яркости помогла ,на старте эффекта видно, но сам эффект кривой ,ползунок плотность двинешь ,всё резко меняеться. Эффект 42 Огонь 2018 поломался. Эффект 73 космогоншик ,было пару раз ,как будто стартует за пределами экрана (картинки нет) ,потом через какое то время появляеться нормальная картинка. Коль у нас клик кнопки энкодера ,глобальная яркость освободилась ,на него повесить вкл. выкл. Мп3 плеера. А так по яркости ,я как использовал примерно на 25- 30% ,так и здесь. У 8 эффекта акварель ,только кривую яркости изменил.Ну и с энкодером прошивка не собираеться. И ещё вопрос ,что чекрыжик Отладка ,должен делать? Еще интересное наблюдение. В Vsc ,прошивка с энкодером ,не собираеться. В консоли ,собираеться и прошиваеться ,только плеера ,дисплея ,микрофона нет ,хотя в конфиге акктивировано. Это как так работает?
 
Изменено:
  • Лойс +1
Реакции: vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
С прошивкой - не знаю, выглядит так что что-то не то сибираете :) если в вебморде есть настройка плеера/дисплея значит должен работать. Если нет - значит собралось без поддержки онных.
Огонь я понимаю от чего сломался, я недавно что-то менял в классе 3д карты шумогенератора. Заведите тикет, позже поправлю. На выходных без компа.