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

Комментарии

sergz1

✩✩✩✩✩✩✩
5 Дек 2021
18
0
@@andy040670) - Soundpack. Не подскажите, чем распаковать архив звуков. Пытался и 7-zip и RARом - пишет не поддерживаемы метод сжатия ((.
 

vortigont

★★★★★★✩
24 Апр 2020
985
521
Saint-Petersburg, Russia
Вот здесь не совсем понятно...
В логах проскакивают сообщения вида
Wrong version of effect, reset to default (4 vs 6), но либо неверно сбрасывается конфиг либо еще что-то, пока не смотрел.


Аптайм почти 10 часов (15 циклов демо), но памяти почти не осталось, пока работает. Отличный результат.
, но утечка памяти имеет место (не значительная).
я смотрел на минимальной сборке, без плеера/микрофона и пр., в прочие компоненты особо не заглядывал. Я так прикинул - утекает примерно 1к памяти в час на 8266. Течет это в каких-то эффектах или в прочем коде лампы или в коде какой-то сторонней либы я пока не нашел.
Пару раз вроде вылетала на моменте сохранения файла основного конфига, но это не точно. По крайней мере случайно вылетать при смене эффектов перестала - уже прогресс.

Вы на правильном пути! Я даже сегодня заказал матрицу, ради такого дела.)). Командировки пока в плане, посижу пока немного на форуме и...)) помогу чем смогу.
Добро ) На выходных ковыряться лень было, на недельке еще погляжу.

А есть ли у этой лампы управление другими? Группой т.е., по аналогии с FieryLamp
вроде нет такого, но, думаю, это можно сделать через автоматизацию на мкутт.
В принципе можно прикрутить синхронизацию через udp мультикаст группу, но с текущим бардаком в схеме работы управления эффектами возни слишком много. Тут по-хорошему надо декомпозицию с нуля делать, прежде чем новые плюхи накручивать.
 

vortigont

★★★★★★✩
24 Апр 2020
985
521
Saint-Petersburg, Russia
Нашел еще пару эффектов где утекала память, поправил. ,Покрутил демо часов 10, вроде память больше не уходит сколько-нибудь заметно.
 
  • Лойс +1
Реакции: andy040670

Константин 271

★★★✩✩✩✩
12 Июл 2020
948
103
@vortigont, на вашу прошивку можно обновляться по воздуху?
Настройки/Обновление/Обзор...

- через это? Сгенерив файл прошивки. Имея другую на борту, но тоже 2.7.0
И какие команды в терминале для прошивки 8266, 32, для заливки FS в 8266 и в 32?
 

vortigont

★★★★★★✩
24 Апр 2020
985
521
Saint-Petersburg, Russia
@vortigont, на вашу прошивку можно обновляться по воздуху?
- через это? Сгенерив файл прошивки. Имея другую на борту, но тоже 2.7.0
И какие команды в терминале для прошивки 8266, 32, для заливки FS в 8266 и в 32?
да, можно. Выбираете файл прошивки и загружаете через форму.

И какие команды в терминале для прошивки 8266, 32, для заливки FS в 8266 и в 32?
Команды для прошивки/заливки указаны в описании проекта.
Я добавил в проект скрипт к платформио через который можно заливать прошивку прямо в лампу после сборки (как настроить)
 

Константин 271

★★★✩✩✩✩
12 Июл 2020
948
103
@vortigont, спасибо, попробую вашу версию. Просто качаю, распаковываю и добавляю папку в VSCode? Компиляция, прошивка этой версии не влияет на другие папки с уже имеющейся такой же прошивкой, но от Andy?

В настройках будильника можно выбрать мелодию из пяти шт. Но в Настройках/DFPlayer - http://192.168.0.200/?settings_mp3 - тоже есть пункт Звук будильника - что с кем спорит, что главнее, и на что влияет?
 

vortigont

