ESP, IoT WiFi лампа-будильник. Прошивка FireLamp_JeeUI (GPL)

WiFi лампа-будильник. Прошивка FireLamp_JeeUI (GPL)
Инструкция по установке прошивки (ее можно скачать отсюда , это последняя стабильная версия), но самая актуальная версия, которая разрабатывается в данный момент, находится тут: develop-ветка

Существует
Консольный билдер для прошивки (Win8.1 - 10) , если нет желания ставить VS Code+PIO, можете использовать данный вариант.


Еще варианты подключений можно поглядеть тут.

-----------------------------------------------------------------------

Также можно прошить заранее подготовленную прошивку и ФС отсюда, здесь самая новая версия от 25.02.2021
Проект: скачать отсюда, фреймворк JeeUI2 переработан и взят отсюда , но за время разработки фреймворк был существенно переработан, поменял название и фактически лампа уже работает на фреймворке EmbUI, который позволяет строить WebUI интерфейсы для любых проектов, считайте его готовым движком создания интерфейсов под ESP8266/ESP32, может использоваться кем угодно под свои задачи, полностью открыт и разработка продолжается. На уровне фреймворка есть:
1. Асинхронный вебсервер, с поддержкой до 5 одновременных клиентов и синхронизацией между ними.
2. Поддержка http-get запросов
3. Поддержка mqtt
4. SSDP, mDNS, полностью автоматический WiFi c восстановлением после сбоев
5. Предустановленный и преднастроенный базовый интерфейс
6. Фреймворк достаточно экономно расходует память и можно отключить некоторые потребляющие память части, типа SSDP
7. Поддержка локализации
8. Инструкция и примеры использования
В общем будут вопросы по фреймворку и его использованию - задавайте в теме. Лампа не единственный проект который может использовать фреймворк, на данный момент на нем же у меня в тестовом варианте собрана веб-камера для esp32, но пока еще не довел до ума и не выделил в отдельный проект.

Далее более подробно по установке:

Учтите, что PIO и VS Code развиваются и инструкция может быть немного не актуальна и не соответствовать текущим версиям ПО. При возникновении вопросов/проблем - задавайте их в теме.

1. Устанавливаем Visual Studio Code в зависимости от вашей операционной системы 32 или 64 битную версию.
2. Устанавливаем Git он тоже понадобится, так как Visual Studio Code на пару с PlatformIO будут ругаться что его им очень не хватает.
3. Перезагружаем компьютер.
4. Установить PlatformIO для этого запустить Visual Studio Code и в меню View выбрать пункт Extensions - либо воспользоваться сочетанием клавиш (Ctrl+Shift+X)
5. Выбрать PlatformIO IDE и нажать Install
6. Перезапустить Visual Studio Code у вас сразу откроется вкладка PIO Home, работаем в ней.
7. В вкладке Открыть проект - Open Project - заходим в папку с проектом и нажимаем Open "FireLamp_JeeUI-master"



8. Слева открываем Platformio.ini и делаем необходимые настройки, раскомментировать нужный board, это плата на которой вы собираете лампу, и закомментируйте ненужную.
9. Тут же нужно добавить настройки Com порта на котором у вас ваша плата, это делается командой upload_port = COM8 (где COM8 номер вашего порта COM2, COM3 и т.д.)
10. Останется настроить саму прошивку под себя это делается в include - config.h там все подробно откомментировано.
11. Первоначально вам необходимо будет записать файлы в ФС контроллера, иначе веб-интерфейс не будет доступен! Делается это так меню Terminal - Run Task.. (Ctrl+Alt+T) - PlatformIO - PlatformIO: Upload File System Image, если вы не забыли указать нужный Com порт и подключили плату все должно быть успешно.
Так вот там по умолчанию нет этого пункта.
Нужно нажать Кнопку PlatformIO, потом выбрать конфигурацию, которую собираешь и только потом Upload Filesystem Image. И только после такого она появляется в Run Task. Правильный скриншот прилагаю.

1600444586890.png
12. Можно собирать и заливать прошивку в лампу. Делается это нажатием на PlatformIO Upload.



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

Способы обновления прошивки:

OTA
- обновляется сама прошивка и есть возможность обновить File System Image как это описано выше, можно работать с лампой так как и по физическому подключению к COM порту без разбора и подключения проводом.

Для обновления прошивки по OTA нужно сделать изменения в файле PlatformIO.ini
1. Закомментировать по аналогии с другими строками и соблюдением пробелов, ваш COM порт.

2. Раскомментировать следующие строки, обратите внимание пробелы очень важны, если не соблюсти их будет выдаваться ошибка при запуске прошивки и она так и не начнется.

В строке с IP адресом, указать ваш адрес лампы.

C++:
upload_protocol = espota
upload_port = 192.168.1.36
upload_flags =
    --auth=12345
    -p 3232


Перед началом обновления, не забудьте перевести лампу в режим обновления PIO-ОТА, для http обновления (читать ниже) это делать не обязательно. Также убедитесь, что обновление прошивки через PIO разрешено дефайном в user_config.h

* внимание, для питона важны отступы (пробелы), так что внимательно выравнивайте на одном уровне

HTTP - обновление через web интерфейс, можно обновить как прошивку, так и ФС:
IP адрес лампы\update указываем файл firmware.bin или то же самое через WebUI
Нужно будет выбрать файл и нажать Upload, на кнопке Обновление появятся проценты прогресса.

1606756811806.png
Здесь на картинке под 1 показан вариант ОТА через PIO, под 2 - вариант через http для WebUI.

Для формирования файла firmware.bin нужно в PlatformIO запустить сборку прошивки без заливки. Для формирования ФС - соответственно соберите ФС и загрузите файл ФС пользуясь теми же кнопками, как при заливке прошивки.
1588144337363.png



После непродолжительной сборки прошивки, терминал выдаст ответ:
= [SUCCESS] =
файл будет находится в папке со скачанной прошивкой .pio\build\esp8266dev\
Я прошиваю после стирания:
Быстрый старт.

