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
Собрал бинарники для есп32 и есп8266, тем кто не может освоить VSC или билдер, но может юзать Flash Download Tools.
спасибо, добавил в шапку. Вообще надо будет в последующем настроить сборку на гитхабе, мож для каких-то значительных выпусков как устаканится немного.
Что то микрофон и мп3 не могут жить друг без друга)))
да я там один дейфан пропустил, поправил уже но еще не залил в реп. Ща еще с парочкой эффектов закончу рефакторинг кода, выложу.
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
@vortigont,Что то пошло не так.
Не правильно формируется список эффектов.
Пробывал все методы, вплоть до сноса вех eff json'ов по ftp, ничего не помогает.
1.png
Такое на обеих платах, есп32 и 8266.
P/s.
Лампы падают:
log:
switcheffect() postfade act=6, fade=1, effnb=24
Move EffWorker to selected eff 24
Wrkr set: 24
_eff_cfg_deserialize() 24
Load file: /eff/1800.json
Wrong version of effect, reset to default (2 vs 1)
Make default config: 24 Прыгающие мячики
Effect: 24, cfg:{"nb":24,"name":"Прыгающие мячики","ver":1,"flags":3,"ctrls":[{"id":2,"type":48},  {"id":3,"max":32,"name":"Масштаб"},  {"id":4,"type":2,"val":1,"name":"Кольца"}]}
Load file: /eff/1800.json
_eff_ctrls_load_from_jdoc(), got arr of 3 controls

ets Jan  8 2013,rst cause:4, boot mode:(3,7)

wdt reset
load 0x4010f000, len 3584, room 16
tail 0
chksum 0xb0
csum 0xb0
v2843a5ac
~ld


setup: free heap  : 39664
UI MAC ID: 5ECF7FF75F59
UI: Config file load OK!
UI READ KEY: 'EmbUIData'string val (1)
UI: Creating system vars
Создание дефолтных параметров
UI: Creating webui vars
UI REGISTER: settings
 
Изменено:

vortigont

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
если дубли опять заметите - дайте знать.
Дубли на 8266 остались, точнее это не дубли, а не верное названия эффектов, так как количество эффектов не увеличилось.
Прошил с полным стиранием флэш, ничего не настраивал кроме время и сети, но нумерация в списке и значок микрофона уже отображается.
1.png2.png
С есп32 теперь другая ситуация. Дублей нет и нумерации тоже нет, даже если я её включаю в настройках эффектов, это касаемо и значка микрофона.
UPD: Нумерация и значки появились после 3,5 часов прогона в режиме Демо (прям чудеса), но чувствую что после перезагрузки всё вернётся на зад (пока не буду, может сама упадёт).
По вылетам, посмотрим.
P/s
Перешил на 8266 фс по воздуху, дубли на время пропали, пока не создался новый конфиг эффектов, я полагаю.
P/sP/s
8266 вылет, время и причину не зафиксировал.
 
Изменено:

vortigont

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Переключатель наличия значка микрофона собираюсь выкинуть нафиг, я не понял зачем он нужен. Есть в прошивке микрофон - есть значек, нет микрофона - нет значка.
Ну если сильно мешает или создаёт проблемы (может вызвать ошибку) или много кода, а так ...
Нумерация тоже не нужна, но тестировать с ней проще и нулевой эффект к ней привязан, так как не имеет названия. Всё относительно.
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Нужна. Если командовать через Алису - номер эффекта как узнать ?
Из топика pub/ mqtt, или в управлении эффектов.
Нумерация тоже не нужна
Я утрирую. :)
P/s
На 8266 после 4 часов прогона в Демо пропала нумерация (изначально выключена) и пропали дубли. :rolleyes:
И через 10 минут ребутнулась, но нумерация и дубли не появилась.
 
Изменено:

vortigont

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

