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

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

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

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




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

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

ESP8266 vs ESP32

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

Как собрать проект
Для 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 - прошивка Фс
pio run -e esp8266 -t upload - прошивка
pio run -e esp8266 -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 esp8266 -t upload - собрать и записать версию esp8266, будет собрана облегченная прошивка без вывода отладочных сообщений через serial интерфейс Рекомендуется для повседневного использования, если нет нужды отлаживать работу лампы
  • pio run -e esp32debug -t upload - собрать и записать версию esp32 с отладкой, будет собрана прошивка под esp32 c выводом отладочных сообщений через serial интерфейс
  • pio run -e esp8266dev -t upload - собрать и прошить отладочную версию под esp8266
  • pio deviсe monitor - запустить serial-монитор для просмотра сообщений, выдаваемых контроллером


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

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


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

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

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

Для знакомства с проектом можно воспользоваться собранными бинарниками от @andy040670 из этого поста

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

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

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

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


По кнопке:

  • Из выключенного состояния
    • 1 касание - включить на последнем эффекте
    • 2 касания - включить в режиме ДЕМО
    • долгое удержание - включить в режиме "белая лампа" на минимальную яркость (ночник)
    • касание, удержание - включить в режиме "белая лампа" на максимальную яркость
  • Во включенном состоянии
    • 1 касание - выключить лампу
    • 2 касания - следующий эффект
    • 3 касания - предыдущий эффект
    • 5 касаний - вывод IP на лампу
    • 6 касаний - вывод текущего времени бегущей строкой
    • удержание - регулировка яркости
    • 1 касание, удержание - регулировка "скорости" эффекта
    • 2 касания, удержание - регулировка "масштаба" эффекта

Это дефолтное состояние для кнопки, но абсолютно любую настройку можно поменять

HTTP/MQTT команды

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

Комментарии

andy040670

★★★✩✩✩✩
13 Ноя 2019
340
109
53
поправил затухание. Чисто по логам вроде работает, поглядите вживую как оно.
Всё отлично, теперь работает как надо.
Тут выяснилось, что эффект "68. Цветение" не работает от слова совсем, чёрный экран.
 
  • Лойс +1
Реакции: vortigont

Константин 271

★★★✩✩✩✩
12 Июл 2020
946
102
@andy040670, да, кстати, тоже замечал, что цветение не шло - думал, зима ещё, а вот весной - пойдёт сразу... А вот и не весной! :LOL:

@vortigont, мне бы как-то более по-русски, как моды на форумы - папка такая-то, файл такой-то, строка такая-то - замена на то-то, или добавление того-то. Ну, если не сложно.
 
  • Ахах! +1
Реакции: vortigont

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
@andy040670,
про цветение если не лень, то закиньте issue на гитхаб, пока зарылся в эти списки дурацкие, позже гляну.

@Константин 271,
так вы по ссылке сходите - там как раз как вы и просите в каком файле в какой строке что изменилось. Зеленые - добавленные строки, красные удаленные.

пример - в файле include/effects_types.h, добавить 326ю строку.
1678351865215.png

ну а дальше там ищите, строки могут плюс-минуст отличаться в зависимости от того откуда у вас код.
 

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
таки дошли руки, перелопатил я практически весь код работы со списками имен эффектов и их кеширования.
Выкинул все костыли с быстрыми/медленными/отложенными списками, превентивные и дублирующие операции. Бестолковые переключатели значков и номеров тоже выкинул.
Теперь конфиги эффектов и индекс создается в ленивом режиме только когда появляются какие-то изменения в параметрах конкретного эффекта.
Джейсоны для выпадающих списков имен эффектов генерируются через буфер в фоне, плюс с ними теперь корректно работает кеш браузера и не качает их каждый раз заново если ничего не менялось. Регенерация и подгрузка работают, наверное, раз в 10 быстрее чем раньше.
Какую-то логику где-то мог сломать т.к. еще не до конца расковырял эту лапшу с копиями и дублями конфигов, но уже можно потыкать и посмотреть.
Для собрки нужно обновить фреймворк, почистить кеш в браузере и перезалить ФС начисто (или зайти в настройки эффектов и тыкнуть "обновить список").
 
  • Лойс +1
Реакции: shax, Al12313 и andy040670

andy040670

