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
 
Изменено:

Комментарии

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Здесь не всё так однозначно.
управление эффектами динамическими контроллами типа dynCtrlX, где X номер контролла в эффекте.
  • on: 1 on: 0 - вкл/выкл
  • demo: 0/1 - режим ДЕМО
  • g_bright: 0 отключает глобальную яркость, 1-255 устанавливает глобальную яркость.
  • msg: Hello - вывод сообщения на лампу
  • bright: 0-255 - яркость (Нужно проверять, либо dynCtrl0)
  • speed: 0-255 - скорость (Нужно проверять, либо dynCtrl1)
  • scale: 0-255 - шкала (Нужно проверять, либо dynCtrl2)
  • effect: N - эффект номер N
  • move_next - следующий эффект
  • move_prev - предыдущий эффект
  • move_rnd - случайный эффект
  • effect - номер текущего эффекта
  • warning, warning: [16777215,5000,500] - неблокирующий вывод мигалки поверх эффекта (выдача предупреждений)
  • alarm: 1 - форсировать включение будильника
  • dynCtrlX , к примеру dynCtrl5: 123 - получить/установить значение дин. контрола
  • reboot - перезагрузить лампу
Всё это надо проверять.
Есть ещё команды управления мп3 плеера, но надо составить список и проверить.
Команды периодически менялись (true/false на 1/0, + контроллы управления эффектов и т.д).
На старом форуме я их собирал/обновлял, но форум затёрли.
Все команды в одном файле вы не найдёте.
 
Изменено:

Константин 271

★★★✩✩✩✩
12 Июл 2020
950
105
g_bright: 0 отключает глобальную яркость, 1-255 устанавливает глобальную яркость.
работает.

bright: 0-255 - яркость (Нужно проверять, либо dynCtrl0)
не работает, поэтому применил глобальную.

effect: N - эффект номер N
работает.
 
  • Лойс +1
Реакции: andy040670

Svetlaya

✩✩✩✩✩✩✩
12 Апр 2021
12
3
работают на крайней версии 2хх
/embui/set/effect (номер эффекта)
/embui/set/bright
/embui/set/speed
/embui/set/scale (масштаб)
/embui/set/mode (значение команды не знаю)
/embui/set/demo
/embui/set/msg (текст. поверх)
/embui/set/on
/embui/set/move_next (любая цифра. следующий эффект)
/embui/set/move_prev
/embui/set/move_rnd
/embui/set/reboot

Здесь не всё так однозначно.
управление эффектами динамическими контроллами типа dynCtrlX, где X номер контролла в эффекте.

  • dynCtrlX , к примеру dynCtrl5: 123 - получить/установить значение дин. контрола
Можно подробнее?
 
Изменено:
  • Лойс +1
Реакции: andy040670

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Можно подробнее?
Контролы в эффекте.
Первые три: яркость, скорость, масштаб статичные*, так как имеются в каждом эффекте, если их больше, то идут уже динамические (ползунки, переключатели), в место название присваивается номер (dynCtrlN).
Получить номер контрола можно в топике /pub/, и если память не изменяет, в том же топике в json формате.
*Тут может быть и не так, потому что статичные были, потом их убрали, затем опять вернули, короче я уже запутался. Так как лампы у меня нет проверить крайне хлопотно.
 
  • Лойс +1
Реакции: Svetlaya

vortigont

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54

vortigont

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

То есть Wan-Derer'у.
написал, спасибо!
 

Svetlaya

✩✩✩✩✩✩✩
12 Апр 2021
12
3
- как он у вас работает? Какие настройки ввели и какая команда? У меня это на яркость не влияло.
версия прошивки 2.3.0
как любая другая команда. В данном случае отправляется любое число от 0 до 255
я управляю с MajorDoMo

имя в сети/embui/set/bright "100"
 

Вложения

Svetlaya

✩✩✩✩✩✩✩
12 Апр 2021
12
3
Попробуйте этой командой:
  • g_bright: 0 отключает глобальную яркость, 1-255 устанавливает глобальную яркость.
 

