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
@andy040670, на выходных отдыхал так что особо ничего инетресного нет пока )
перевернул матрицу с шумом, посмотрите на "огонь" должен стать похож на нормальный. Так же могли измениться поведение эффектов "кометы", но я не смотрел. Переписал еще "Фейрверки" чисто интуитивно, что вышло - не знаю.
Надо, наверное, бросать колупать эти эффекты пока стенд не соберу.
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
посмотрите на "огонь" должен стать похож на нормальный.
Теперь огонь вращается (движется справа на лево) как будто ветром сдувает.
Так же могли измениться поведение эффектов "кометы", но я не смотрел.
С кометами ничего ни произошло, парящие огни как не работали, так и не работают.
Переписал еще "Фейрверки" чисто интуитивно, что вышло - не знаю.
Вроде работает нормально, опять же без сравнения, более точно сказать не могу.
 
  • Лойс +1
Реакции: vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
Теперь огонь вращается (движется справа на лево) как будто ветром сдувает.
норм, значит еще один вектор развернуть надо.
@andy040670, так, я перекрутил в эмуляторе все комбинации, у меня получается огонь сейчас верно ориентирован если считать что матрица расположена как обычные координатные оси - 0,0 в нижнем левом углу, 16,16 в правом верхнем. У вас матрица точно верно настроена, в смысле как реально она есть, а не как эффекты выглядят "правильно"?
 
Изменено:

vortigont

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

1682427413896.png
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Поправил эффект "Светлячки" и его наследников - "матрицу" и "звездопад", поглядите.
9. Светлячки со шлейфом: - изменений не заметил.
7. New Матрица: - изменений не заметил.
6. Метель, Звездопад, Метеоры: - Сейчас это один эффект (похож на матрицу), а переключение эффектов внутри эффекта, приводит только к смене палитры. Переключение варианта, переводит движение с вертикального в горизонтальное и под небольшим углом, при этом примерно 2/3 матрицы с низу не используется.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
ну если не заметили, значит норм :) как-то так и должно было быть. Ну т.е. матрица как и положенно падает вниз? А огонь при этом у вас так и горит в бок?

про 6, навероное оно тоже так и должно быть. Судя по коду да, там просто меняется палитра.
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
про 6, навероное оно тоже так и должно быть. Судя по коду да, там просто меняется палитра.
В оригинале вариант 1: движение сверху под углом 45гр. слева на право, шлейф длинный с размытием.
Вариант 2: Движение сверху, меняя направления, меняя угол, шлейф длинный с размытием.
матрица как и положенно падает вниз?
Вниз, но меньше используется верхняя 1/3 матрицы, опять же в сравнении с оригиналом.
А огонь при этом у вас так и горит в бок?
Да, сдувает его справа на лево, если рядом поставить вентилятор, то будет смотреться довольно реалистично )))
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@andy040670,
звездопад поправил, теперь в косую падает, вроде так должно быть.

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

С огнем, я не понимаю почему у вас он в бок дует :) Запустите 68й эффект и посмотрите как матрица ориентирована. Зеленые огни должны быть справа, красные слева и уголки внизу (как на картинке выше). Если не совпадает, будем думать где трансляция неверная.

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

andy040670

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
мож так и оставить?
Куцый он какой-то, да и без вентилятора рядом не смотрится.)))
поправил "пазлы" и "лабиринт"
Пазлы, они же пятнашки как буксовали на одном месте, так и буксуют.
С лабиринтом вроде всё в порядке.
 

vortigont

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

Пазлы, они же пятнашки как буксовали на одном месте, так и буксуют.
А у меня ползают вроде в случайном порядке. А как буксует, одна строка все время двигается?

1682702343828.png
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
поправил, там один параметр, можете сами покрутить по вкусу.
Сейчас лучше, даже временами останавливается, горит строго вертикально, а когда сдвигается то не так быстро.
Можно так оставить.
поправил, там один параметр, можете сами покрутить по вкусу.
Я поставил 3, так ещё лучьше.
C++:
i.e_y = 3 * millis() * _speed;
А у меня ползают вроде в случайном порядке. А как буксует, одна строка все время двигается?
У меня тоже вроде пошли, а так да, одна строка елозила туда-сюда.
p/s
А нет, опять буксует)))
Сделал софт резет, опять пошли. Чудеса!
 
