Code Monkey home page Code Monkey logo

gyverlamp2's Introduction

GyverLamp2

Logo

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

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

Сеть:

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

Время:

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

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

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

Адресация:

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

Режимы:

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

Эффекты:

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

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

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

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

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

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

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

gyverlamp2's People

Contributors

alexgyver avatar nikalexey avatar vahron avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

gyverlamp2's Issues

Compile error on Linux

TimeRandom.h -> timeRandom.h
#include "timeRandom.h" // случайные числа по времени

Проноз погоды

Добрый день, в скетче в разделе TODO сказано про погоду, и уже давно...
а что с ней хотите сделать?

iOS

Alex, привет!
подскажи, а для apple не планируешь приложуху?)

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

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

.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$

Старт лампы

Доброго времени суток. Помогите разобраться, пожалуйста! Проблема такая, что лампа с подключенным управляющим проводом не стартует. Загораются первые два диода, всегда белым и зелёным цветом, и больше ничего не происходит. В мониторе порта тоже ничего. При этом лента потребляет около 0.4А. Если его отключть и подать питание на модуль, то он стартует и, после подключения упр. провода всё работает. Но! Первый светодиод всегда мигает красным цветом, даже в режиме "Цвет". В режиме "Часы" бегут пятна, издалека напоминающие силуэты цифр. Остальное, плюс-минус работает. Если лампу выключить из приложения, то первый светодиод горит постоянно красным цветом. После снятия питания нужно снова отключать управляющий провод, чтобы плата запустилась. Плата Wemos D1 mini, пробовал две разные платы, две разные ленты, менял номинал резистора на упр. проводе, разные блоки питания, напряжение питания от 3.3в до 5.2в , вешал конденсатор на питание, при прошивке указывал как LOLIN D1R2, так и Generic ESP32. Результат всегда один. В общем, мысли у меня закончились. Помогите, плз!!!

Не воспринимает пароли к 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';    
}

Перевод 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).

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

Спасибо!

update code

Обновите пожалуйста исходники.
У Вас выложены 0.2.0 а по ОТА прилетает 0.22b

Спасибо))

Home Assistant integrations

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.