★★★✩✩✩✩
13 Ноя 2019
340
109
53

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
Фреимворк подтягивается автоматом, или надо пересобрать из него фс (/data) в папку проекта?
ну в смысле что надо подтянуть изменения из гита, платформио сам не обновляет если в манифесте версия не поднялась.
Можно сделать pio pkg update в папке проекта
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
340
109
53
ну в смысле что надо подтянуть изменения из гита, платформио сам не обновляет если в манифесте версия не поднялась.
Можно сделать pio pkg update в папке проекта
Теперь понятно. Я думал что это подразумевает запуск скрипта respack.sh. Просто сам фремворк формирует свои ресурсы, а у лампы свои, и при обновлении их с фреимворка ресурсы лампы будут перезаписаны в конечной паке, то есть их надо синхронизировать в гите в ручную, но это другой случай, но стоит внимания, так как они живут каждый своей жизнью не зависимо друг от друга.
Можно сделать pio pkg update в папке проекта
Всегда так и делаю:
1. pio lib update
2. pio pkg update
3. rmdir /S /Q %workdir%\.pio
4. rmdir /S /Q %workdir%\out_bin -> не обязательно, но в билдере я объединил последние две команды и добавил в сборочные пункты mkdir %workdir%\out_bin, так спокойней, иначе будут вопросы, а почему нет папки, но есть файл out_bin, каждый раз объяснять всем специфику CMD не охота.
Пока погоняю на 8266 с кнопкой и микрофоном и матрицей, без дебага.
P/s
или зайти в настройки эффектов и тыкнуть "обновить список
Если зайти в настройки эффектов то наблюдаем это:
1.png
Если выйти и повторно зайти в настройки эффектов, то всё отображается нормально.
P/ss
После 1:04 часа работы в быстром цикле (30 секунд на эффект) памяти 6,4 КБ! Пока не упала, но память опять куда-то потекла.
P/sss
После 1:23 аптайма лампа всё-таки упала, правда не заметил по причине не хватки памяти или ещё какой, вышел покурить)))
Выкинул все костыли с быстрыми/медленными/отложенными списками, превентивные и дублирующие операции.
Это как то связано с строками в юзерконфиге?
C++:
//#define DELAYED_EFFECTS         (1U)  // отложенная загрузка эффектов
//#define CASHED_EFFECTS_NAMES    (1U)  // кешировать имена эффектов, ВНИМАНИЕ!!! жрет память, использовать на свой страх и риск
P/ssss
После падения работает больше часа, память в норме!!!
Ладно, на сегодня хватит. Завтра прошью другую плату 8266 с мп3 и есп32 без всего, посмотрим как они себя поведут.
 
Изменено:

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
Всегда так и делаю:
1. pio lib update
2. pio pkg update
3. rmdir /S /Q %workdir%\.pio
не, ресурсы не менялись, я там настройки вебсервера подправил.
Здесь 1 не нужно, это устаревшая команда, то же самое делайет что и 2.
Если делаете 3 то 2 тоже не нужно :) Ну разве что иногда обновить саму платформу есп, но это редко.

Если зайти в настройки эффектов то наблюдаем это:
это норм, загрушка будет всплывать на веремя регенерации/отсутствия кеш-файлов чтобы не клинило весь интерфейс. Но оно и так быстро обрабатывается, порядка 1 секунды, потом страница самообновляется. Иногда этого не происходит, я пока не нашел при каких условиях, потом поправлю.

Это как то связано с строками в юзерконфиге?
Эти опции в конфиге уже не актуальны, весь связанный с ними код вырезан и заменен другим подходом.

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
340
109
53
вероятно еще не все эффекты отдебажены, надо отлавливать на каких эффектах падало и чинить.
Чаще всего падает на эффекте "45. Магма", при чём памяти достаточно 24.3 КБ.
Прошил вторую 8266 только с мп3, 1 час работы, память исчезает.
Первая 8266 с микрофоном, матрицей и кнопкой после первого падения память стабилизировалась, но падения сохранились.
Эти опции в конфиге уже не актуальны, весь связанный с ними код вырезан и заменен другим подходом.
Надо из юзер-конфига убрать чтоб народ не смущать.
P/s
Обновил бинарники.
#267 (alexgyver.ru)
 
Изменено:
  • Лойс +1
Реакции: vortigont

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
Чаще всего падает на эффекте "45. Магма", при чём памяти достаточно 24.3 КБ.
магму переписал, должа меньше жрать памяти и перестать падать, там везде однотипные проблемы с эффектами.

Надо из юзер-конфига убрать чтоб народ не смущать.
убрал
 
  • Лойс +1
Реакции: andy040670

andy040670

★★★✩✩✩✩
13 Ноя 2019
340
109
53
Подведу итог.
Вылетов на 8266 теперь нет, память держится стабильно, но на 8266 и есп32 с мп3 память тает на глазах. 8266 за час, в режиме демо (30 секунд на эффект) теряет около 20КБ -> ребут, плеер работает нормально, есп32 за три часа потеряла около 40 КБ хотя в настройках мп3 не включен и физически отсутствует.
В общем как то так.
 

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
@andy040670, эта песня будет вечной :)
там еще остались несколько мест корявых в коде переключения эффектов где создаются целиком экземпляры обработчика вместе с кодом самого эффекта, надо это тоже переписать и тогда посмотрю в сторону мп3. Без самой железки не оч удобно конечно, но если оно утекает даже если плеер незадействован, то вероятно где-то еще есть проблема. Ладно, буду иметь ввиду
 
  • Лойс +1