Изменено:

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
есть 2 новости - хорошая и плохая, начну с маленькой, но хорошей )
подрихтовал еще парочку эффектов "Куб2д" и "аквариум"

теперь плохая ) - в недавно обновленном фреймворке под esp32 поломали совместимость с макросами для флеш-строк под 8266, версия под есп32 сейчас не собирается. В целом это решаемо, но тут вопрос на перспективку - долго ли еще мучаться с этой дохлой лошадью 8266? Или отправить ее наконец на пенсию и забить на обратную совместимость.
 
  • Лойс +1
Реакции: Дрон

shax

✩✩✩✩✩✩✩
6 Мар 2023
4
3
@vortigont,
Лошадей таких много на руках. Они даже неплохо работают. Жаль будет.
Но если трудоёмко.. то смиренно согласимся :)
 
  • Лойс +1
Реакции: Дрон

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Лошадей таких много на руках. Они даже неплохо работают.
Для лампы больше и не надо, тем более в есп32 RTOS отъедает значительную часть флеша, прошивка еле впихивается, от полноценного ота уже пришлось отказаться.
Нее, конечно можно и raspberry pi как лампу использовать...)))
Мигать диодами, это прямое назначение есп 8266.
подрихтовал еще парочку эффектов "Куб2д" и "аквариум"
Аквариум это что? Эффект 8. Акварель?
 
Изменено:

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
в лампе под 8266 сейчас используется сильно предыдущая версия ардуино ядра 2.6.3 и какая-то фиксированная версия либы фастлед. Т.е. оно уже само по себе всё устарело, либы обновляют под акутальные версии фреймфорка и несовместимости будут только нарастать. Почему до сих пор так и починили ли проблемы в актуальных версиях фастлед/ядра - я не знаю ибо проверить негде. Скоро должны придти матрицы и обвязка, соберу стенд, тогда хоть будет что-то видно живьём. Но в любом случае эта лошадь тащит за собой кучу проблем, с есп32 они уже слишком разошлись. Нужно бросать либо одно, либо другое, либо нацеливаться на тройную работу - писать компоненты под 2 платформы отдельно и еще какую-то абстрактную обвязку, которая реализует общие методы. Ну либо продолжать плодить огород #ifdef как сделанно сейчас, что далеко не всегда спасает.
РТОС, кстати, может дать очень много возможностей - планировщик, события. Там есть готовая шина сообщений для межпроцессного взаимодействия. Если посадить на нее компоненты, то можно выкинуть кучу кривого кода с флагами, ссылками экземпляров классов друг на друга и прочий набор откровенных костылей. Это архитектурно совсем другой подход и тут либо отказываться от более продвинутых вещей в пользу лошади, либо таки пристрелить :)
В любом случае это не на 1 день делов, но мысли бродят.

Аквариум это что? Эффект 8. Акварель?
EffectAquarium, черт его знает, акварель он или нет :))))
 
  • Лойс +1
Реакции: shax

shax

✩✩✩✩✩✩✩
6 Мар 2023
4
3
Добавлю ещё такой немаловажный момент, как интерес разработчика к своему детищу. Это сильный стимул, который может сыграть как в одну так и в другую сторону. Увеличивать нелюбовь рискованно.
Зафиксировать бы только 8266 на каком-то стабильно рабочем варианте и уж потом покрыть забвением.
 
  • Лойс +1
Реакции: sts и vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
Поправил сборку под есп32. Пока каких-то несовместимых изменений нет, там еще код эффектов перебрать надо. Дел хватит.
 
  • Лойс +1
Реакции: andy040670

vortigont

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
поглядите, если явных проблем не найдете - солью накопленные изменения в мастер ветку.
Не собирается.
C++:
src\effects.cpp:7784:31: error: 'TOP' was not declared in this scope
       peak[band] = min((float)TOP, barHeight);
                               ^