★★★★★★✩
24 Апр 2020
985
521
Saint-Petersburg, Russia
@Константин 271,
если в другой каталог распакуете, то не повлияет.
Про будильник не подскажу ничего :( плеера у меня нет, никогда не видел как он работает. Если найдете проблему - будем думать. По коду я пока в будильник не смотрел.
 

Константин 271

★★★✩✩✩✩
12 Июл 2020
948
103
@vortigont, я именно про логику работы спрашивал, думал, вы в курсе) Просто 2 настройки, получается, спорящих друг с другом, либо их назвали не так, как там реально запрограммировано. Либо эта настройка вообще игнорится.
 

vortigont

★★★★★★✩
24 Апр 2020
985
521
Saint-Petersburg, Russia
@Константин 271,
без подключенного плеера меню его настроек вообще не отображается, я в коде нашел где оно строится, но я не знаю как оно выглядит.
Настройки будильника я тоже нигде не нашел.

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
341
108
54
P.S. настройки плеера я открыл, а где будильник все равно не вижу
В эвентах, -> Добавить.
1.png
И в настройках мп3 плеера.
3.png
Наверно @Константин 271 имел это ввиду.
@Константин 271 Это одна настройка, и где она была настроена, не имеет значение, приоритетов здесь нет никаких, Меняете в одном интерфейсе, она меняется и в другом.
 
Изменено:
  • Лойс +1
Реакции: Константин 271

Константин 271

★★★✩✩✩✩
12 Июл 2020
948
103
@andy040670, Да, имел ввиду это. Но где логика? В dfplayer мы настраиваем нечто общее. А в событиях - 5 разных будильников можем сделать, указав каждому свою мелодию из пяти.

Попутно - что значит Вариант 1 для времени?
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
341
108
54
Да, имел ввиду это. Но где логика? В dfplayer мы настраиваем нечто общее
Ну да, здесь это избыточно.
Попутно - что значит Вариант 1 для времени?
Вариант обработки. У меня, на (не помню каком чипе) DFPlayer'e работают оба варианта, у некоторых с первым вариантом возникают проблемы (не помню какие). ))
Нашел еще пару эффектов где утекала память, поправил. ,Покрутил демо часов 10, вроде память больше не уходит сколько-нибудь заметно.
20 циклов Демо, память не утекает, начинает проседать на 71, 72, 73 эффектах до 17521b далее восстанавливается.
Мне кажется что с памятью вопрос снят. (y)
Ещё заметил опечатку в config.h строки 164, 165 и в user_config.h.default строка 162, в место DFPLAYER там DFPALYER.
Не знаю на сколько это критично.
 
Изменено:
  • Лойс +1
Реакции: Константин 271

vortigont

★★★★★★✩
24 Апр 2020
985
521
Saint-Petersburg, Russia
Мне кажется что с памятью вопрос снят. (y)
да, вроде уже больше суток крутится, не упала, не вытекла

Ещё заметил опечатку в config.h строки 164, 165 и в user_config.h.default строка 162, в место DFPLAYER там DFPALYER.
В коде дальше тоже опечатка, так что не критично :)))) поправлю, спасибо
 
  • Лойс +1
Реакции: Al12313 и andy040670

andy040670

★★★✩✩✩✩
13 Ноя 2019
341
108
54
Обновлено 04.04.2023
Собрал бинарники для есп32 и есп8266, тем кто не может освоить VSC или билдер, но может юзать Flash Download Tools.
C++:
            Прошивка esp8266 при помощи Flash Download Tools
------ Адреса областей флэш памяти, куда следует заливать файлы ------
firmware.bin   - 0x00000000
littlefs.bin   - 0x00200000

------ 160МГц ------

Config:
------ Всё что включено ------
#define LANG_FILE     "text_res-RUS.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

------ Пины кнопки, микрофона и DFPlayer------
#define BTN_PIN    (D2)
#define PULL_MODE  (LOW_PULL)
#define MIC_PIN    (A0)
#define MP3_TX_PIN (D5)
#define MP3_RX_PIN (D6)

------ Настройки LED Матрицы -------
#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)
C++:
            Прошивка esp32 при помощи Flash Download Tools
------ Адреса областей флэш памяти, куда следует заливать файлы ------
partitions.bin - 0x00008000
bootloader.bin - 0x00001000
firmware.bin   - 0x00010000
littlefs.bin   - 0x00310000

Config:
------ Всё что включено ------
#define LANG_FILE     "text_res-RUS.h"
#define LAMP_DEBUG
#define RESTORE_STATE 1
#define SHOWSYSCONFIG
#define USE_FTP
#define ESP_USE_BUTTON
#define MIC_EFFECTS
#define MP3PLAYER

------ Пины кнопки, микрофона и DFPlayer------
#define BTN_PIN    (4)
#define PULL_MODE  (LOW_PULL)
#define MIC_PIN    (36)
#define MP3_TX_PIN            (17)
#define MP3_RX_PIN            (16)

------ Настройки LED Матрицы -------
#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)
Если надо больше плюшек, то надо научится пользоваться VSC+pio или билдером и конфигурировать прошивку самостоятельно под свои нужды.
 

Вложения

Изменено:

Константин 271

★★★✩✩✩✩
12 Июл 2020
948
103
роде уже больше суток крутится, не упала, не вытекла
странно, что я не замечал ни разу утечки памяти, но вот падения лампы, т.е. ребуты - часто видел, при попытке переключить эффект со смартфона. При этом, переключения через Алису к такому ни разу не приводили.
Попробую как-нибудь ваш проект.
 

Divin

★★★✩✩✩✩
30 Янв 2021
418
188
@andy040670, А это особенность архиватора, что в корневой каталог soundpack2, он дублирует ту же папку или же просто для солидности и веса? ;)
изображение_2023-03-03_151754543.png
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
341
108
54
@vortigont, Что то какая то фигня творится.
Собираю прошивку с одной кнопкой, сбирается нормально.
Собираю с кнопкой и с мп3 плеером:
C++:
src\lamp.cpp:345:32: error: no 'void LAMP::setMicOnOff(bool)' member function declared in class 'LAMP'
void LAMP::setMicOnOff(bool val) {
                                ^
*** [.pio\build\esp8266@160\src\lamp.cpp.o] Error 1
Собираю с кнопкой и с микрофоном:
C++:
Linking .pio\build\esp8266@160\firmware.elf
c:/users/andy0/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\esp8266@160\src\interface.cpp.o:(.text._Z11set_micflagP9InterfacePN18ArduinoJson6201_F110JsonObjectE+0x0): undefined reference to `LAMP::setMicOnOff(bool)'
c:/users/andy0/.platformio/packages/toolchain-xtensa/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld.exe: .pio\build\esp8266@160\src\interface.cpp.o: in function `set_micflag(Interface*, ArduinoJson6201_F1::JsonObject*)':
interface.cpp:(.text._Z11set_micflagP9InterfacePN18ArduinoJson6201_F110JsonObjectE+0x30): undefined reference to `LAMP::setMicOnOff(bool)'
collect2.exe: error: ld returned 1 exit status
*** [.pio\build\esp8266@160\firmware.elf] Error 1
Собираю с кнопкой, микрофоном и мп3, всё опять нормально собирается.
Что то микрофон и мп3 не могут жить друг без друга)))
А это особенность архиватора, что в корневой каталог soundpack2, он дублирует ту же папку или же просто для солидности и веса? ;)
Не поленился, скачал.
0.png2.png8.png
Где дубль, в упор не вижу.
 
Изменено:

Константин 271

★★★✩✩✩✩
12 Июл 2020
948
103
Кстати, микрофон можно питать от 5 В, как и матрицу? Не обязательно 3.3 - это просто высший фэншуй?
 

Константин 271

★★★✩✩✩✩
12 Июл 2020
948
103
@andy040670, понимаю) припаял на 3.3

А у вас время говорит при 5-ном тапе? У меня только показывает бегущей строкой и только на включенной лампе. Так должно быть? А если завести Событие - говорит время хоть каждую минуту, на любой лампе. Даже если из розетки вынуть 😄