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
@dina, по-моему так оно никогда не работало. Сам по себе пин под транзистор при включении/выключении не меняется. Надо настраивать "события", синтаксис я не знаю.

@andy040670, я отписал автору в тему будет ли он заинтересован в совместной разработке. Детально код я не смотрел, но, думаю, особых проблем нет, там все довольно прямолинейно, в основном хардкод.
 
  • Лойс +1
Реакции: andy040670

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
@vortigont, При вкл. на пине высокий уровень ,при выкл. низкий, или наоборот в зависимости ,что поставишь. Так на всех лампах.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@dina, посмотрел по коду, проверил светодиодом - пин МОПа так и работает, при гашении матрицы выключается транзистор. Еще пин задействован в коде "будильника", но детально что он там делает не смотрел.
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
На пин будильника , какое либо исполнительное устройство вешаеться. Типа автоматизация.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
В общем пин МОПа работает, мультиметром тоже проверил - @dina проверяйте свою коммутацию.
Тиснул в мастер немного измененную распиновку по-умолчанию, таблицу добавил в конфиг для наглядности.
Наверное оформлю следующую версию из текущего мастера и втащу в feat ветку свежих наработок.
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
@vortigont, Я пин G35 выбрал,для транзистора,может не подошел? Завтра проверю.
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@dina, 35 нельзя, это пин только на вход. Берите пины меньше 34.
Поправил работу дисплея TM1637, обновитесь с мастер-ветки.
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
Эффект огонь 2018 ,ерунда какая то и прыгаюшие мячики ,если кольца и 1 мячик ,то половинка мячика прыгает. Я кдн лампу собрал.2.5.0

Пин транзистора работает. Тм1637 работает (только время показывает) при вкл. лампе. Должен время показывать и при выкл. лампе. Не значающий ноль работает. Яркость не регулируеться. И ещё при подаче питания на лампу ,на дисплей выводиться текущий ип адрес подключения. Ищу энкодер ,поставлю.Ещё на дисплей должны будут выводиться команды энкодером. У микрофона вечная калибровка, запустил и ....
 
Изменено:

vortigont

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

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
Огонь 2018 в этом проекте, кдн лампа рядом сравниваю.На гит в Ваш проект зашел,где писать не знаю. Нуб.
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
Энкодер подключил ,работает.Кнопка отрабатывает, крутилка яркости регулирует. На дисплее и на матрице пишет режимы. В регулировки эффектов (скорость,масштаб итд.заходит) ,но когда в эффекте регулируешь энкодером, скорость итд. лампа перезагружаеться. Вообщем только кнопка и глобальная яркость на энкодере работает нормально.Я Вас тогда не буду донимать ,макетка будет собрана лежать (без мп3),если надо подключу. Как команду дадите проверять,буду проверять.
 
  • Лойс +1
Реакции: vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@dina, спасибо за тесты! оч полезно, ибо у меня ресурсов на всё не хватит :)
По энкодеру проблемы можно закинуть в долгие хотелки, Я мельком смотрел этот код пару месяцев назад, там довольно костыльно всё реализовано. Оч много небезопасных операций в прерываниях и пр. Исправлять это желания нет совсем, проще с нуля переписать эту часть как руки дойдут. Под есп32 есть аппаратный квадратурный декодер для энкодеров, можно глянуть в эту сторону, но для начала надо причесать общую архитектуру.
Собственно сейчас этим и занимаюсь - ревизией общих и частных проблем и что и в каком порядке подлежит сделать.
 
  • Лойс +1
Реакции: dina и andy040670

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
@vortigont, Эту лампу надо сделать лучше ,чем была.Тем немение на 8266 кдн лампа ,все крутит стабильно у меня сейчас.Vsc ,очень многих отпугивает ,да и кдн остатки распугал рявканьем.Что ни говори энкодер ,очень удобен.
 
Изменено:
  • Лойс +1
Реакции: Dhorohiy

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
Выпуск v3.1.0 (2023-05-16)
  • исправлены проблемы сборки под обновленный фреймворк есп32 и платформу есп32 v6.1.7
  • введен класс кадрового CRGB буфера абстрагирующий топологию и тип устройства вывода