src\effects.cpp: In member function 'void EffectVU::horizontalColoredBars(uint8_t, float, uint8_t, uint8_t)':
src\effects.cpp:7860:20: error: 'TOP' was not declared in this scope
     for (float y = TOP; y >= (float)TOP - barHeight; y-= 0.5) {
                    ^
src\effects.cpp: In member function 'void EffectVU::paletteBars(uint8_t, float, CRGBPalette16&, uint8_t)':
src\effects.cpp:7886:20: error: 'TOP' was not declared in this scope
     for (float y = TOP; y >= (float)TOP - barHeight; y-= 0.5) {
                    ^
src\effects.cpp: In member function 'void EffectVU::verticalColoredBars(uint8_t, float, uint8_t, uint8_t)':
src\effects.cpp:7896:20: error: 'TOP' was not declared in this scope
     for (float y = TOP; y >= (float)TOP - barHeight; y-= 0.5) {
                    ^
src\effects.cpp: In member function 'void EffectVU::whitePeak(uint8_t)':
src\effects.cpp:7934:29: error: 'TOP' was not declared in this scope
   float peakHeight = (float)TOP - peak[band] - 1;
                             ^
src\effects.cpp: In member function 'void EffectVU::outrunPeak(uint8_t, CRGBPalette16&, uint8_t)':
src\effects.cpp:7943:29: error: 'TOP' was not declared in this scope
   float peakHeight = (float)TOP - peak[band] - 1;
                             ^
src\effects.cpp: In member function 'void EffectWcolor::Blot::reset(int, int)':
src\effects.cpp:8571:30: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (int i{0}; i!=x.size(); ++i) {
                              ^
Compiling .pio\build\esp8266@160\src\filehelpers.cpp.o
*** [.pio\build\esp8266@160\src\effects.cpp.o] Error 1
*** [.pio\build\esp8266@160\src\effectworker.cpp.o] Error 1
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
Эффект Цветение ,пустой экран. И Лавовая Лампа не то ,как то.
 
Изменено:

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@andy040670, опс... сборку с микрофоном не проверил. Поправил...

@dina, это в мастер-ветке, да. ТАм нет кода на этот эффект. Добавил в тестовую ветку, появится когда солью с основной.

P.S. благодаря добрым людям, обзавелся таки матрицей, теперь могу посмотреть глазами на то как оно работает вообще :)
 
  • Лойс +1
Реакции: Al12313 и andy040670

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Беглый тест выявил:
4. Конфети: Эффект стартует, но яркость падает в ноль, то есть ничего не светится.
13. Неопалимая купина: эффект стоит на месте, нет движения.
28. Кометы...: поломан напрочь, трудно описать.
29. Бульбулятор: Работает, но странно, все круги появляются и исчезают одновременно, вроде так не должно быть.
39. Бенгальские огни: работает в одну строку под 45 градусов, с нижнего левого угла в правый верхний.
40. Шары: не работает совсем, валит лампу.
51. Звёзды: есть артефакты
59. Узоры: только вертикальные полосы.
62. Притяжение: проблема с палитрами.
63. Змейки: не работает, валит лампу.
65. Лабиринт: статичные артефакты от предыдущего эффекта, больше ничего.
74. Дым: Просто горит и меняет градиент с лева на право и обратно, то есть не работает.
Плюс на многих эффектах остаются артефакты от предыдущих эффектов.
При смене или изменения яркости проскакивают вспышки артефактов, но об этом я уже сообщал.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
О, пасиб за отзыв. Я тоже смотрю понемногу. Но у меня как-то отличается. У вас на 8266 лампа?
Какие фичи включены в сборку?

4. Конфети: Эффект стартует, но яркость падает в ноль, то есть ничего не светится.
да, тут какая-то проблема с угасанием

13. Неопалимая купина: эффект стоит на месте, нет движения.
у меня работает, похож на огонь из середины матрицы

28. Кометы...: поломан напрочь, трудно описать.
да вроде тоже все работают, бегают огоньки. Как оно было - не знаю, попробую сравнить с версией из мастера.

29. Бульбулятор: Работает, но странно, все круги появляются и исчезают одновременно, вроде так не должно быть.
хм... а вроде я смотрел было норм, значит сломал что-то совсем недавно, перепроверю

59. Узоры: только вертикальные полосы.
у меня какие-то текстурки бегают если скорость отличную от 0 выставить

62. Притяжение: проблема с палитрами.
в смысле что на некоторых значениях ничего не выводится? так вроде цвета меняются.

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

Плюс на многих эффектах остаются артефакты от предыдущих эффектов.
артефактов вроде не замечал в режиме "демо", но посмотрю еще

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

у меня есть одна плата на 8266, но у нее не распаяны ножки, прикрячить к ней матрицу будет не так просто, но попробую если время будет, сравнить с есп32 на предмет артефактов.

По остальным что вы написали, похожие проблемы наблюдаю. ОК, будем править!