Реакции: andy040670

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
@vortigont,
так, что-то не клеится. Собрал с поддержкой мп3 минималочку на 8266, включил дему (флажёк DFPlayer на заглавной странице "эффекты" выключен).
за 3 часа особо ничего не вытекло. Давайте подробнее какая у вас конфига сборки и настройки что они так сильно течет

1680254613154.png
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
340
109
53
Давайте подробнее какая у вас конфига сборки и настройки что они так сильно течет
O'k
ESP32 (мп3, микрофон физически отсутствуют, демо 30 сек. на эффект) Память изначально: 186416B
user_config.h:
#define RESTORE_STATE 1

#define SHOWSYSCONFIG

#define USE_FTP

#define ESP_USE_BUTTON

#define MIC_EFFECTS

#define MP3PLAYER



#define BTN_PIN        (4)

#define PULL_MODE  (LOW_PULL)

#define MIC_PIN         (36)

#define MP3_TX_PIN (17)

#define MP3_RX_PIN (16)



#define LAMP_PIN                      (2)

#define WIDTH                             (16U)

#define HEIGHT                           (16U)

#define COLOR_ORDER              (GRB)

#define MATRIX_TYPE                (0U)

#define CONNECTION_ANGLE (1U)

#define STRIP_DIRECTION        (1U)

#define SEGMENTS                    (1U)

#define CURRENT_LIMIT           (2000U)
1.png
2.png
ESP8266 (Мп3 подключен и работает, микрофона нет, демо 30 сек. на эффект) Память изначально: 23152B
user_config.h:
#define LAMP_DEBUG
#define RESTORE_STATE 1
#define SHOWSYSCONFIG
#define DISABLE_LED_BUILTIN
#define USE_FTP
#define ESP_USE_BUTTON
#define MIC_EFFECTS
#define MP3PLAYER

#define BTN_PIN    (D2)
#define PULL_MODE  (LOW_PULL)
#define MIC_PIN    (A0)
#define MP3_TX_PIN (D5)
#define MP3_RX_PIN (D6)

#define LAMP_PIN         (D3)
#define WIDTH            (16U)
#define HEIGHT           (16U)
#define COLOR_ORDER      (GRB)
#define MATRIX_TYPE      (0U)
#define CONNECTION_ANGLE (1U)
#define STRIP_DIRECTION  (1U)
#define SEGMENTS         (1U)
#define CURRENT_LIMIT    (2000U)
3.png
4.png
ESP8266 (без плеера, с микрофоном, демо 30 сек. на эффект) Память изначально 25728B
user_config.h:
#define LAMP_DEBUG
#define RESTORE_STATE 1
#define SHOWSYSCONFIG
#define DISABLE_LED_BUILTIN
#define USE_FTP
#define ESP_USE_BUTTON
#define MIC_EFFECTS

#define BTN_PIN    (D2)
#define PULL_MODE  (LOW_PULL)
#define MIC_PIN    (A0)

#define LAMP_PIN         (D4)
#define WIDTH            (16U)
#define HEIGHT           (16U)
#define COLOR_ORDER      (GRB)
#define MATRIX_TYPE      (0U)
#define CONNECTION_ANGLE (1U)
#define STRIP_DIRECTION  (1U)
#define SEGMENTS         (1U)

#define CURRENT_LIMIT    (2000U)
5.png
 
Изменено:

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
@andy040670, так у вас еще включен микрофон и кнопка! Может это не плеер?
У меня 7 часов проработала дема в сборке с плеером, ничего не вытекло. Ща пересоберу с вашими опциями, перезапущу - гляну.
 

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
муть какая-то, две сборки с одинаковым конфигом - 8266 не течет, есп32 течет, куда смотреть пока не понял
 

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
Как я и думал ноги проблемы растут из остатков кода создающего копии класса ворвера для загрузки/сохраниния конфигов и кое каких других операций. Исправлять не буду, перепишу эти остатки целиком и, думаю, проблема уйдет.
 
  • Лойс +1
Реакции: andy040670

vortigont

★★★★★✩✩
24 Апр 2020
910
489
Saint-Petersburg, Russia
Залил еще порцию обновки.
- окончательно избавился от тяжелых копий объектов при манипуляциях с конфигами эффектов. Теперь эта файловая мишура уже похожа на что-то рабочее с чем можно двигаться дальше.
- исправил еще пару глючных эффектов
- добавил команду g_brtpct для http/mqtt для управления яркостью в процентах (по просьбе @Константин 271, нужно для Алисы)
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
340
109
53
Залил еще порцию обновки.
Что то опять пошло не так.
Теперь Демо буксует на одном эффекте, гоняет по кругу.
Файловая система уже 2 раза слетала, то есть всё потёрлось кроме папки /eff с двумя джейсонами внутри и манифеста.