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

  • Кнопка "Начать переписку" переименована в "Личное сообщение", "СООБЩЕНИЯ ПРОФИЛЯ" переименованы в "СТЕНА"
WiFi лампа-будильник. Прошивка FireLamp_JeeUI (GPL)
Инструкция по установке:

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

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 порт и подключили плату все должно быть успешно.
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 интерфейс, не стирает параметры, можно обновить только прошивку, обновление File System Image только из приложения или OTA

IP адрес лампы\update указываем файл firmware.bin
Нужно будет выбрать файл и нажать Update внизу в статусе браузера появятся проценты прогресса.

Для формирования файла 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 , пример такого файла можно посмотреть тут .

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

- удержание - регулировка яркости
- 1 касание, удержание - регулировка "скорости" эффекта
- 2 касания, удержание - регулировка "масштаба" эффекта
По HTTP
команды можно посылать на лампу через браузер или curl по URL вида http://esp-xxxxxx/cmd?arg=param
- /cmd?on /cmd?off - вкл/выкл
- /cmd?demo - режим ДЕМО
- /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?reboot - перезагрузить лампу
- /cmd?OTA - запустить сервер обновления OTA через PIO

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

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

Основные возможности прошивки:
  • Повторяет все возможности других прошивок по управлению эффектами
  • Включение, выключение, выбор эффекта, смена яркости/скорости/масштаба
  • DEMO-режим
  • Управление по MQTT , подробную инструкцию по установке и настройке можете почитать тут или посмотреть видео установки брокера
  • Отправка текстовых сообщений на лампу, в том числе специальных %IP, %TM
  • Настройка и вывод времени, само время синхронизуется по http/ntp или может задаваться вручную
  • Периодический вывод времени и/или новогоднего отсчета
  • OTA в двух вариантах, при обновлении файловой системы, чтобы не терять настройки можете их сохранить и поместить в папку /data .
  • Управление кнопкой, индикаторы управления
  • Добавить дополнительный ползунок можно так : [{'R':'127'}], делается это однократно и на текущий момент работает для дыма и мерцания
  • Подключение микрофона элементарное: +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 - переключит.

Доп. возможности прошивки:
  • Есть возможность ставить множественные будильники и прочие автоматизации
  • Добавлен микрофон и цветомузыка на основе амплитуды/частоты. Добавлен эффект "Частотный анализатор"
  • Поддержка http-команд
  • Пользовательский интерфейс всегда актуален и синхронизирован с прошивкой, т.к. является частью прошивки
  • Если будет написано приложение под андроид/иос/... то оно тоже будет синхронизировано, т.к. интерфейс конструируется динамически

По поводу настройки WiFi - фреймворк позволяет переключать режим AP<->STA по удержанию кнопки "Flash" NodeMsu в течение 5 секунд. Если ее удерживать в течение 10 секунд, то произойдет сброс настроек. Если лампа не может подключиться к роутеру, то будет поднята AP c пустым паролем, а дальше после перехода по адресу http://192.168.4.1 вы сможете сконфирурировать WiFi, либо же можно дополнительно прописать креденшеналы в функции
parameters() файла interface.cpp . Если лампа подключилась к роутеру, то управлять ею можно по тому IP, что она получила от роутера.

История:
  • старт с нуля
  • перенесены изменения с прошлого проекта
  • перенесены эффекты со старых проектов и добавлены новые, общий список - более 30 штук
  • перенесен весь функционал
В планах:
  • часы реального времени
  • вывод звука
  • поддежка мосфетов для автоматизаций
  • возможность локализации
  • приложение

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

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


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

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

Комментарии

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
@kDn, а можно сразу предусмотреть, чтобы названия и надписи в вебморде откуда-то из файла в ФС вычитывались? Я лично бы на украинский и испанский языки перевел. Так как самому на родном языке хочется иметь интерфейс, а у сына лучший друг, испанец, очень просит для своей невесты такую лампу в подарок.
К сожалению это не компьютер, так что возможности ограничены... Если есть какой-то механизм ресурсных файлов - погляжу и подключу чуть позже. Но если вычитывать именно из JSON и создавать потом строковые части - то это крайне накладно по памяти, которой очень мало в есп8266.