Что потребуется:
Visual Studio Code - скачиваем и устанавливаем, желательно перелогиниться или перезагрузиться, чтобы точно применились настройки путей.
Под VS Code устанавливается PlatformIO, дальше вся работа там. Если кому приятнее работать в ArduinoIDE - адаптируйте самостоятельно, у меня терпения не хватает ждать пока там все соберется, так что мне проще в PlatformIO все делать.

Проект: скачать отсюда, фреймворк JeeUI2 переработан и взят отсюда , но он уже включен в проект, так что дополнительно качать не нужно.

В общем у вас после открытия проекта должно выглядеть как-то так:
1583172758919.png

Контроллер ESP8266/ESP32 выбирается в файле platformio.ini.
ВНИМАНИЕ: Первоначально вам необходимо будет записать файлы в ФС контроллера, иначе веб-интерфейс не будет доступен!
Делается это так: PlatformIO->Run Task...->Upload File System Image
1583173209762.png
После этого можно собирать проект и записывать его в контроллер. Сами файлы для загрузки в ФС находятся в \FireLamp_JeeUI\data там же у меня находятся и файлы конфигурации config.json и eff_config.json . Вы также можете поместить свои предварительно созданные конфигурации, если это необходимо. Также к файловой системе можно получить доступ, если при компиляции проекта была раскомментирована настройка:
//#define USE_FTP // доступ к SPIFFS по FTP, логин/пароль: esp8266
После чего вы можете подключиться фтп-клиентом и скачать/записать то, что вам нужно.

---------------------
Я бы ещё в инструкции дописал, как собирать проект и записывать его в контроллер, сам искал долго эти кнопки.
Кнопки по сборке проекта, включению вывода сообщений отладчика, очистке проекта от объектных файлов, остановке задач и т.д. находятся внизу, слева:
1583602065364.png

Создание конфигурации:
Файл user_config.h.default переименовываете в user_config.h и редактируете.
Обратите внимание, то что для кнопки и плеера существует также возможность менять пины после перепрошивки, сделано это для тех, кто хочет залить бинарник, а затем настроить эти пины под себя:
1607700948873.png
Порядок создания пользовательской конфигурации описан здесь: user_config.h , пример такого файла можно посмотреть тут .
По кнопке:
* Из выключенного состояния
- 1 касание - включить на последнем эффекте
- 2 касания - включить в режиме ДЕМО
- долгое удержание - включить в режиме "белая лампа" на минимальную яркость (ночник)
- касание, удержание - включить в режиме "белая лампа" на максимальную яркость
* Во включенном состоянии
- 1 касание - выключить лампу
- 2 касания - следующий эффект
- 3 касания - предыдущий эффект
- 4 касания + 4 касания - запуск сервиса ОТА
- 5 касаний - вывод IP на лампу
- 6 касаний - вывод текущего времени бегущей строкой

- удержание - регулировка яркости
- 1 касание, удержание - регулировка "скорости" эффекта
- 2 касания, удержание - регулировка "масштаба" эффекта

Это дефолтное состояние для кнопки, но абсолютно любую настройку можно поменять, к примеру вот переход к 253 эффекту по 7 нажатиям во включенном состоянии:
1606757828411.png
В общем если что-то нужно или наоборот не нужно - настраивайте под себя. :)
По HTTP/MQTT (https://community.alexgyver.ru/thre...a-firelamp_jeeui-gpl.2739/page-299#post-73384)
команды можно посылать на лампу через браузер или curl по URL вида http://esp-xxxxxx/cmd?arg=param
- /cmd?on /cmd?off /cmd?on=true /cmd?on=false - вкл/выкл
- /cmd?demo - режим ДЕМО
- /cmd?gbright /cmd?gbright=true - проверка/установка для глобальной яркости
- /cmd?msg=Hello - вывод сообщения на лампу
- /cmd?bright=0-255 - яркость
- /cmd?speed=0-255 - скорость
- /cmd?scale=0-255 - шкала
- /cmd?effect=N - эффект номер N
- /cmd?move_next - следующий эффект
- /cmd?move_prev - предыдущий эффект
- /cmd?move_rnd - случайный эффект
- /cmd?effect - номер текущего эффекта
- /cmd?eff_config - конфигурация текущего эффекта
- /cmd?warning /cmd?warning=[16777215,5000,500,1] - неблокирующий вывод мигалки поверх эффекта (выдача предупреждений), первое число - цвет, второе - полный период, третье - полупериод мигания, четвертое - тип уведомления (0 - цвет, 1-2 - цвет и счетчик, 3 - счетчик)
- /cmd?alarm=true - форсировать включение будильника
- /cmd?control=[N,val] - получить/установить значение дин. контрола
- /cmd?inccontrol=[N,val] - возможность увеличить/уменьшить на val текущее значение контрола, не превышая мин/макс
- /cmd?list - полный список эффектов
- /cmd?demolist - список демо
- /cmd?showlist - список отображаемых
- /cmd?reboot - перезагрузить лампу
- /cmd?OTA - запустить сервер обновления OTA через PIO
- /cmd?draw=[цвет,X,Y]
- /cmd?matrix - отдает размеры [X,Y]
- /cmd?fillmatrix=цвет - заливка цветом

так же команды можно объединять в цепочки в одной посылке, т.е. допустим включить лампу, установить яркость, перейти к эффекту
аналогичные команды работают и для MQTT, если чего-то не хватает или что-то не получается - спрашивайте в теме

Дополнительные служебные комманды:

- /heap - показать свободное место на куче
- /echo - показать эхо-ответ (json для формирования интерфейса)
- /config - показать текущий конфиг (json основных настроек)
- /scan - показать доступные WiFi-сети
- /config.json - скачать активный конфиг лампы
- /events_config.json - скачать активный конфиг событий
- /update - форма http-обновления прошивки
- /edit - вызов редактора конфигов (esp8266/esp8266 - логин/пассворд)

После подключения к лампе в режиме точки доступа она доступна по в браузере по адресу http://192.168.4.1 , если же после этого ее переподключить к роутеру, то узнать ее адрес можно по 5 нажатий на кнопку - вывод IP, если кнопки нет - то при перезапуске лампы она однократно напишет IP. Также ее можно найти в сетевом окружении компьютера:
1609580490648.png
После обнаружения - доступен переход по адресу http://firelamp/ (работает нестабильно). Либо можно c помощью утилиты Service Browser найти сервис http и IP лампы, либо просто поглядеть IP который выдал роутер, если он имеет возможность показать этот адрес.

Основные возможности прошивки:
  • Повторяет все возможности других прошивок по управлению эффектами и предоставляет массу других возможностей
  • Управление по MQTT (см. список команд под спойлером выше), подробную инструкцию по установке и настройке можете почитать тут или посмотреть видео установки брокера
  • Отправка текстовых сообщений на лампу, в том числе специальных %IP, %TM, %EN, %DT
  • Настройка и вывод времени, само время синхронизуется по ntp или может задаваться вручную
  • Периодический вывод времени и/или новогоднего отсчета, лампа может использоваться как гирлянда на окно, корректный вывод текста с отзеркаливанием в случае если лампа "смотрит" во двор.
  • OTA в двух вариантах, при обновлении файловой системы, чтобы не терять настройки можете их сохранить и поместить в папку /data
  • Гибкое и настраиваемое управление кнопкой, индикаторы управления
  • Каждый эффект может иметь дополнительные динамические контролы, кроме трех стандартных. При необходимости любой контрол может быть скрыт
  • Подключение микрофона MAX9814 элементарное: +3.3В с ESP на Vdd микрофона, землю (GND) на землю, сигнальный (Out) микрофона на пин А0. На этом все
  • Возможно менять состояние произвольного пина/пинов (HIGH/LOW/TOGGLE) по событию. Строка настройки вида: [{'pin':1,'act':'H'}], допустимые варианты 'H'==HIGH, 'L'==LOW, 'T'==TOGGLE, также можно записать список, к примеру: [{'pin':1,'act':'H'},{'pin':2,'act':'L'},{'pin':3,'act':'T'}] - 1 установит в HIGH, 2 в LOW, 3 - переключит. Если для кого-то подобное управление слишком сложно, то есть возможность активировать AUX-пин, с прямым управлением им через http/mqtt или UI.
  • Есть возможность ставить множественные будильники и прочие автоматизации
  • Добавлен микрофон (MAX9814) и цветомузыка на основе амплитуды/частоты. Добавлен эффект "Частотный анализатор", множество эффектов имеют зависимость от звука, которую при необходимости можно отключить, как выборочно, так и для всех эффектов сразу
  • Поддержка http-команд , те же команды работают и для mqtt
  • Пользовательский интерфейс всегда актуален и синхронизирован с прошивкой, т.к. является частью прошивки
  • Если будет написано приложение под андроид/иос/... то оно тоже будет синхронизировано, т.к. интерфейс конструируется динамически
  • DF Player Mini - озвучивание эффектов, MP3-плеер, озвучивание времени, при проблемах с плеером обязательно поглядите сюда, подключение плеера - изучите это сообщение. Архив со звуковыми файлами можете взять, к примеру - тут, внимание изменена структура каталога файлов времени - последняя версия тут.
  • При потере связи с роутером прошивка автоматически создаст точку доступа, при восстановлении связи - переподключится, никаких проблем с переключением режимов нет, никаких задержек при недоступности серверов времени - тоже нет, лампа полностью доступна и управляется одинаковым образом как в STA режиме, так и в AP. IP лампы можно поглядеть как по нажатию кнопки, так и в сетевом окружении компьютера, либо через просмотр сервисов (поддерживается Bonjour-сервисы)
  • Прошивка гибко конфигурируется, можно отключать неиспользуемый функционал (кнопку, плеер, цветомузыку и т.д.)
  • Рисовалка (пока через http/mqtt, но будет и через UI)
  • По интеграции в Home Assistant можете поглядеть тут, самая новая и актуальная версия живет здесь.

История:
  • старт с нуля
  • перенесены изменения с прошлого проекта
  • перенесен весь функционал
  • поддежка мосфетов для автоматизаций
  • перенесены эффекты со старых проектов и добавлены новые, общее количество подсчитать сложно, т.к. есть эффекты являющиеся генераторами эффектов, также можно создать копии, ориентировочное количество - 100 штук, впрочем все эти эффекты можно либо скрыть, либо удалить, либо наоборот создать доп. копии, кроме того есть возможность создать конфигурации, с разным поведением и переключать их по необходимости
  • микрофон и цветомузыка
  • возможность локализации (на данный момент есть - русский, украинский, английский, испанский)
  • вывод звука (DF Player Mini) - озвучивание времени, эффектов, MP3-плеер, будильник
В планах:
  • часы реального времени
  • приложение

По состоянию на сегодня прошивка находится в стабильной стадии (есть релизная версия в мастер и текущая в девелоп бренчах). Прошивка активно развивается и над ней работают несколько разработчиков.

Вариант печатного корпуса для лампы можете посмотреть тут.


----------------------------------------

Можно ли копировать, менять что-то по своему усмотрению? Да, естественно - лицензия GPLv3. Разрешено все, что оговаривается лицензией. Но учтите, что согласно лицензии вы обязуетесь предоставлять исходный код проектов основанных на данном, даже в случае коммерческого использования. Либо сразу (предпочтительно), либо по первому требованию любого из обратившихся. Если вас не устраивают идеи и соглашения свободного кода - выбирайте другой проект и не используйте этот. И еще раз - моя позиция другими словами.

Несколько скриншотов интерфейса прошивки (показаны три темы - классическая, светлая, темная):

s1.JPGs2.JPGs3.JPG

Для тестирования доступно приложение под IOS.
 
Последнее редактирование:

Комментарии

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
Инструкция по установке прошивки (ее можно скачать отсюда , это последняя стабильная версия), но самая актуальная версия, которая разрабатывается в данный момент, находится тут: develop-ветка

Существует
Консольный билдер для прошивки (Win8.1 - 10) , если нет желания ставить VS Code+PIO, можете использовать данный вариант.


Еще варианты подключений можно поглядеть тут.

-----------------------------------------------------------------------

Также можно прошить заранее подготовленную прошивку и ФС отсюда, здесь самая новая версия от 25.02.2021
Проект: скачать отсюда, фреймворк JeeUI2 переработан и взят отсюда , но за время разработки фреймворк был существенно переработан, поменял название и фактически лампа уже работает на фреймворке EmbUI, который позволяет строить WebUI интерфейсы для любых проектов, считайте его готовым движком создания интерфейсов под ESP8266/ESP32, может использоваться кем угодно под свои задачи, полностью открыт и разработка продолжается. На уровне фреймворка есть:
1. Асинхронный вебсервер, с поддержкой до 5 одновременных клиентов и синхронизацией между ними.
2. Поддержка http-get запросов
3. Поддержка mqtt
4. SSDP, mDNS, полностью автоматический WiFi c восстановлением после сбоев
5. Предустановленный и преднастроенный базовый интерфейс
6. Фреймворк достаточно экономно расходует память и можно отключить некоторые потребляющие память части, типа SSDP
7. Поддержка локализации
8. Инструкция и примеры использования
В общем будут вопросы по фреймворку и его использованию - задавайте в теме. Лампа не единственный проект который может использовать фреймворк, на данный момент на нем же у меня в тестовом варианте собрана веб-камера для esp32, но пока еще не довел до ума и не выделил в отдельный проект.

Далее более подробно по установке:

Учтите, что PIO и VS Code развиваются и инструкция может быть немного не актуальна и не соответствовать текущим версиям ПО. При возникновении вопросов/проблем - задавайте их в теме.

1. Устанавливаем Visual Studio Code в зависимости от вашей операционной системы 32 или 64 битную версию.
2. Устанавливаем Git он тоже понадобится, так как Visual Studio Code на пару с PlatformIO будут ругаться что его им очень не хватает.
3. Перезагружаем компьютер.
4. Установить PlatformIO для этого запустить Visual Studio Code и в меню View выбрать пункт Extensions - либо воспользоваться сочетанием клавиш (Ctrl+Shift+X)
5. Выбрать PlatformIO IDE и нажать Install
6. Перезапустить Visual Studio Code у вас сразу откроется вкладка PIO Home, работаем в ней.
7. В вкладке Открыть проект - Open Project - заходим в папку с проектом и нажимаем Open "FireLamp_JeeUI-master"



8. Слева открываем Platformio.ini и делаем необходимые настройки, раскомментировать нужный board, это плата на которой вы собираете лампу, и закомментируйте ненужную.
9. Тут же нужно добавить настройки Com порта на котором у вас ваша плата, это делается командой upload_port = COM8 (где COM8 номер вашего порта COM2, COM3 и т.д.)
10. Останется настроить саму прошивку под себя это делается в include - config.h там все подробно откомментировано.
11. Первоначально вам необходимо будет записать файлы в ФС контроллера, иначе веб-интерфейс не будет доступен! Делается это так меню Terminal - Run Task.. (Ctrl+Alt+T) - PlatformIO - PlatformIO: Upload File System Image, если вы не забыли указать нужный Com порт и подключили плату все должно быть успешно.
Так вот там по умолчанию нет этого пункта.
Нужно нажать Кнопку PlatformIO, потом выбрать конфигурацию, которую собираешь и только потом Upload Filesystem Image. И только после такого она появляется в Run Task. Правильный скриншот прилагаю.

1600444586890.png
12. Можно собирать и заливать прошивку в лампу. Делается это нажатием на PlatformIO Upload.



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

Способы обновления прошивки:

OTA
- обновляется сама прошивка и есть возможность обновить File System Image как это описано выше, можно работать с лампой так как и по физическому подключению к COM порту без разбора и подключения проводом.

Для обновления прошивки по OTA нужно сделать изменения в файле PlatformIO.ini
1. Закомментировать по аналогии с другими строками и соблюдением пробелов, ваш COM порт.

2. Раскомментировать следующие строки, обратите внимание пробелы очень важны, если не соблюсти их будет выдаваться ошибка при запуске прошивки и она так и не начнется.

В строке с IP адресом, указать ваш адрес лампы.

C++:
upload_protocol = espota
upload_port = 192.168.1.36
upload_flags =
    --auth=12345
    -p 3232


Перед началом обновления, не забудьте перевести лампу в режим обновления PIO-ОТА, для http обновления (читать ниже) это делать не обязательно. Также убедитесь, что обновление прошивки через PIO разрешено дефайном в user_config.h

* внимание, для питона важны отступы (пробелы), так что внимательно выравнивайте на одном уровне

HTTP - обновление через web интерфейс, можно обновить как прошивку, так и ФС:
IP адрес лампы\update указываем файл firmware.bin или то же самое через WebUI
Нужно будет выбрать файл и нажать Upload, на кнопке Обновление появятся проценты прогресса.

1606756811806.png
Здесь на картинке под 1 показан вариант ОТА через PIO, под 2 - вариант через http для WebUI.

Для формирования файла firmware.bin нужно в PlatformIO запустить сборку прошивки без заливки. Для формирования ФС - соответственно соберите ФС и загрузите файл ФС пользуясь теми же кнопками, как при заливке прошивки.
1588144337363.png



После непродолжительной сборки прошивки, терминал выдаст ответ:
= [SUCCESS] =
файл будет находится в папке со скачанной прошивкой .pio\build\esp8266dev\
Я прошиваю после стирания:
Быстрый старт.

Что потребуется:
Visual Studio Code - скачиваем и устанавливаем, желательно перелогиниться или перезагрузиться, чтобы точно применились настройки путей.
Под VS Code устанавливается PlatformIO, дальше вся работа там. Если кому приятнее работать в ArduinoIDE - адаптируйте самостоятельно, у меня терпения не хватает ждать пока там все соберется, так что мне проще в PlatformIO все делать.

Проект: скачать отсюда, фреймворк JeeUI2 переработан и взят отсюда , но он уже включен в проект, так что дополнительно качать не нужно.

В общем у вас после открытия проекта должно выглядеть как-то так:
1583172758919.png

Контроллер ESP8266/ESP32 выбирается в файле platformio.ini.
ВНИМАНИЕ: Первоначально вам необходимо будет записать файлы в ФС контроллера, иначе веб-интерфейс не будет доступен!
Делается это так: PlatformIO->Run Task...->Upload File System Image
1583173209762.png
После этого можно собирать проект и записывать его в контроллер. Сами файлы для загрузки в ФС находятся в \FireLamp_JeeUI\data там же у меня находятся и файлы конфигурации config.json и eff_config.json . Вы также можете поместить свои предварительно созданные конфигурации, если это необходимо. Также к файловой системе можно получить доступ, если при компиляции проекта была раскомментирована настройка:
//#define USE_FTP // доступ к SPIFFS по FTP, логин/пароль: esp8266
После чего вы можете подключиться фтп-клиентом и скачать/записать то, что вам нужно.

---------------------
Я бы ещё в инструкции дописал, как собирать проект и записывать его в контроллер, сам искал долго эти кнопки.
Кнопки по сборке проекта, включению вывода сообщений отладчика, очистке проекта от объектных файлов, остановке задач и т.д. находятся внизу, слева:
1583602065364.png

Создание конфигурации:
Файл user_config.h.default переименовываете в user_config.h и редактируете.
Обратите внимание, то что для кнопки и плеера существует также возможность менять пины после перепрошивки, сделано это для тех, кто хочет залить бинарник, а затем настроить эти пины под себя:
1607700948873.png
Порядок создания пользовательской конфигурации описан здесь: user_config.h , пример такого файла можно посмотреть тут .
По кнопке:
* Из выключенного состояния
- 1 касание - включить на последнем эффекте
- 2 касания - включить в режиме ДЕМО
- долгое удержание - включить в режиме "белая лампа" на минимальную яркость (ночник)
- касание, удержание - включить в режиме "белая лампа" на максимальную яркость
* Во включенном состоянии
- 1 касание - выключить лампу
- 2 касания - следующий эффект
- 3 касания - предыдущий эффект
- 4 касания + 4 касания - запуск сервиса ОТА
- 5 касаний - вывод IP на лампу
- 6 касаний - вывод текущего времени бегущей строкой

- удержание - регулировка яркости
- 1 касание, удержание - регулировка "скорости" эффекта
- 2 касания, удержание - регулировка "масштаба" эффекта

Это дефолтное состояние для кнопки, но абсолютно любую настройку можно поменять, к примеру вот переход к 253 эффекту по 7 нажатиям во включенном состоянии:
1606757828411.png
В общем если что-то нужно или наоборот не нужно - настраивайте под себя. :)
По HTTP/MQTT (https://community.alexgyver.ru/thre...a-firelamp_jeeui-gpl.2739/page-299#post-73384)
команды можно посылать на лампу через браузер или curl по URL вида http://esp-xxxxxx/cmd?arg=param
- /cmd?on /cmd?off /cmd?on=true /cmd?on=false - вкл/выкл
- /cmd?demo - режим ДЕМО
- /cmd?gbright /cmd?gbright=true - проверка/установка для глобальной яркости
- /cmd?msg=Hello - вывод сообщения на лампу
- /cmd?bright=0-255 - яркость
- /cmd?speed=0-255 - скорость
- /cmd?scale=0-255 - шкала
- /cmd?effect=N - эффект номер N
- /cmd?move_next - следующий эффект
- /cmd?move_prev - предыдущий эффект
- /cmd?move_rnd - случайный эффект
- /cmd?effect - номер текущего эффекта
- /cmd?eff_config - конфигурация текущего эффекта
- /cmd?warning /cmd?warning=[16777215,5000,500,1] - неблокирующий вывод мигалки поверх эффекта (выдача предупреждений), первое число - цвет, второе - полный период, третье - полупериод мигания, четвертое - тип уведомления (0 - цвет, 1-2 - цвет и счетчик, 3 - счетчик)
- /cmd?alarm=true - форсировать включение будильника
- /cmd?control=[N,val] - получить/установить значение дин. контрола
- /cmd?inccontrol=[N,val] - возможность увеличить/уменьшить на val текущее значение контрола, не превышая мин/макс
- /cmd?list - полный список эффектов
- /cmd?demolist - список демо
- /cmd?showlist - список отображаемых
- /cmd?reboot - перезагрузить лампу
- /cmd?OTA - запустить сервер обновления OTA через PIO
- /cmd?draw=[цвет,X,Y]
- /cmd?matrix - отдает размеры [X,Y]
- /cmd?fillmatrix=цвет - заливка цветом

так же команды можно объединять в цепочки в одной посылке, т.е. допустим включить лампу, установить яркость, перейти к эффекту
аналогичные команды работают и для MQTT, если чего-то не хватает или что-то не получается - спрашивайте в теме

Дополнительные служебные комманды:

- /heap - показать свободное место на куче
- /echo - показать эхо-ответ (json для формирования интерфейса)
- /config - показать текущий конфиг (json основных настроек)
- /scan - показать доступные WiFi-сети
- /config.json - скачать активный конфиг лампы
- /events_config.json - скачать активный конфиг событий
- /update - форма http-обновления прошивки
- /edit - вызов редактора конфигов (esp8266/esp8266 - логин/пассворд)

После подключения к лампе в режиме точки доступа она доступна по в браузере по адресу http://192.168.4.1 , если же после этого ее переподключить к роутеру, то узнать ее адрес можно по 5 нажатий на кнопку - вывод IP, если кнопки нет - то при перезапуске лампы она однократно напишет IP. Также ее можно найти в сетевом окружении компьютера:
1609580490648.png
После обнаружения - доступен переход по адресу http://firelamp/ (работает нестабильно). Либо можно c помощью утилиты Service Browser найти сервис http и IP лампы, либо просто поглядеть IP который выдал роутер, если он имеет возможность показать этот адрес.

Основные возможности прошивки:
  • Повторяет все возможности других прошивок по управлению эффектами и предоставляет массу других возможностей
  • Управление по MQTT (см. список команд под спойлером выше), подробную инструкцию по установке и настройке можете почитать тут или посмотреть видео установки брокера
  • Отправка текстовых сообщений на лампу, в том числе специальных %IP, %TM, %EN, %DT
  • Настройка и вывод времени, само время синхронизуется по ntp или может задаваться вручную
  • Периодический вывод времени и/или новогоднего отсчета, лампа может использоваться как гирлянда на окно, корректный вывод текста с отзеркаливанием в случае если лампа "смотрит" во двор.
  • OTA в двух вариантах, при обновлении файловой системы, чтобы не терять настройки можете их сохранить и поместить в папку /data
  • Гибкое и настраиваемое управление кнопкой, индикаторы управления
  • Каждый эффект может иметь дополнительные динамические контролы, кроме трех стандартных. При необходимости любой контрол может быть скрыт
  • Подключение микрофона MAX9814 элементарное: +3.3В с ESP на Vdd микрофона, землю (GND) на землю, сигнальный (Out) микрофона на пин А0. На этом все
  • Возможно менять состояние произвольного пина/пинов (HIGH/LOW/TOGGLE) по событию. Строка настройки вида: [{'pin':1,'act':'H'}], допустимые варианты 'H'==HIGH, 'L'==LOW, 'T'==TOGGLE, также можно записать список, к примеру: [{'pin':1,'act':'H'},{'pin':2,'act':'L'},{'pin':3,'act':'T'}] - 1 установит в HIGH, 2 в LOW, 3 - переключит. Если для кого-то подобное управление слишком сложно, то есть возможность активировать AUX-пин, с прямым управлением им через http/mqtt или UI.
  • Есть возможность ставить множественные будильники и прочие автоматизации
  • Добавлен микрофон (MAX9814) и цветомузыка на основе амплитуды/частоты. Добавлен эффект "Частотный анализатор", множество эффектов имеют зависимость от звука, которую при необходимости можно отключить, как выборочно, так и для всех эффектов сразу
  • Поддержка http-команд , те же команды работают и для mqtt
  • Пользовательский интерфейс всегда актуален и синхронизирован с прошивкой, т.к. является частью прошивки
  • Если будет написано приложение под андроид/иос/... то оно тоже будет синхронизировано, т.к. интерфейс конструируется динамически
  • DF Player Mini - озвучивание эффектов, MP3-плеер, озвучивание времени, при проблемах с плеером обязательно поглядите сюда, подключение плеера - изучите это сообщение. Архив со звуковыми файлами можете взять, к примеру - тут, внимание изменена структура каталога файлов времени - последняя версия тут.
  • При потере связи с роутером прошивка автоматически создаст точку доступа, при восстановлении связи - переподключится, никаких проблем с переключением режимов нет, никаких задержек при недоступности серверов времени - тоже нет, лампа полностью доступна и управляется одинаковым образом как в STA режиме, так и в AP. IP лампы можно поглядеть как по нажатию кнопки, так и в сетевом окружении компьютера, либо через просмотр сервисов (поддерживается Bonjour-сервисы)
  • Прошивка гибко конфигурируется, можно отключать неиспользуемый функционал (кнопку, плеер, цветомузыку и т.д.)
  • Рисовалка (пока через http/mqtt, но будет и через UI)
  • По интеграции в Home Assistant можете поглядеть тут, самая новая и актуальная версия живет здесь.

История:
  • старт с нуля
  • перенесены изменения с прошлого проекта
  • перенесен весь функционал
  • поддежка мосфетов для автоматизаций
  • перенесены эффекты со старых проектов и добавлены новые, общее количество подсчитать сложно, т.к. есть эффекты являющиеся генераторами эффектов, также можно создать копии, ориентировочное количество - 100 штук, впрочем все эти эффекты можно либо скрыть, либо удалить, либо наоборот создать доп. копии, кроме того есть возможность создать конфигурации, с разным поведением и переключать их по необходимости
  • микрофон и цветомузыка
  • возможность локализации (на данный момент есть - русский, украинский, английский, испанский)
  • вывод звука (DF Player Mini) - озвучивание времени, эффектов, MP3-плеер, будильник
В планах:
  • часы реального времени
  • приложение

По состоянию на сегодня прошивка находится в стабильной стадии (есть релизная версия в мастер и текущая в девелоп бренчах). Прошивка активно развивается и над ней работают несколько разработчиков.

Вариант печатного корпуса для лампы можете посмотреть тут.


----------------------------------------

Можно ли копировать, менять что-то по своему усмотрению? Да, естественно - лицензия GPLv3. Разрешено все, что оговаривается лицензией. Но учтите, что согласно лицензии вы обязуетесь предоставлять исходный код проектов основанных на данном, даже в случае коммерческого использования. Либо сразу (предпочтительно), либо по первому требованию любого из обратившихся. Если вас не устраивают идеи и соглашения свободного кода - выбирайте другой проект и не используйте этот. И еще раз - моя позиция другими словами.

Несколько скриншотов интерфейса прошивки (показаны три темы - классическая, светлая, темная):

s1.JPGs2.JPGs3.JPG

Для тестирования доступно приложение под IOS.
 

Вложения

Последнее редактирование:

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
@kDn, с ребутами вроде да, поборолись. Но после того как вы двигали ползунок "Масштаб" скрывали и т.п. Очень много эффектов перестали правильно управляться. Я так понимаю, что по всех эффектах у которых теперь id:2, type:48 надо пройтись, и отремонтировать то, что сломано. Можем разделить работу вы идете сверху списка, я снизу.
И так, как на данным момент все "выбитые зубы" (дырки в списке эффектов) так или иначе заполнены, после ремонта слить все это в Мастер.

Кстати, на каком-то этапе пропал злобный баг - срабатывания кнопки со второго раза после перезагрузки. Что меня несказанно порадовало.

Есть "сверчек", после заливки чистой ФС, лампа загружается со страницы "Вывод текста". Оно не принципиально, но как бы странно.


-------
@ALL, вчера добавил новый эффект "Шары", вместо "Арканоид", позиция 40. Причина та же, что и с Тетрис - убогое Демо, и отсутствие возможности управлять игрой. Код так же сохранил на возможное будущее, если органы управления вдруг появятся.
В "Северном сиянии" подправил цветовую гамму паре палитр, для пущей похожести на оригинал.
 
Последнее редактирование:

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
@kDn, с ребутами вроде да, поборолись. Но после того как вы двигали ползунок "Масштаб" скрывали и т.п. Очень много эффектов перестали правильно управляться. Я так понимаю, что по всех эффектах у которых теперь id:2, type:48 надо пройтись, и отремонтировать то, что сломано. Можем разделить работу вы идете сверху списка, я снизу.
Спасибо, но я уже свою часть работы сделал, когда чинил эффекты. Помнится вы вроде не горели желанием присоединиться и что-либо делать? Посему я пока лучше с @vortigont над рефакторингом поколдую, чем буду выискивать эффекты в которых что-то возможно работает не так. :)

По переносу в мастер я как бы уже сказал - надо еще перенести фикс по "true/false" в "1/0", погонять некоторое время, отловить баги и дальше уже релиз.
 

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
когда чинил эффекты.
Вы в слове "чинил" сделали пять ошибок. :) Кто вам злобный Буратино, если из всех возможных способов решения вопроса, вы выбрали самый трудоемкий, и потенциально опасный, с точки зрения поломки кода?
Ну ок. Я сам посмотрю.
 

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
Бренч - poorlamp_worker
Отлично, благодарю! Ну значит от этого и буду рефакторить - пристегните ремни :)

Вывод - наиболее злобные баги отловлены, с чем всех и поздравляю.
В свете вышесказанного предлагаю - форкнуть брeнч pre-release, я волью туда чекбоксы, тестируем, потом из нее делаем мерж в мастер и релиз. В дев будет рубилово по эффектам и методам работы с матрицей.


Тем временем я на базе своей усеченной ветки завел эффекты на RGB панели 128х128.
Могу сказать выглядит весьма интересно, все эффекты можно поделить на 4 группы
1) крешат контроллер или вгоняют контроллер в вечный цикл (знаю почему, уже чинил подобное в авроре)
2) все сломано, показывают какую-то фигню
3) работают норм, но выглядят уныло
4) вау-эффект! 16х16 фтопку! :)