- буфер допускает привязку/отвязку от FastLED, копирование, атомарный обмен и общие операции над RGB массивом
- методы обращения к буферу и транляции под топологию матрицы из EffectMath упразднены в пользу работы через LedFB
- буфера лампы под слои текста/рисовалки переведены на использование экземпляров LedFB, часть операций копирования заменена атомарной заменой
- убраны флаги зеркалирования из объекта лампы, топология определяеся конфигурацией буфера
- изменения в коде эффектов
- множество эффектов переработанно с использованием структур сущностей и стандартных контейнеров
- оптимизация использования памяти для эффектов
- для части эффектов убраны излишние буфера и промежуточное копирование
- эффекты с переменным числом объектов, вместе с изменением числа сущностей растет/уменьшается их контейнер вместо использования фиксированных массивов
- промежуточные двумерные массивы для эффектов унифицированы в абстрактный шаблон Vector2D
- переработаны эффекты на основе Noise3D Map
- Noise3D Map выделен в отдельный класс с собственным буфером
- унифицирован метод регенерации шума
- переработан класс Boid и зависимые от него эффекты, убраны зависимость от статических макросов WIDTH/HEIGHT, добавлен контейнер для объектов стаи
- все эффекты переведены на работу через фреймбуфер
- убраны зависимости от макросов WIDTH/HEIGHT
- убраны зависимости от статических констант/макросов производных WIDTH/HEIGHT
- убраны все прямые обращения к глобальному экземпляру класса FastLED
- весь код кроме объекта LedFB избавлен от зависимости на статические макросы WIDTH/HEIGHT и их производные
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@dina, энкодер я гляну что там с перезагрузками, если не сильно большие изменения потребуются поправлю.
VSC вообще необязателен для сборки проекта. Если бы не размер образа под ОТА можно было бы большинсво компонентов включать по-умолчанию и настраивать уже из прошивки. Но это так, на перспективу...
 
  • Лойс +1
Реакции: dina

Dhorohiy

★✩✩✩✩✩✩
30 Июл 2020
41
10
@vortigont, Эту лампу надо сделать лучше ,чем была.Тем немение на 8266 кдн лампа ,все крутит стабильно у меня сейчас.Vsc ,очень многих отпугивает ,да и кдн остатки распугал рявканьем.Что ни говори энкодер ,очень удобен.
А можете выложить прошивку и схему подключения с энкодером) Давно искал, и хочу попробовать)
 

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
@Dhorohiy,К этой прикручивай ,надеюсь скоро энкодер и дисплей поправят. И Тм1637 ставь.
 

Вложения

  • Красота! +2
Реакции: Dhorohiy

vortigont

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

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
@vortigont, Кнопка как обычная кнопка работает (со всей азбукой морзе). На вкл. лампе кручение ,рег. яркости. На вкл. лампе длительное удержание ,попадаешь в рег. текущего эффекта ,дальше короткими нажатиями ,переключаешь (скорость итд.) ну и соответственно в каждом режиме крутишь. На дисплее все эти циферки бегают.И на матрице бег. строкой дублируеться. Как то так.
 
  • Лойс +1
Реакции: vortigont

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
@vortigont,
Что то я не вижу в юзерконфиге блок:
C++:
#ifdef MP3PLAYER
  #define MP3_TX_PIN            (D5)                        // TX mp3 player RX (D5)
  #define MP3_RX_PIN            (D6)                        // RX mp3 player TX (D6)
  #define MP3_SERIAL_TIMEOUT    (300U)                      // 300мс по умолчанию, диапазон 200...1000, подбирается экспериментально, не желательно сильно повышать
  #define DFPALYER_START_DELAY  (500U)                      // 500мс по умолчанию, диапазон 10...1000, подбирается экспериментально, не желательно сильно повышать, безусловная задержка до инициализации
#endif
Пины предопределены в config.h? менять их нельзя?
С есп32 понятно, аппаратный uart 2, а с 8266?
В общем добавил блок для 8266, мп3 завёлся)))
 

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@andy040670, да это был выборочный комит из другой ветки, случайно удалился кусок. Для мастера все эти опции пока актуальны. В feat ветку слил другие наработки, там уже не актуально.
feat преехала на мою версию фреймворка и там много чего поменялось. Порты плеера там настраиваются из вебморды и для 8266 и для есп32.
Для 8266 также используется SoftSerial, для есп32 аппаратный порт.
В вебморде кое-что поменялось местами, но не принципиально. В целом какой-то функционал наверняка поломался, пока еще это сыровато, но уже можно щупать. Из кода выкинуты тонны строковых литералов и оберток, при прошивке нужно целиком перезалить файловую систему. Старый системный конфиг с этим фреймворком не совместим. Конфиги эффектов можно сохранить, они не менялись (пока).
 
  • Лойс +1
Реакции: andy040670

vortigont

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

dina

★★✩✩✩✩✩
3 Окт 2021
359
91
49
@vortigont,Мп3 из конфиг.файла пропал. Энкодер вроде ,работает. Тм1637 только в выкл.состоянии время показывает,во вкл.только моргает переодически. И на матрице все в красном ,работает,зеленого и синего нет.Прошивку беру на 1 странице ,стираю флэш тулом ,всегда ставлю начисто.
 
Изменено: