Огненная лампа v2

Overview

GyverLamp2

Logo

Особенности beta версии

  • Пока что не реализован только рассвет, всё остальное работает

Отличия от первой версии GyverLamp:

  • Возможность объединять устройства в группы с синхронизированными эффектами и их автоматическим переключением
  • Возможность создать свой список режимов для каждой группы устройств
  • Конструктор режимов, позволяющий получить несколько сотен уникальных эффектов
  • Минимум настроек в прошивке, всё настраивается из приложения
  • Гибкие настройки сети, позволяющие на лету менять точки подключения, адресацию и роли
  • Светомузыка - реакция на звук может быть наложена на любой эффект несколькими способами
  • Адаптивная яркость благодаря датчику освещённости
  • Режим работы по расписанию и таймер выключения для группы устройств
  • Мультиязычное приложение со встроенными инструкциями и подсказками
  • Простая и удобная загрузка прошивки (скомпилированный файл), прошивка возможна даже со смартфона!
  • Обновление прошивки «по воздуху» из приложения (требуется подключение к Интернет)
  • Схема как у первой версии, перепаивать электронику не нужно (без учёта микрофона и датчика освещённости)
  • Автоматическое определение типа кнопки
  • Устройство может работать без кнопки, все важные настройки можно сделать с приложения

Сеть:

  • Работа в локальной сети роутера (все устройства подключаются к роутеру)
  • Работа в локальной сети одной лампы (все устройства подключаются к одной лампе)

Время:

  • Устройства подключаются к Интернету через роутер и запрашивают текущее время
  • Работа по расписанию: час включения и час выключения
  • Таймер выключения
  • Будильник-рассвет на каждый день недели

Тип устройства:

  • GyverLamp2 может работать как с лентами, так и с матрицами различной конструкции

Адресация:

  • Объединение устройств в группы с индивидуальным набором настроек и режимов
  • Роли Master и Slave: состояние и яркость Slave устройств подчиняется Master устройству при ручном управлении

Режимы:

  • Каждой группе может быть задан свой набор режимов работы
  • Режим представляет собой эффект и его настройки (сам эффект, реакция на звук, яркость, скорость и т.д.)
  • Ручное переключение режимов кнопкой или из приложения (для всех устройств в группе)
  • Автоматическое по порядку с установленным периодом (для всех устройств в группе)
  • Автоматическое в случайном порядке с установленным периодом (для всех устройств в группе)
  • Режимы синхронизированы: все устройства группы показывают один и тот же режим в любой момент времени

Эффекты:

  • 7 базовых эффектов, у каждого есть индивидуальные настройки
  • У некоторых эффектов возможен выбор цветовой палитры из 25 доступных
  • Эффекты синхронизированы у всех устройств в группе

Реакция на звук:

  • При подключении микрофона все режимы могут работать как светомузыка
  • Реакция на общую громкость, отдельно низкие и отдельно высокие частоты
  • Реакция на звук может менять яркость режима, а также некоторые настройки эффекта

Автоматическая яркость:

  • Есть возможность подключить датчик освещённости для автоматической настройки яркости лампы

Будильник-рассвет:

  • Подключенная к роутеру группа может будить в установленное время плавным рассветом
  • Можно настроить время конкретные дни недели, а также яркость рассвета
Comments
  • Версионирование

    Версионирование

    Было бы не плохо со второго раза уже нормально помечать версии git тегами, а не подпапками типо firmware/x.y.z. У способа с подпапками одни минусы, никто так не работает. Главный из которых - сложно нормально отследить diff между ревизиями прошивки. Потенциальные сложности при мердже пулл реквестов. Зачем так делать вообще? Еще и второй раз подряд те же грабли.

    opened by Nalorokk 8
  • Returned the parameters of the matrix (CONNECTION_ANGLE and STRIP_DIRECTION)

    Returned the parameters of the matrix (CONNECTION_ANGLE and STRIP_DIRECTION)

    Привет. Так как в группе нашлись ребята с перевёрнутыми матрицами которые вряд ли будут их переворачивать под "стандартные параметры" в прошивке, то я вернул эти параметры в прошивку и подбил их под текущие реалии в коде (по факту почти ничего не изменилось, разве что HEIGHT пропала и вместо неё теперь ширина матрицы)

    Если будет возможность вынести эти параметры в приложение (в чём я на самом деле сомневаюсь), то было бы просто волшебно. Спасибо

    opened by Xoma163 3
  • Integrate with PlatformIO

    Integrate with PlatformIO

    Добавил интеграцию с PlatformIO, чтобы можно было разрабатывать внутри VSCode.

    Пути в ФС не поменялись, поэтому инструкции можно не менять.

    Тест:

    > pio run --target upload
    ...
    Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
    RAM:   [=====     ]  54.7% (used 44780 bytes from 81920 bytes)
    Flash: [===       ]  31.0% (used 324104 bytes from 1044464 bytes)
    Creating BIN file ".pio/build/esp8266/firmware.bin" using "/Users/vahron/.platformio/packages/framework-arduinoespressif8266/bootloaders/eboot/eboot.elf" and ".pio/build/esp8266/firmware.elf"
    Configuring upload protocol...
    AVAILABLE: espota, esptool
    CURRENT: upload_protocol = esptool
    Looking for upload port...
    Auto-detected: /dev/cu.usbserial-1420
    Uploading .pio/build/esp8266/firmware.bin
    esptool.py v3.0
    Serial port /dev/cu.usbserial-1420
    Connecting....
    Chip is ESP8266EX
    Features: WiFi
    Crystal is 26MHz
    Uploading stub...
    Running stub...
    Stub running...
    Changing baud rate to 460800
    Changed.
    Configuring flash size...
    Compressed 328256 bytes to 239220...
    Wrote 328256 bytes (239220 compressed) at 0x00000000 in 5.9 seconds (effective 443.3 kbit/s)...
    Hash of data verified.
    
    Leaving...
    Hard resetting via RTS pin...
    ===================== [SUCCESS] Took 15.79 seconds =====================
    
    opened by vahron 1
  • Update httpupdate api

    Update httpupdate api

    Пофиксил сборку под линукс (а так же под все регистрозависимые файловые системы) для platformio установил скорость порта 115200 для монитора. В новой версии библиотеки ESPhttpUpdate выпилили устаревшее api, перевел на новое.

    opened by nikalexey 0
  • [platformio] Align configs with Arduino IDE

    [platformio] Align configs with Arduino IDE

    • Установил те же настройки, что и в Arduino IDE
    • Добавил конфигурации для запуска: release, debug, wireless
    • DEBUG_SERIAL конфилктовал с esp.cpp, переименовал в DEBUG_SERIAL_LAMP

    Тест

    > pio run 
    Retrieving maximum program size .pio/build/debug/firmware.elf
    Checking size .pio/build/debug/firmware.elf
    Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
    RAM:   [======    ]  55.4% (used 45400 bytes from 81920 bytes)
    Flash: [===       ]  32.8% (used 342364 bytes from 1044464 bytes)
    ================================================================================= [SUCCESS] Took 2.31 seconds =================================================================================
    
    Environment    Status    Duration
    -------------  --------  ------------
    debug          SUCCESS   00:00:02.312
    ================================================================================= 1 succeeded in 00:00:02.312 =================================================================================
    
    opened by vahron 0
  • Home Assistant integrations

    Home Assistant integrations

    GyverLamp - очень крутой проект, от простого создания красивой обстановки превратился уже в необходимость. Но было бы еще круче интегрировать это хоть как-то с home assistant. Это планируется в будущем? Или уже сейчас есть возможность подключить хотя-бы включение-выключение (у меня будильник (sleep as android) интегрирован с hass)?

    opened by rkakrik 6
  • Не воспринимает пароли к WiFi с запятой

    Не воспринимает пароли к WiFi с запятой

    Токенайзер бьёт по запятой и заменяет её на '\0', нужно как-то эскейпить её на стороне приложения и восстанавливать в прошивке.

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

    GL,0,10,gaz,pass,with,comma,5,18,50,34
    

    и части with и comma интерпретируются как части другой команды.

    Вариант решения такой, что бы не заморачиваться с экранированием, свести команду к:

    GL,0,10,SSID_SIZE,SSID,PASS_SIZE,PASS_WITH_ANY_SYMBOLS,5,18,50,34
    

    Процессинг возможен такой:

    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdint>
    
    int main()
    {
        const char *s = "GL,0,10,3,gaz,15,pass,with,comma,5,18,50,34";
        char buf[256]{};
        char data[256]{};
        
        memcpy(buf, s, strlen(s));
        
        int count = 0;
        char *str, *p = buf;
        char *ssid, *pass;
        
        while ((str = strtok_r(p, ",", &p))) {
            uint32_t thisInt = (uint32_t)atoi(str);
            data[count++] = char(thisInt);
            
            //std::cout << str << "\n  -> " << p << '\n';
            
            if (data[1] == 0) {
                if (count == 4) {
                    if (strlen(p) >= thisInt) {
                        ssid = p;
                        ssid[thisInt] = '\0';
                        p += thisInt + 1;
                    }
                }
                
                if (count == 5) {
                    if (strlen(p) >= thisInt) {
                        pass = p;
                        pass[thisInt] = '\0';
                        p += thisInt + 1;
                    }
                }
            }
        }
        std::cout << "ssid: " << ssid << ", pass: " << pass << '\n';    
    }
    
    opened by h4tr3d 2
  • Перевод WiFi в 'local' режим

    Перевод WiFi в 'local' режим

    Добрый день!

    У меня есть лампа состоящая из NodeMCU, сенсорной кнопки, и матрицы 16х16. Я обновил ее с первой версии (немного измененной) на V2 и столкнулся с тем, что не могу подключить ее к своему домашнему WiFi, действуя, по инструкции :) Весь остальной функционал, по-моему, работает. Например, лампой можно управлять через приложение (включать/выключать/менять эффекты) и используя сенсорную кнопку.

    Наблюдая за лампой через Serial Monitor я вижу, что она получает команду при попытке задать пароль к WiFi через приложение и изменить режим, при этом, судя по логу перезагрузка не происходит (даже, если выбрать Сервис->Перезагрузить)

    Добавив в разных местах дополнительных DEBUG и DEBUGLN я заметил следующее:

    • При перезагрузке лампы с зажатой кнопкой, отпускание никак не регистрируется вне зависимости от того, при каком значении count (внутри checkButton()) перестать ее держать. Может дело в самой кнопке?
    • Если принудительно заставить лампу загрузиться в локальный режим, например, заменив блок if\else в startWiFi() на setupLocal() появляется "WIFI not configured", потому что cfg.ssid и cfg.pass не заданы.

    Единственный вариант заставить лампу подключиться к моей сети - принудительно забить пароль в прошивку (в структуре Config).

    Есть ли какие-нибудь мысли по поводу того, как это исправить, чтобы не держать пароль в прошивке?

    Спасибо!

    opened by Glober777 10
  • .ino -> .h/.cpp переход

    .ino -> .h/.cpp переход

    Привет команда, как насчет перевода .ino файлов в стандартные .h/.cpp файлы? Сейчас билд работает, но выводит тонны ошибок из-за того, что .ino файлы конвертируются на лету.

    Предлагаю перевести все файлы кроме главного GyverLamp2.ino. Система сборки через PlatformIO не будет ругаться. При этом ArduinoIDE по-прежнему будет работать, открываться по клику на gyverlamp2.ino и показывать весь код прошивки.

    vahron-mbp:PlatformIO vahron$ pio check
    Checking debug > cppcheck (platform: espressif8266; board: d1_mini; framework: arduino)
    -----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/startup.ino:59: [high:error] Condition 'flag' is always false [knownConditionTrueFalse]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:84: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:85: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:86: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:87: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:88: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:89: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:90: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:91: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:92: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:93: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:94: [low:style] Variable 'packet' is assigned a value that is never used. [unreadVariable]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/eeprom.ino:6: [low:style] The function 'EE_startup' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/button.ino:3: [low:style] The function 'button' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/analog.ino:116: [low:style] The function 'checkAnalog' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/startup.ino:1: [low:style] The function 'checkButton' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/eeprom.ino:47: [low:style] The function 'checkEEupdate' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/startup.ino:37: [low:style] The function 'checkGroup' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/analog.ino:117: [low:style] The function 'checkMusic' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/analog.ino:118: [low:style] The function 'checkPhot' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/startup.ino:165: [low:style] The function 'checkUpdate' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/effects.ino:1: [low:style] The function 'effectsRoutine' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/parsing.ino:1: [low:style] The function 'parsing' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/presetManager.ino:1: [low:style] The function 'presetRotation' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/analog.ino:115: [low:style] The function 'setupADC' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:1: [low:style] The function 'setupTime' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/startup.ino:76: [low:style] The function 'showRGB' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/startup.ino:69: [low:style] The function 'startStrip' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/startup.ino:85: [low:style] The function 'startWiFi' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/time.ino:16: [low:style] The function 'timeTicker' is never used. [unusedFunction]
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2/startup.ino:181: [low:style] The function 'tryReconnect' is never used. [unusedFunction]
    Error: cppcheck failed to perform check! Please examine tool output in verbose mode.
    ================================================================================= [FAILED] Took 8.32 seconds =================================================================================
    
    Component                                           HIGH    MEDIUM    LOW
    -------------------------------------------------  ------  --------  -----
    /Users/vahron/self/GyverLamp2/firmware/GyverLamp2    1        0       30
    
    Total                                                1        0       30
    
    Environment    Tool      Status    Duration
    -------------  --------  --------  ------------
    release        cppcheck  IGNORED
    debug          cppcheck  FAILED    00:00:08.316
    wireless       cppcheck  IGNORED
    ============================================================================ 1 failed, 0 succeeded in 00:00:08.316 ============================================================================
    vahron-mbp:PlatformIO vahron$
    
    opened by vahron 1
Owner
Alex
Инженер, изобретатель, ардуинщик, блогер, любитель котиков
Alex