В общем для любителей писать эффекты работы непочатый край...

Следующий этап завести и поглядеть эффекты из того обрезка что кдн налобал. Ради интереса завести это все еще на каком-нибудь LCD экране
 

tar.antino

★★✩✩✩✩✩
10 Дек 2020
116
84
Конкретно по огненной лампе - у него есть родной контрол "Масштаб" с индексом 2 который скрыт и еще один "Масштаб" из динамических - с индексом 3 и диапазоном 1...100. Как раз из-за нестандартного диапазона и скрыт родной масштаб. :)
Так а как понять, что он скрыт, если лампа отдает его по запросу все равно? значит не так уж он и скрыт))
 

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
В свете вышесказанного предлагаю - форкнуть брeнч pre-release, я волью туда чекбоксы, тестируем, потом из нее делаем мерж в мастер и релиз.
Вы видимо пропустили то, что я писал выше. После того как kDn, объявил контролл 2, scale который, "священной коровой" и всем эффектам, где scale не масштаб сделал лоботомию, часть эффектов сломалась.
Вот когда отремонтирую/ем?, можно релизить.

Так а как понять, что он скрыт, если лампа отдает его по запросу все равно? значит не так уж он и скрыт))
type = 48
 
  • Лойс +1
Реакции: tar.antino