В общем пока что не знаю... Если найдете примеры ресурсных файлов и их поддержки для есп8266/32 - то скиньте ссылку.
 
  • Лойс +1
Реакции: kostyamat

tolyan23

✩✩✩✩✩✩✩
2 Янв 2020
18
8
После этой прошивки я смогу перепрошится на прошивку от ganer47? если мне что-то не понравится или будут какие-то проблемы? Есть какая-то разница какой контролер использовать wemos, nodemcu, или голую платку esp8266 (с точки зрения первой загрузки кода) Есть ли поддержка обновления по воздуху?
 

kostyamat

★★★★✩✩✩
29 Окт 2019
763
241
@tolyan23, "прошивка в начале пути,
Ей нужно ещё подрости" (с) Я.
Все будет, надеюсь, терпение.
А пока, в ней нет и половины функционала. Проблем возвратится на Ганнера47 думаю точно не будет.
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
После этой прошивки я смогу перепрошится на прошивку от ganer47? если мне что-то не понравится или будут какие-то проблемы? Есть какая-то разница какой контролер использовать wemos, nodemcu, или голую платку esp8266 (с точки зрения первой загрузки кода) Есть ли поддержка обновления по воздуху?
При перепрошивках вы потеряете только сохранненные настройки, больше проблем быть не должно при любых переходах туда-сюда. Разницы в использовании нет, можно также использовать есп32. Единственное, что сейчас фреймворк использует вывод на светодиод и кнопку "Flash" модуля NodeMCU для отображения состояния подключения и переключения/сброса на начальное состояние. На других модулях - данные светодиод и кнопку можно (но не обязательно) допаять при необходимости.
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
Внимание: при неадекватном поведении цветов (это можно увидеть на той же белой лампе), требуется правка констант в библиотеке FastLed:

\libdeps\myboard\FastLED_ID126\power_mgt.cpp

static const uint8_t gRed_mW = 15 * 5; // 15mA @ 5v = 75mW
static const uint8_t gGreen_mW = 15 * 5; // 15mA @ 5v = 75mW
static const uint8_t gBlue_mW = 15 * 5; // 15mA @ 5v = 75mW
static const uint8_t gDark_mW = 1 * 5; // 1mA @ 5v = 5mW
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
Буду по-немного дорабатывать, ну и логировать изменения:

- добавил белую лампу
- поправил задержки эффектов

- добавил "эффектопад"
- багфикс двойного/тройного нажатия кнопки

На сегодня пока хватит :)
IMAG2394.jpg
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
Продолжаю.

+ Эффект "пульс"
* багфикс для сборки проекта под esp32

+ Эффект "Радуга 2D" - объединяет в себе горизонтальную, диагональную и вертикальную

+ Эффект "Цвета" который объединяет в одном наборе как статичный цвет (скорость==1, масштаб=HUE), так и динамичный (скорость >1, масштаб=шаг изменения HUE). Т.е. при скорости 255 и масштабе 1 цвета будут меняться плавно (шаг 1) и быстро. При скорости 127 и масштабе 35 будет меняться со средней скоростью, и с шагом 35 от текущего HUE. В общем кому надо - разберется))).

Итого на данный момент ситуация такая:
1583337565125.png
* На этом на сегодня и закончу :)
** "В списке демо" это аналог избранного, т.е. те эффекты, что включены - попадут в перебор демо. "В списке выбора" это избранное для режима вне конфигурации и для перебора по кнопке. Оба варианта для динамического конфигурирования предпочитаемых эффектов.
 

kostyamat

★★★★✩✩✩
29 Окт 2019
763
241
@kDn, на счет подключения к лампе. На сколько мне изменяет память, в jeeUI есть возможность сделать так, что для подключения к лампе достаточно ввести в адресную строку браузера что-то типа LedLamp.local, а не вводить IP. Марселич (автор фреймворк) в каком то видосе показывал такое чудо, правда не останавливался специально на этом моменте. Можете попробовать внедрить?