vortigont

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

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
дай Бог, хоть в конце марта))
в марте будет тепло и красиво - потянет на улицу, а не кодить сидеть ))

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

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
Тиснул изменения в мастер. Это какая-то боль... код настолько неопрятный и корявый что хоть выноси... небезопасная работа с памятью, дублирование функционала, какие-то копии экземпляров двойные, а то и тройные. Не удивительно что оно падает, удивительно как оно вообще работает-то. В коде эффектов вообще бедлам - неициализированные вектора, вылеты за границы массивов, деление на ноль... :poop: Я немного поменял схему смены и инициализации эффектов и это всё вылезло как гнойники наружу :eek: Штук 10 я поправил которые падали явно, остальные перебрать сил пока нет.

  • bbdb353 - fix crash in EffectSmokeballs (2023-02-20) <Emil Muratov>
  • 33ddd34 - fix div by zero in EffectPolarL (2023-02-20) <Emil Muratov>
  • c05a505 - fix stuped divizion by zero in EffectPacific (2023-02-20) <Emil Muratov>
  • 3c9428a - fix undefined vars in EffectStarShips (2023-02-20) <Emil Muratov>
  • 9149c36 - fix crashes in EffectFire2021(2023-02-20) <Emil Muratov>
  • a2058e8 - fix crashes in EffectCube2d effect (2023-02-20) <Emil Muratov>
  • f2d7a3d - fix crash in EffectPopcorn (2023-02-20) <Emil Muratov>
  • e304ad2 - replace char* TCONST_0014 TCONST_dynCtrl (2023-02-20) <Emil Muratov>
  • 28c2fc9 - fix for eff switcher (2023-02-20) <Emil Muratov>
  • fb8ac9a - fix for EffectPuzzles crashes use proper vector definition (2023-02-20) <Emil Muratov>
  • 7192024 - fix for EffectRadialFire aka neopalimaya kupelina (2023-02-20) <Emil Muratov>
  • a6dfb9b - fix EffectWcolor effect initialize std::vector<Blot> blots to default size (2023-02-20) <Emil Muratov>
  • 570b80f - refactor GradientPaletteList and GradientPalette classes let it store copyable objects, prevent leaks (2023-02-20) <Emil Muratov>
  • ce218c1 - rewrite LEDFader class, implement as a singleton (2023-02-20) <Emil Muratov>
  • 5685ca1 - reworked algo for effect switching (2023-02-20) <Emil Muratov>
  • bdd28ce - replace a list of UIControl* with smartpointers (2023-02-16) <Emil Muratov>
  • 8fe024c - effect worker control's lists reworking (2023-02-15) <Emil Muratov>
  • 75febe9 - remove task objects garbage (2023-02-15) <Emil Muratov>
 

vortigont

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Покрутил демо в цикле с последними правками - около суток она проработала, потом таки упала где-то. Где - не заметил, но память в целом течь перестала, по крайней мере в течение суток.
Погонял тоже с правками от 20.02.23, всё так же падает на 4 круге демо по не хватке памяти, на памяти-ёмком эффекте "Метошары". Гонял на 8266 с мп3 плеером в режиме On и Off, разницы нет.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@andy040670, меташары это 71й эффект? их там несколько похожих, стек-трейс не снимали? У меня на нем не падало, по крайней мере не натыкался. Залил еще немного мелких правок, попробуйте.
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
меташары это 71й эффект?
Да, 72 тоже жрёт не мало, а то и больше. Память с каждым кругом демо всё меньше и меньше и когда приходит черёд 71го, лампа падает, этот момент приходит на 4 или 5 круге.
Залил еще немного мелких правок, попробуйте.
Попробую, погоняю.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
вообще тут походу еще много потенциально корявых мест в коде эффектов, нашел еще одну багу в "пятнашках", иногда падало на них оказывается.
Не знаю кто научил эффектописателей использовать std::vector, но используют они их довольно коряво. Уж казалось бы настолько дуракоустойчивая структура.
p.s. я походу что-то сломал в версионности конфигов эффектов, сообщения есть, но без матрицы не оч понятно что там происходит
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
вообще тут походу еще много потенциально корявых мест в коде эффектов, нашел еще одну багу в "пятнашках", иногда падало на них оказывается.
Уже заметил, обновил.
p.s. я походу что-то сломал в версионности конфигов эффектов, сообщения есть, но без матрицы не оч понятно что там происходит
Вот здесь не совсем понятно...
P/s
Погонял...
Аптайм почти 10 часов (15 циклов демо), но памяти почти не осталось, пока работает. Отличный результат.
41.png
При таких настройках:
51.png

P/s
Аптайм 0.12.05.10 - 71, 72 и 73 эффект проходит при 3848b, но не падает.
Ps/Ps
Лампа рухнула ~ через 3 часа,- не отследил момент:)
, но утечка памяти имеет место (не значительная). На укр. прошивке я не могу отследить , так как крашится произвольно, но с памятью вроде всё O;k, на два круга демо иногда точно хватает, вылет без видимых причин.
Вы на правильном пути! Я даже сегодня заказал матрицу, ради такого дела.)). Командировки пока в плане, посижу пока немного на форуме и...)) помогу чем смогу.
 
Изменено:
  • Лойс +1
Реакции: vortigont