tar.antino

★★✩✩✩✩✩
10 Дек 2020
116
84
Ааа, точно... все, теперь ок!)) Я уже понемногу параллельно причесываю интерфейс. Еще все далеко от совершенства, но в ближайшие дни скриншоты выложу и пользоваться уже можно) Единственная проблема - IP пока вводится вручную, не дошел еще до бонжура, я только две недели назад установил xCode)
 
  • Лойс +1
Реакции: kostyamat

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
Вы видимо пропустили то, что я писал выше. После того как kDn, объявил контролл 2, scale который, "священной коровой" и всем эффектам, где scale не масштаб сделал лоботомию, часть эффектов сломалась.
Вот когда отремонтирую/ем?, можно релизить.
Да я не против... вот исправления в пре-релизную ветку и пойдут. Если с этим затянется - ну что поделать, запишем в "известные проблемы" :)
 

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
В свете вышесказанного предлагаю - форкнуть брeнч pre-release, я волью туда чекбоксы, тестируем, потом из нее делаем мерж в мастер и релиз. В дев будет рубилово по эффектам и методам работы с матрицей.
ок, делайте на свое усмотрение, я все еще не готов полноценно включиться в работу, собираюсь с силами :)
максимум могу баги погонять или потестировать чего-нить, новое же делать пока желания нет
 

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
Ответ неправильный, правильный будет такой:
 
  • Лойс +1