Из скрытых возможностей, там вроде ещё есть проход сквозь NAT рутера наружу. Он когда-то приложуху делал (не доделал), которая его поделки из-вне цепляла. (Но это как бы и нафиг не надо).
 
Последнее редактирование:

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
@kostyamat, для днс нужно сервер добавлять, при этом он будет работать лишь в AP режиме, в режиме клиента за это отвечает роутер. Для выхода за NAT нужен внешний сервер (он использовал внешний MQTT), проброс портов или VPN - тоже не дело для железки. Собственно если вам это все нужно - используйте, не нужно - не используйте :)
---------
Кстати, по ресурсным файлам есть у меня идея, попробую сделать чуть позже.
 
Последнее редактирование:

kostyamat

★★★★✩✩✩
29 Окт 2019
763
241
для днс нужно сервер добавлять, при этом он будет работать лишь в AP режиме, в режиме клиента за это отвечает роутер.
Нууу... Не совсем так, точнее совсем не так, есть же mDNS
http://www.martyncurrey.com/esp8266...n-esp8266-with-unknown-ip-address-using-mdns/

Есть несколько нюансов, mDNS не активирован по умолчанию в Андроид. Но это решаемо, - на той же странице в комментариях
http://www.martyncurrey.com/esp8266...-unknown-ip-address-using-mdns/#comment-21730

Ну или просто сканер, с открытым кодом и без рекламы
https://play.google.com/store/apps/details?id=info.donotsavemy.networkservicediscovery
 
Последнее редактирование:

kostyamat

★★★★✩✩✩
29 Окт 2019
763
241
Знаю, но вопрос сейчас не об этом. Мультикаст ДНС (mDNS) работает несколько по другому. И работает как в режиме АР, так и клиента. И рутер тут не причем, и hosts тем более.
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
Знаю, но вопрос сейчас не об этом. Мультикаст ДНС (mDNS) работает несколько по другому. И работает как в режиме АР, так и клиента.
А правка таблиц роутера работает без необходимости всего этого, при этом и место единое. Я не понимаю целесообразности и выигрыша. Вот у вас 3 лампы и каждая вещает мультикастом, а еще роутер, а еще корневые сервера, а еще забитые гвоздями сопоставления в hosts и начинается веселуха в попытках понять что и чем резолвится :)
 

kostyamat

★★★★✩✩✩
29 Окт 2019
763
241
Во первых это красиво :)
У дальше сами знаете: 99% повторивших - новички, из них процентов 40 те, кого в тупик ставит сам факт "войдите по IP лампы, который ей присвоел рутер", ещё 40% считающих сябя "всі розуми поївшими" і начинают свистопляски, потом с жалобами в форум - не работает, хелп! И наверное только лишь 10% которые вообще поймут то, о чем вы написали выше - сопоставления в hosts, корневые сервера и вот это вот все. И наверное только лишь несколько процентов пользуются этим всем в домашних условиях, как и делают вторую/третью лампы.

Итого: ваше право, прислушаться или нет, но думаю стоит сделать отключаемую в вебморде функцию mDNS (и кажется стоит ее активировать по дефолту).
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
@kostyamat, при наличие 2+ ламп будет либо конфликт, либо нужно завязываться на ID, либо городить доп. настройки в прошивке или интерфейсе. Все эти действия ради "красиво" не считаю целесообразным, особенно в виду того, что все это можно решить иными способами.
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
+ Эффект "Матрица"
* Оптимизирован размер сохранения настроек эффектов
* Небольшое изменение для эффекта "Цвета"

-------------
+ Снегопад
+ Метель, Звездопад (половина шкалы - одно, вторая половина - другое)

-------------
+ Светлячки
+ Светлячки со шлейфом
+ Пейнтбол
 
Последнее редактирование:
  • Лойс +1
Реакции: kostyamat, Belokota и Imac

Сотнег

★★★★★✩✩
15 Янв 2020
923
476
+ Эффект "Радуга 2D" - объединяет в себе горизонтальную, диагональную и вертикальную
Баг нашёлся...
i * myLamp.effects.getScale()%170
работает как:
( i * myLamp.effects.getScale() ) % 170
а задумка была:
i * ( myLamp.effects.getScale() % 170 )
 
  • Лойс +1