vortigont

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Как она вообще работала, пока в ней русский был?
А сейчас русского нет? :unsure:
Работала, но хреново, память текла, сейчас нет. Остальные баги наследственные. Если вы сутками не крутите демо, то возможно вы и не обращали внимание на утечку памяти.
Со списком проблема старая, если удавалось настроить, убив энное количество времени, то лампа работала исправно и обновляя прошивку по воздуху по мере надобности, плясать с бубном уже не приходилось, сейчас та же ситуация (у меня обе платы уже вошли в рабочий режим) и теперь будут работать как надо, надеюсь.
в самом начале стоит вызов другой функции которая строит этот же индекс из данных по умолчанию и пишет в файл который буквально несколькими строками ниже будет заново перезаписан новыми данными.
Вот вот, сперва грузится правильная конфигурация, а потом перезаписывается не понятно чем, или происходит наоборот.
Нашёл старую плату от лампы (8266), где старая прошивка, обновил только прошивку, фс не трогал, завелась сразу без сюрпризов. Теперь у меня 3 платы на стенде)))
 
Изменено:

shax

✩✩✩✩✩✩✩
6 Мар 2023
4
3
Здравствуйте. Спасибо вам за труд.

Нельзя ли в user_config.h приделать настройку питания микрофонного модуля через ногу контроллера (5V)?
Я кое как приколхозил чтото типа:
#define MIC_VCC (D6) // питание микрофона

а потом в main.cpp
#ifdef MIC_VCC
pinMode(MIC_VCC, OUTPUT);
digitalWrite(MIC_VCC, 1);
#endif

и он ожил, но менять каждый раз при обновлении ветки из гита гемморойно.
да и на костыль похоже.

Может это можно сделать в другом участке кода деликатнее?
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
не надо так делать, на плате есть уже ноги с шинами питания 5 и 3.3 вольта. Возмите питание с них.
Причём других ног с 5в нет и быть не может, так как максимальное напряжение на I/O пинах 3.3в, Есп не толерантна к 5в.
 
  • Лойс +1
Реакции: shax

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
а что за нулевой эффект, вы вкурсе его сокровенного смысла, нет? и почему у него не должно быть названия?
Я не знаю почему у него нет названия, думаю чтоб его скрыть из списка, для тех кто им не пользуется при отключённой нумерации списка, но нужен он для рисования, вывода текстовой информации с УД (я пользовался и далее буду если всё будет работать) и вроде для трансляции, но не точно.
Кстате, принесли мне матрицу 16x16, не работает 1/3 матрицы с верху, то есть светит белым светом. Думаю я знаю в чём дело, поправлю. Так вот, выяснился не приятный факт, что теперь не работает плавное переключение эффектов и при изменении яркости эффект на долю секунды тухнет, а потом принимает заданное значение, в некоторых случаях наоборот вспыхивает. Вот ещё, при переключении эффектов тоже проскакивают вспышки. Матрицу пока отключаю, глаза уже болят)))
 
Изменено:

vortigont

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Про изменение яркости опишите подробнее, не понял, вместо плавного затухания получается мгновенная смена яркости через черноту или вспышку на максимум? Или через паузу? Или меняется плавно но в начале/конце тухнет/вспыхивает?
Матрицу восстановил, отвалился дата-пин светодиода.
А выглядит это как то так.
 
  • Лойс +1
Реакции: vortigont

shax

✩✩✩✩✩✩✩
6 Мар 2023
4
3
Избыточное цитирование. Отредактируй или сообщение будет удалено
Здравствуйте. Спасибо вам за труд.

Нельзя ли в user_config.h приделать настройку питания микрофонного модуля через ногу контроллера (5V)?
Извините, сморозил глупость... это было не питание микрофона, а его отключение в классической схеме от Alexa

schemeFull_2.png

Перепаяю вывод резистора на vcc
 

Вложения

Изменено:

Константин 271

★★★✩✩✩✩
12 Июл 2020
950
105
@vortigont, скажите, что и в каких файлах дописать чтобы через MQTT получить управление громкостью? Пока этот форк (надеюсь, правильно выразился) допиливается, я свой поправил бы сам.