Реакции: tar.antino

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
Вы видимо пропустили то, что я писал выше. После того как kDn, объявил контролл 2, scale который, "священной коровой" и всем эффектам, где scale не масштаб сделал лоботомию, часть эффектов сломалась.
После того как я вам об этом 100500 раз сказал, после того как вы практиковались считать до трех, после того как вы отказались самостоятельно все приводить в порядок. Да, пришлось мне заниматься этим, вы же не обезьяна, чтобы обезьянью работу делать, вот я и побыл макакером. На всяк случай - первые три контрола не ломать, первые три контрола имеют индексы - 0, 1, 2.
 

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
@kDn, завел вашу версию со скрипом. как есть не компилится :( в effectworker.h - куча методов тянут за собой джейсон, литтлфс, ллистс и иже с ними, даже если в ФС ничего не пишется/не читается.
Вернул либы, собралось, ну и по мелочи еще покромсал там-сям... есть чем заняться на досуге теперь - пилить рубить и резать :)
 

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
@vortigont, в смысле не компилится? я же вам показал не только откомпилированный вариант, но и работающий :).
Джейсон нужен полюбому, а вот ФС в принципе не нужна, если конфиг не читать и не сохранять.

1612807923126.png
 

vortigont

★★★★★★✩
24 Апр 2020
688
550
Saint-Petersburg, Russia
потомучто вы собрали с тем же платформио.ини что и основную ветку. У вас же в самом effectworker.h в начале прописано инкдуд литтл.фс ) Уберите либу из платформио.ини и сборка упадет потому что куча методов воркера должны работать с файлами. Ну ладно, это ерунда, я собрал в итоге. Думаю в этоге этот класс воркера надо будет распилить на что-то более гранулярное.
Вы мне поясните вот что:
C++:
void EffectCalc::scale2pallete(){
  if (!usepalettes)
    return;

  LOG(println, F("Reset all controls"));
  setbrt((*ctrls)[0]->getVal().toInt());
  setspd((*ctrls)[1]->getVal().toInt());
  setscl((*ctrls)[2]->getVal().toInt());
  for(int i=3;i<ctrls->size();i++){
    setDynCtrl((*ctrls)[i]);
  }
}
зачем метод шкалы (или палитры) дергает яркость/скорость и что происходит в цикле фор?
 

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
@kDn, @vortigont не хочу показаться глупим, но почему в конструктор эффекта просто не передвать восемь параметров (даже семь, яркость эффекту не нужна), а эффект уже сам разбирается что ему нужно, а что нет, и что с этим делать.
Это же логично.
 

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
@kostyamat, зачем и чем это лучше списка? Если чуть подумайте, то догадаетесь всю бредовость предложения, если не догадаетесь, то я подскажу :)

Для начала опишите прототип функции, а дальше вам сходу станет ясна вся глубина глубин. ;)
 
Последнее редактирование:

tar.antino

★★✩✩✩✩✩
10 Дек 2020
116
84
Решил, что скрины можно уже показать) Основной функционал по управлению работает. Хочу еще немного причесать интерфейс, добавить из настроек кое-какие опции и поиск лампы/ламп в сети.
IMG_0200.jpg IMG_0202.jpg IMG_0203.jpg IMG_0204.jpg
 

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
@kDn, не хотел возвращаться к теме видимости переменных из класса лампы. (Мои любимые глобальные переменные), но имхо все эти setDynCls(), setScl(), setSpd() прямо в коде эффекта - это такое....
Я бы, как эффекто-писатель, предпочел бы иметь переменные ctrl1-ctrl7, и оперировать ими. И пофигу на интерфейс, пускай он хоть динамически конструируется, как сейчас, или я их перед инициализацией эффекта руками задаю, без разницы.
Какая-то функция, при каждой интерации эффекта, пускай мне обновляет значения этих переменных из интерфейса, и мне достаточно.
А интерфейс (контроллы) можно продожать описывать точно так же, как и сейчас. Не скажу, что это удобно, но привык, и мне нормально.
Эффекту же достаточно просто иметь доступ к актуальному значению контроллов. Ему должно быть пофиг откуда они берутся, он должен выбирать из них свои, и ими пользоваться, и игнорировать те, которые ему не предназначены.
 
Последнее редактирование:
  • Вау +0
Реакции: kDn

kDn

★★★★★★★
18 Ноя 2019
3,611
2,182
@kostyamat, а... глобальных переменных вам не хватает? Ну и какого типа должна быть переменная для контрола №5 и почему? Скажите, вы прикалываетесь или действительно так за все это время и не поняли почему сделано так, а не иначе. Вот гляжу вам уже сеттеры не нужны, ну офигеть и не встать. :) Нука расскажите мне про палитры и как вы без сеттеров с ними работать собрались? А с микрофоном?

Хорошо, пока вы думаете над контролом №5 и его типом, готов вопрос еще один - а контрол №4 имеющий значение 71 это сколько от его диапазона, ну типа в UI нарисована граница в 100, в 200, в 80 или в 255. Кстати, а как вы поймете если 0 - это глобальная переменная хранящая ноль или же просто отсутствующий контрол? А как вы будете мапить UI и его динамическое построение в ваши 8 глобальных переменных?

Может прежде чем глупости писать всеж-таки сначала бренч-проверка и подумать? Вон ведь за сегодня два бренча создано тупо для проверок. Я так делаю, @vortigont тоже так делает. Почему бы вам не сделать вариант с 8 глобальными переменными и показать как бл@дь c ним прикольно и удобно работать.

* Если через полгода вы снова начнете эту песню о глобальных переменных, то я просто не буду знать что сказать... Это еще круче чем вариант "у меня кнопка не работает". Издевательство высшей пробы.
 

tar.antino

★★✩✩✩✩✩
10 Дек 2020
116
84
@kDn, возникло пару вопросов по функционалу и некоторые из них мы уже, кажется, обсуждали ) сложно ли сделать управление глобальными настройками микрофона и плеера (вкл/выкл, может быть, запуск калибровки для микрофона и громкость для dfplayer'a) по http-запросам? и, возможно, какой-то способ создавать события по запросу, чтобы можно было ставить будильники или таймер на отключение через приложение, генерируя соответствующую строку.
 

stepko

★★★★★✩✩
26 Июн 2020
994
313
Я сделал пулл с правкой лабиринта
Это до(можно заметить, что верх и право пусты)
photo_2021-02-08_21-50-17.jpg
А это после(полностью заполнен лабиринт)
photo_2021-02-08_21-49-37.jpg
 

kostyamat

★★★★★★★
29 Окт 2019
2,886
1,665
Хорошо, пока вы думаете над контролом №5 и его типом, готов вопрос еще один - а контрол №4 имеющий значение 71 это сколько от его диапазона, ну типа в UI нарисована граница в 100, в 200, в 80 или в 255. Кстати, а как вы поймете если 0 - это глобальная переменная хранящая ноль или же просто отсутствующий контрол? А как вы будете мапить UI и его динамическое построение в ваши 8 глобальных переменных?
Если контролл 5 bool, то понятно что все не равное 0 = true.
А если он не используется, то вообще похер. В другом случае он всегда byte. Если эффект хочет что-то типа диапазона 20-60, то сейчас в эффекте слелано либо через map(), либо используется на прямую, если контролл описан не как 1-255. Но ничто не мешает пропустить его значение через constrain(), или даже constrain(map()). Это потребует минимального изсэменения в коде эффекта.
Палитры - ровно так же как и сейчас - либо через внешний palettemap, либо через внутренний. Не вижу проблемы.
 

tar.antino

★★✩✩✩✩✩
10 Дек 2020
116
84
друзья, я сдаюсь - у меня на 4 компьютерах не собирается прошивка под есп32, хоть тресни, с разными ошибками... а мне очень нужно, соберите кто-нибудь, а? под матрицу 18х60, с кнопкой и без микрофонов/плееров, параметры матрицы:
MATRIX_TYPE (0U)
CONNECTION_ANGLE (0U)
STRIP_DIRECTION (1U)
🙏🙏🙏
с файловой системой, а то еспехи чистые все