Реакции: genav и kDn

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
@Сотнег, спасибо, поправил. Точнее там вообще остаток от деления на 86 должен быть, т.к. используется только треть шкалы.
Ну и заодно поправил ряд багов, к примеру с сохранением настроек эффектов, с фейдером и т.д.
 

Сотнег

★★★★★✩✩
15 Янв 2020
923
476
@kDn, 86 не советую.
для 171 вместо единицы останется 85.
Лучше верни 170. Оно правильное.
Ну или 85.
 

Сотнег

★★★★★✩✩
15 Янв 2020
923
476
@kDn,
% 170 - хорошо
% 85 - не очень (бегунок на 255 превратится в ноль)
% 86 - совсем плохо (171=85, 172=0, 173=1)
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
@Сотнег, я знаю как работает модуль, а также естественно проверил работу на крайних точках. Можете поглядеть светлячки со шлейфом и увидеть там масштабирование в 1...255 с коррекцией на вещестыенные операции. Ваше вчерашнее замечание о порядке операций верное, хоть и не критичное, но сейчас все работает именно так, как задумывалось :). Здесь для радуги шкала делится на три диапазона.
 

kDn

★★★★★★✩
18 Ноя 2019
1,151
704
Исправления для работы кнопки. Внимание - правки в библиотеке и фреймворке.

Библиотека кнопки обновлена до 3.4, спасибо Palpalych за сообщение об использовании старой версии и подправлена под требования проекта (сброс нажатий при удерживании). Во фреймворке дефайн кнопки изменен да __BUTTON и добавлена возможность отключать обработку за счет комментирования.

Логика работы кнопки предполагается такая:
1. Таймаут между нажатиями когда они считаются последовательностью - 0.5 секунды (определяется дефайном)
2. Таймаут удержания кнопки зажатой чтобы стало считаться, что она удерживается - 0.5 секунды (определяется дефайном)
3. Период для удержания - 75 мс, чем ниже число тем быстрее будет меняться яркость/скорость/масштаб при удержании (определяется дефайном)
4. По умолчанию сейчас настроено на механическую кнопку, при использовании сенсорной - измените подтяжку
5. Логика удрежаний: даблклик+удержание => масштаб, клик+удержание => скорость, удержание => яркость или же реверс предыдущего регулирования масштаб/скорость/яркость, если с последней регулировки прошло менее 3 секунд (определяется дефайном)
Все удержания кнопки работают с реверсом по отпусканию или приходу к границе диапазона 1 или 255

Из реализованного на данный момент для кнопки:

* Из выключенного состояния:
- Даблклик - запуск режима ДЕМО
- Удержание - включение "Белой лампы" на полную яркость, при удержании - уменьшение яркости до нужного значения
- Клик - включение на последнем сохраненном режиме

* Из включенного состояния:
- Удержание, клик-удержание, даблклик-удержание - регулировки яркости, скорости, масштаба
- Клик - выключение
- Дабл-клик - следующий эффект
- Трипл-клик - предыдущий эффект

Остальные комбинации и возможно "переназначение" будет доступно позже.
 

abogatyrev80

✩✩✩✩✩✩✩
3 Мар 2020
20
1
Уважаемые разработчики, спасибо за то что вы делаете! Может есть смысл подумать о том что бы для Esp32 прикрутить сервер MQTT? Или ресурсов не хватит? И еще идея возможно интересная, что если сделать эту лампу как сервер умного дома с микрофоном и может со звуковым каналом, где запросы и действия могли бы сопровождаться анимацией смайликов (в случае когда лампа собрана в плоской форме) было бы круто.
Я не сильно понял как подключиться к esp32 когда запускаешь 1-й раз, какое называние сети и где можно изменить имя? Этот вопрос возник поскольку в моей сети уже есть устройство на Ganner47, и по этому я сейчас не пойму "что против чего?" )))) и кажется сейчас они конфликтуют... когда я подключаюсь к SSD: JeeUI2-240AC4322DE9 плата перезагружается моргая синим диодом... похоже еще нужно изменить адрес сервера?
 
Последнее редактирование: