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

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Думаю еще выкинуть нафиг идиотскую схему с раздельной регулировкой яркость для каждого эффекта, что думаете?
Это самое ценное в этой прошивке.
Так как на малой яркости, одни эффекты отображаются нормально, другие вообще не видны. Вот здесь и нужна раздельная регулировка.
Я сколько не думал, так и не смог понять зачем это надо при использовании лампы.
Я использую это так: днём лампа работает в глобальной яркости -127, а вечером в 21:00 У.Д. по средству крона, через cURL отключает глобальный режим, где уже оптимально настроена яркость каждого эффекта на минимум индивидуально, но не теряя качества картинки. Утром в 07:00 включается снова глоб. яркость.
Всё это можно делать и через эвенты, но мне удалённо удобней.
Или через Алису.
 
Изменено:

vortigont

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

andy040670

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


Обновил бинарники - https://community.alexgyver.ru/thre...nie-proshivki-firelamp_embui.7257/post-140904
 
Изменено:
  • Лойс +1
Реакции: vortigont

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@andy040670,
Лан, оставлю как есть пока. Тут вопрос не в фломастерах, вопрос в общих подходах. Понятно что конечному пользователю все равно как оно внутри работает если оно работает, даже если плохонько :) Сейчас уровень бардака в коде достиг каких-то поразительных глубин.
Если что-то новое пытаться добавить в код, то наступаешь в такие дебри что хоть выноси...
Я добавил команду на управление яркостью в процентах и уже пожалел об этом, ибо получилось криво и будет нормально работать только с общей яркостью. Для того что бы работало на яркости для каждого эффекта нужно дублировать этот же код в разных местах. Сейчас "яркость" хранится в 3 (трех!) разных местах в объектах - как свойство самого объекта лампа, как член структуры состояния лампы и как контрол к каждому эффекту. И все это обмазано огромным количеством взаимоисключающих проверок и дублированного кода, который переписывает и перепроверяет значения из одного места в другое. Накручивать сюда регулировку по процентам, это плюс новые обвязки на местах.
И так в целом во всем коде этого проекта. Это КДНовский стиль писать по месту накручивая новые и новые элементы, вкладывая их друг в друга и придумывать исключения из всего что было прежде. Напр в объекте лампы уживаются две разные структуры с одинаковым членом lampState.isMicOn и flags.isMicOn, иногда их значения совпадают, иногда нет и это не считая самого объекта реализующего работу микрофона.
Вчерашняя бага с залипшей демой из той же оперы - в коде, который по идее должен только обновлять вебморду есть кусок который иногда может сам переключать эффекты :)
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
есть кусок который иногда может сам переключать эффекты :)
Такое уже произошло ночью на выключенной лампе, причём переключилась на эффект 254, который не входит в список демо, но лампа осталась выключенной))), но не критично, если не потянет за собой ещё чего ни будь.
Отбой, Это не баг, просто я запустил демо с этого эффекта, а когда выключил лампу, состояние вернулось в исходную точку.
 
Изменено:

vortigont

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

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
Только через пару-тройку дней, сейчас не дома. С собой только есп32 голая.
ну и ладно, тогда условно считаем текущее состояние достаточно стабильным чтобы поставить метку. Оформил выпуск, собрал бинарники и образы ФС. Собрал список изменений в кучку.
Вы вроде где-то писали как заливать бинарники через Flash Download Tool или я ошибаюсь? Если докинете скриншоты, добавлю в шапку.
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Вы вроде где-то писали как заливать бинарники через Flash Download Tool или я ошибаюсь? Если докинете скриншоты, добавлю в шапку.
В архивах с бинарниками есть скрины с настройкой Flash Download Tool в этом сообщении. Там же даны и адреса областей флэш памяти для заливки.
Позже обновлю бинарники актуальными версиями, в отличии от лампы ноут всегда со мной)))
ну и ладно, тогда условно считаем текущее состояние достаточно стабильным чтобы поставить метку. Оформил выпуск, собрал бинарники и образы ФС. Собрал список изменений в кучку.
Не плохо бы ещё опубликовать актуальный список HTTP/MQTT команд, тогда всё было бы по фен Шую.
 
Изменено:

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
К стати, для есп32 (RTOS) мало образа прошивки, надо ещё распределить партиции и загрузить бутлоадер, правда потом можно прошивать/обновлять всего одним файлом firmware.bin, но после стирания или при использовании новой платы всё равно придется шить все 4 файла.
P/s
Можно в репо добавить не достающие файлы из моего архива, они меняться не будут.
 
Изменено:

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
Не плохо бы ещё опубликовать актуальный список HTTP/MQTT команд, тогда всё было бы по фен Шую.
Ну те что я добавил недавно я обновил в списке в шапке и на странице проекта, остальные я не проверял ввиду отсутсвия всей объвязки.

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

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
остальные я не проверял ввиду отсутсвия всей объвязки
Команды 90% устаревшие, менялись не однократно, но новый список не был обновлён на гите, а только на форуме (даже не в шапке, а в нескольких сообщениях) которого уже нет.
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Ну вот, добрался я до лампы.
@andy040670, можете поглядеть как оно на матрице выглядит, ничего не сломалось в выводе? А то я вслепую тыкаю. Поменял алгоритм отрисовки линий, гляньте, пожалуйста на эффекты "Пикассо", "звезды", "ёлки", их не сильно покорежило?
Звёзды покорёжило прилично, выглядит как мешанина, причём стартует на первых кадрах нормально, потом хаус.
Пикассо и ёлки вроде нормально отображаются.
Будем дальше посмотреть.)
 

vortigont

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

andy040670

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

vortigont

★★★★★★✩
24 Апр 2020
1,022
541
Saint-Petersburg, Russia
@andy040670,
ну если другие эффекты с линиями не сломались, значит по-идее дело не в алгоритме рисования линий.
Без матрицы я не понимаю как это выглядит, там обсчет идет в флоат и инкремент сначала настолько маленький, что все линии по сути сливаются в точку. Потом обратная ситуация - отрисовка идет за пределы размерности матрицы. Ну и в добавок несколько однотипных переменных спидфактор, как мы любим )
Короче я оставил одну звезду и замедлил отрисовку до 1 кадра в секунду, посмотрите как это выглядит с разным положением регулятора "скорость".
Рисовать он может начать не сразу, там еще и счетчик перезапуска не привязаный к реальному времени o_O
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
Звезда когда вырастает, рассыпается на фрагменты, а должна уходить за пределы поля.

Эффект "Ёлки-палки" 6 фрагмент, если присмотреться, то вверху справа и внизу справа видны горизонтально плавающие артефакты (на мастере их нет)

А тут подёргивание с артефактами при переключении с эффекта на эффект и при изменении яркости, на мастере тоже есть. (использовал эффект "Белая лампа" с смещённым фокусом для наглядности) Переключал с нулевого на белую лампу и обратно.
 

vortigont

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

vortigont

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

@andy040670, исправил, поглядите, пож. Это пока времянки, большая часть этих оберток уедет в свои методы работы с буфером
 

andy040670

★★★✩✩✩✩
13 Ноя 2019
353
109
54
@andy040670, исправил, поглядите, пож. Это пока времянки, большая часть этих оберток уедет в свои методы работы с буфером
Описанные выше артефакты пропали, а вот со звёздами вы опять забыли вернуть всё назад, сейчас одна звезда, 1 кадр в секунду, но не рассыпается)))