ESP, IoT WiFi лампа-будильник. Обсуждение прошивки от GUNNER47

ЗДЕСЬ ОБСУЖДАЕМ ТОЛЬКО ДАННУЮ ПРОШИВКУ
ВСЕ ЧТО НЕ ПО СИЯ ТЕМЕ И ПРОШИВКЕ, ВСЕ СНОСИТСЯ НА@@@!

Очень просим не делать репост "ЦИТИРОВАНИЕ" сообщений! Делать только в КРАЙНЕЙ необходимости, удаляя лишний текст (у нас не ЧАТ)!
Иначе опять будет 160 страниц и 0 пользы ....

Для ответа КОНКРЕТНОМУ пользователю, достаточно нажать " ОТВЕТ"

При описании проблемы обязательно, как можно подробнее, описывайте ход своих действий до ее возникновения. Телепатов (как я думаю) среди участников нет. Потом 20 постов будет только для того, чтобы Вас понять.
Если Вы считаете ваше сообщение важным и его нужно поднять в шапку, пишите мне в личку с пометкой "Сообщение в шапку"


ПО ВОПРОСАМ РАБОТЫ ПРИЛОЖЕНИЯ ОТ KOTEYKA ИДЕМ В ЭТУ ТЕМУ

Голосовое управление лампой Гайвера, через Яндекс Алису (прошивка Gunner47).

Яндекс диск Файл ПДФ. Актуально на 27.01.2020г
наш сервер НЕ ОБНОВЛЯЕТСЯ, от 27.01.2020г
Прошивка gunner47 v.2 "86 эффектов в 1" или уже больше - разработку ведет @Сотнег
Прошивка gunner47 v.2.X_web : веб-интерфейс (без необходимости перепрошивки) - разработку ведет @alvikskor
Прошивка от Shaitan с поддержкой mp3 и пульта (тут не обсуждается. Обсуждается в теме прошивки)
Прошивка FireLamp with Remote Control - разработку ведет @SlingMaster

Для тех у кого умный дом Home Assistant есть отличный компонент

ВНИМАНИЕ! Если у вас не компилируется или не загружается скетч - значит вы сделали что-то неправильно. Специально для вас созданы две темы:
ESP8266, проблема с компиляцией скетча
ESP8266, проблема с загрузкой скетча
Читайте (ЧИТАЙТЕ! Не пишите!) эти темы, там уже есть решение вашей проблемы.
Здесь подобные вопросы считаются оффтопом и молча удаляются, а авторы получают баллы нарушений.
 
Изменено:

Комментарии

mechanic

★★★★✩✩✩
Команда форума
31 Июл 2018
403
204
ЗДЕСЬ ОБСУЖДАЕМ ТОЛЬКО ДАННУЮ ПРОШИВКУ
ВСЕ ЧТО НЕ ПО СИЯ ТЕМЕ И ПРОШИВКЕ, ВСЕ СНОСИТСЯ НА@@@!

Очень просим не делать репост "ЦИТИРОВАНИЕ" сообщений! Делать только в КРАЙНЕЙ необходимости, удаляя лишний текст (у нас не ЧАТ)!
Иначе опять будет 160 страниц и 0 пользы ....

Для ответа КОНКРЕТНОМУ пользователю, достаточно нажать " ОТВЕТ"

При описании проблемы обязательно, как можно подробнее, описывайте ход своих действий до ее возникновения. Телепатов (как я думаю) среди участников нет. Потом 20 постов будет только для того, чтобы Вас понять.
Если Вы считаете ваше сообщение важным и его нужно поднять в шапку, пишите мне в личку с пометкой "Сообщение в шапку"


ПО ВОПРОСАМ РАБОТЫ ПРИЛОЖЕНИЯ ОТ KOTEYKA ИДЕМ В ЭТУ ТЕМУ

Голосовое управление лампой Гайвера, через Яндекс Алису (прошивка Gunner47).

Яндекс диск Файл ПДФ. Актуально на 27.01.2020г
наш сервер НЕ ОБНОВЛЯЕТСЯ, от 27.01.2020г
Прошивка gunner47 v.2 "86 эффектов в 1" или уже больше - разработку ведет @Сотнег
Прошивка gunner47 v.2.X_web : веб-интерфейс (без необходимости перепрошивки) - разработку ведет @alvikskor
Прошивка от Shaitan с поддержкой mp3 и пульта (тут не обсуждается. Обсуждается в теме прошивки)
Прошивка FireLamp with Remote Control - разработку ведет @SlingMaster

Для тех у кого умный дом Home Assistant есть отличный компонент

ВНИМАНИЕ! Если у вас не компилируется или не загружается скетч - значит вы сделали что-то неправильно. Специально для вас созданы две темы:
ESP8266, проблема с компиляцией скетча
ESP8266, проблема с загрузкой скетча
Читайте (ЧИТАЙТЕ! Не пишите!) эти темы, там уже есть решение вашей проблемы.
Здесь подобные вопросы считаются оффтопом и молча удаляются, а авторы получают баллы нарушений.
 
Изменено:

mjba

✩✩✩✩✩✩✩
26 Янв 2020
23
1
@Shaitan, Здравствуйте. Извините, я не особо программист, от слова совсем. Скажите, можно Вашу прошивку где нибудь целиком скачать?
 

Shaitan

★★★✩✩✩✩
17 Фев 2020
182
165
@Palpalych, в EepromManager.h порядок конечно нужен.

Пока идея такая, все одиночные значения вписать вначале. Далее оставить немного про запас.
Таблицу эффектов объединить с Таблицей избранное (на эффект 4 байта)
яркость, скорость, масштаб (по одному байту) и 1 байт (8 бит) по биту на разные дополнения.
0-й бит избранное
в связи с тем, что у меня после рассвета запускается режим избранное, то я бы выделил
например, после рассвета хорошо смотрятся облака и водопад
1-й бит запускать ли по окончанию рассвета
еще 6 бит под разные нужды.
Например, если в проект будет добавлен mp3 модуль, то можно добавить еще 1 байт
0 - без музыкально сопровождения
1-99 играть из папки
100 - играть и общей папки (общая будет настраиваться в звуковых настройках)
Огонь будет сопровождаться звуком костра и т.д.

тогда память eeprom будет выделяться без пустот

так же, если будет переписываться APK я бы навел порядок с будильниками
таблица:
2 байта - время и 1 байт дни недели (7 бит) и один бит - включать или нет звуковой сигнал
Можно ограничить 10-ю будильниками, больше точно не понадобится.

Если есть еще пожелания добавляй. Когда сформируется проект, перепишу EepromManager.h

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

t_igr

★★✩✩✩✩✩
19 Июл 2019
74
55
Для нетерпеливых прошивка на основе от gunner47 с добавлением некоторых новых эффектов,
обновленное android приложение со списком новых эффектов там же прилагается https://yadi.sk/d/5IhOtFFConjYPg
Отдельное спасибо за новые эффекты всем причастным!

30 эффектов:
------------
1 Конфетти
2 Огонь/Белый огонь(Масштаб=100)
3 Водопад
4 Радуга вертикальная
5 Радуга горизонтальная
6 Радуга диагональная
7 Смена цвета
8 Безумие 3D
9 Облака 3D
10 Лава 3D
11 Плазма 3D
12 Радуга 3D
13 Павлин 3D
14 Зебра 3D
15 Лес 3D
16 Океан 3D
17 Цвет
18 Снегопад
19 Метель
20 Звездопад
21 Матрица
22 Светлячки
23 Светлячки со шлейфом
24 Пейнтбол
25 Блуждающий кубик
26 Комета
27 Пульс
28 Матрица 2
29 Бассейн
30 Белый свет
----
Пароль Wifi: AP_PASS ("12345678")
Лимит по току: CURRENT_LIMIT(2000U)

Коэффициенты для верного расчета тока в библиотеке FastLed файл power_mgt.cpp:
static const uint8_t gRed_mW = 14.7 * 5; // 14.7mA @ 5v = 73.5mW
static const uint8_t gGreen_mW = 14.8 * 5; // 14.8mA @ 5v = 74mW
static const uint8_t gBlue_mW = 15 * 5; // 15mA @ 5v = 75mW
static const uint8_t gDark_mW = 1 * 5; // 1mA @ 5v = 5mW
----
Кнопка:
4-х кратный клик - Вывод времени на Матрицу
Два 6-ти кратных клика - Обновление по ОТА
Остальное как у gunner47
-----
Инвертирован бегунок скорости эффектов 1-7,15-30
Начальные параметры для всех эффектов:
Яркость = 50
Скорость = 225
Масштаб = 40
-----
Для эффекта "Смена цвета" бегунок масштаб не используется, значение всегда = 1
----
Высота, на которой бежит текст (от низа матрицы) = 4
Цвет букв по умолчанию красный (CRGB::Red)
 

nox1c

✩✩✩✩✩✩✩
19 Дек 2019
5
0
Всем привет, может кто подскажет в чем проблема, подружил лампу и Алису, но после этого лампа периодически стала самопроизвольно включаться, например ночью в 3 часа, когда уже все спят или днем, когда ее никто не трогает?

ПС настраивал лампу по инструкции в шапке
 

t_igr

★★✩✩✩✩✩
19 Июл 2019
74
55
@nox1c, я вижу так: происходит сбой с перезагрузкой платы, она заново запускается, стартует mqtt и с сервера mqtt на лампу приходит сохраненная там команда. А она там по состоянию должна быть включена и № эффекта еще как правило другой, а не последний использовавшийся.
Я лампу включенной не оставляю, но заметил при использовании mqtt стартует и переключается всегда на какой-то определенный эффект, а не на тот который был последним до отключения.
 
Изменено:
  • Лойс +1
Реакции: Burai и nox1c

nox1c

✩✩✩✩✩✩✩
19 Дек 2019
5
0
@nox1c, я вижу так: происходит сбой с перезагрузкой платы, она заново запускается, стартует mqtt и с сервера mqtt на лампу приходит сохраненная там команда. А оно там по состоянию должно быть включено и № эффекта еще как правило другой, а не последний использовавшийся.
Я лампу включенной не оставляю, но заметил при использовании mqtt стартует и переключается всегда на какой-то определенный эффект, а не на тот который был последним до отключения.
может можно как то отключить автоматическое включение после перезагрузки mqtt?
 

Shaitan

★★★✩✩✩✩
17 Фев 2020
182
165
@mjba, Выложил на https://nettips.ru/article/add_mp3_to_gyver_lamp.html версию от @t_igr с добавлением MP3. там же и обновленная LedLamp_31.apk c синхронизированными названиями и добавкой Громкость
подправь для себя только количество папок, которые будешь использовать в shaitan_var.h
#define count_mp3_folders (2U) // Количество папок 01 02 03

з.ы. @t_igr Спасибо за переработку.
 

Shaitan

★★★✩✩✩✩
17 Фев 2020
182
165
@t_igr,
предлагаю в файле EepromManager.h сдвинуть таблицу избранных эффектов на 30 дальше, тогда появится возможность добавить десяток эффектов
* 108-110 3 режим №30: яркость, скорость, масштаб (по одному байту)
...
* 138-140 3 режим №40: яркость, скорость, масштаб (по одному байту)
….
* 141-186 45 настройки режима избранных эффектов (вкл/выкл - 1 байт; интервал - 2 байта; разброс - 2 байта; инициализировать вкл/выкл - 1 байт; вкл/выкл каждого эффекта - 41 (MODE_AMOUNT) байт; вкл/выкл не хранится в EEPROM)
….
* 195 1 признак "кнопка разблокирована"
...
* Не используются адреса:
* 187-194 9

#define EEPROM_FAVORITES_START_ADDRESS (141U) // начальный адрес в EEPROM памяти для записи настроек режима избранных эффектов

А потом посмотрим.
 

t_igr

★★✩✩✩✩✩
19 Июл 2019
74
55
@Burai, файл runningText.ino, 16я строка
#define LETTER_COLOR (CRGB::Red) // цвет букв по умолчанию
 
  • Лойс +1
Реакции: Burai

kostyamat

★★★★★★✩
29 Окт 2019
1,098
631
Послушаете, а почему бы вместо дискретных переменных, в ЕЕПРОМ, не использовать структуры? Тогда например системные переменные пишем в начале, а каждому эффекту создаём запись, тоже в виде структуры. А для записи всего этого используем относительные адреса, а не абсолютные. Таким образом адрес первого эффекта в ЕЕПРОМ будет sizeof(system), а адрес второго sizeof(system)+sizeof(effect), N-ного соответственно sizeof(system) + sizeof (effect)*N.
Ну и из вышесказанного понятно, что структуру system пишем по адресу 0. Или выделяем фиксированное количество для системных переменных, к примеру
Таким образом, мы получаем возможности: а) оперативно вносить корректировки в структуру системных перименных; б) оперативно вносить изменения в структуру переменных эффекта; в) упаковки данных в нужное количество бит, к примеру bool один бит вместо байт (надо учесть подравнивание компилятором); г) после внесения корректировок просто понадобится заново проинициализировать память (типа форматирование), создав нужное количество записей структуры effect. И так, пока память не кончится.

EEPROM.put и get умеют писать структуры в EEPROM, по крайней мере у атмел точно, у ESP нужно смотреть, но и это не проблема, есть решение. Кстати, это же решение полностью заменяет все эти WriteUint16() и т.п. из EepromManager.h, эта штука может даже битмапы в еепром писать.

Я в одном своем коммерческом проекте такой способ применил, правда на внешнюю 24C256 (пришлось свои функции писать) пишу, но там и записей до 1000 (карты доступа и к ним куча доп.данных). Количество записей создаётся по мере надобности, изменяя одну константу. Хотя можно и динамично дописывать, но в моем случае количество карт достоверно известно.
При этом, я не создаю дубликаты структур карт в ОЗУ, а двигаю указатель по такой импровизированой БД в EEPROM. Вычитывая текущую запись в лишь одну структуру в ОЗУ. Не хило экономит память.

Пс. Углубился немного в код, как оказалось, структуры применяются, но EeepromManager.h таки написан немного костыльно (сразу видно, что хотелки добавляли потом). Ну и адреса применяются абсолютные (и снова на дефайнах, я их уже ненавижу!!!).

Итак, для начала, предлагаю к обсуждению изменения к Types.h
C++:
#pragma once


struct AlarmType
{
  byte day = 0;   // сюда записываем номер недели для алярмы, кто-то хочет по одному будильнику в день, а кому-то нужно несколько, но на тот же день недели, значения от 1-7, скажем 10 будильников хватит всем!
  // если к тому же принять, что day == 0 - алярма не активна, day == 8 - понедельник-пятница, day == 9 - все дни недели, то получится ооочень гибко.
// bool State = false; ?! если принять, что если day == 0 значит алярма не активна, то эта переменная не нужна.
  uint16_t Time = 0U;
  byte eff_id = 0; // сюда записываем идент эффекта, следующего за рассветом.
};

struct ModeType
{
  byte eff_id = 0;        // это позволит ввести понятие идента эффекта, по которому находим запись в ЕЕПРОМ.
  uint8_t Brightness = 50U;
  uint8_t Speed = 30U;
  uint8_t Scale = 40U;
};

typedef void (*SendCurrentDelegate)(char *outputBuffer);
typedef void (*ShowWarningDelegate)(CRGB color, uint32_t duration, uint16_t blinkHalfPeriod);
 
Изменено:
  • Лойс +1
Реакции: abogatyrev80

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kostyamat, подбираюсь потихоньку к еепром. кажется что нужно весь класс переписывать (((
 

kostyamat

★★★★★★✩
29 Окт 2019
1,098
631
@Palpalych, посмотрел библиотеку EEPROM для ESP8266, get\put в ней есть, может писать объекты и структуры. К чему эти извращения типа

C++:
  static void WriteUint16(uint16_t address, uint16_t val)
    {
      uint8_t* p = (uint8_t*)&val;
      EEPROM.write(address, *p);
      EEPROM.write(address + 1, *(p + 1));
      EEPROM.commit();
    }

    static int16_t ReadInt16(uint16_t address)
    {
      int16_t val;
      uint8_t* p = (uint8_t*)&val;
      *p        = EEPROM.read(address);
      *(p + 1)  = EEPROM.read(address + 1);
      return val;
    }

    static void WriteInt16(uint16_t address, int16_t val)
    {
      uint8_t* p = (uint8_t*)&val;
      EEPROM.write(address, *p);
      EEPROM.write(address + 1, *(p + 1));
      EEPROM.commit();  
    }

    static uint32_t ReadUint32(uint16_t address)
    {
      uint32_t val;
      uint8_t* p = (uint8_t*)&val;
      *p        = EEPROM.read(address);
      *(p + 1)  = EEPROM.read(address + 1);
      *(p + 2)  = EEPROM.read(address + 2);
      *(p + 3)  = EEPROM.read(address + 3);
      return val;
    }

    static void WriteUint32(uint16_t address, uint32_t val)
    {
      uint8_t* p = (uint8_t*)&val;
      EEPROM.write(address, *p);
      EEPROM.write(address + 1, *(p + 1));
      EEPROM.write(address + 2, *(p + 2));
      EEPROM.write(address + 3, *(p + 3));
      EEPROM.commit();
    }

    static int32_t ReadInt32(uint16_t address)
    {
      int32_t val;
      uint8_t* p = (uint8_t*)&val;
      *p        = EEPROM.read(address);
      *(p + 1)  = EEPROM.read(address + 1);
      *(p + 2)  = EEPROM.read(address + 2);
      *(p + 3)  = EEPROM.read(address + 3);
      return val;
    }

    static void WriteInt32(uint16_t address, int32_t val)
    {
      uint8_t* p = (uint8_t*)&val;
      EEPROM.write(address, *p);
      EEPROM.write(address + 1, *(p + 1));
      EEPROM.write(address + 2, *(p + 2));
      EEPROM.write(address + 3, *(p + 3));
      EEPROM.commit();  
    }
НЕ ПОНЯЛ?! Что это, зачем это?
Вот еще
C++:
  for (uint8_t i = 0; i < 7; i++)
        {
          EEPROM.write(EEPROM_ALARM_START_ADDRESS + EEPROM_ALARM_STRUCT_SIZE * i, alarms[i].State);
          WriteUint16(EEPROM_ALARM_START_ADDRESS + EEPROM_ALARM_STRUCT_SIZE * i + 1, alarms[i].Time);
          EEPROM.commit();
        }

Почему не вот так?!

for (uint8_t i = 0; i < 7; i++)
        {
          EEPROM.put(EEPROM_ALARM_START_ADDRESS + EEPROM_ALARM_STRUCT_SIZE * i, alarms[i]);
          EEPROM.commit();
        }
 
Изменено:

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kostyamat, Я тоже не понял ))) На вскидку, логика работы этого модуля - темный лес

К тому же, возникает необходимость написания системных эффектов (без сохранения параметров в еепром), а в данном хаосе ничего не разгрести.
 

kostyamat

★★★★★★✩
29 Окт 2019
1,098
631
На вскидку, логика работы этого модуля - темный лес
Я тоже об него сломался. :(
Я до этой лампы с ESP дела практически не имел. Думал - может специфика, поэтому в код вообще не лез. Да и код малопонятный сам по себе. Применяются практики, которые я вообще не понимаю. К тому же совершенно не структурированный, и подпертый со всех сторон, чтобы не шатался. (Не, я без претензий, понимаю, что хотелки писались потом, и так чтобы вообще не сломать, в том то и болезнь таких проектов, что без ТЗ, и общего разумения, что изначально хотим).
А тут залез и приболел немного от... скажем так - необоснованных решений. А от количества дефайнов, тонким и толстым слоем, размазанных по всем вкладкам, тошно становится. Вообще не понятно что из чего, и где это искать и как использовать.
 
Изменено:

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kostyamat, Я сейчас, так получается, перелопачиваю код... приходится все структурировать и разгребать. Даже не знаю, пригодятся ли мои страдания или нет, но переписывание коснулось практически всего. ((( Скоро дойду до eeproma. Там обломки, по всей видимости, от классической Ардуины.
Может поможешь перелопатить?... Все, что от него нужно - так это достаточное пространство для рабочих констант, и разумная организация списка. Думаю, нужно делать один глобальный список, а уже эффекты дергать из него в локальные/фаворитные списки.... Подозреваю, ФаворитМенеджер также пойдет под раздачу ((
 

kostyamat

★★★★★★✩
29 Окт 2019
1,098
631
@Palpalych, в чем смысл лопатить то, что худо-бедно работает, если общая суть-логика меняется не будет?
Только лишь для того, чтобы увеличить количество эффектов до 100? Зачем столько?
Лично меня напрягает WiFiManager, не нравится он мне, не стабилен он.
Может вам таки лучше с kDn продолжить сотрудничество? Хорошо ведь общались. Думаю, перейдя на новую платформу, он не потащит туда старую концепцию и костыли. С интересом жду беты.
Ну, или опишите концепцию, - что бы вы хотели конкретно от EepromManager?
 

vitus73

✩✩✩✩✩✩✩
19 Ноя 2019
31
4
@nox1c, Когда создаёшь правило на включение в домовенке ,там есть такой пункт "RETAIN" поставь в нем "нет". У меня после потери питания не включается.
 
  • Лойс +1
Реакции: t_igr и nox1c

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Может вам таки лучше с kDn продолжить сотрудничество? Хорошо ведь общались. Думаю, перейдя на новую платформу, он не потащит туда старую концепцию и костыли. С интересом жду беты.
А зачем ее ждать если она уже есть и работает? Я ведь ядро проекта уже подготовил, добавить остальное - дело техники. Но естественно никого уговаривать переходить не буду.

По состоянию на сейчас у меня чуть поломана работа с кнопкой. Точнее я не совсем врубаюсь как задумывалась обработка нажатий и комбинаций нажатий - но то такое, поправлю естественно. Все же сохранения настроек, правка интерфейса, добавление эффектов, правильные направление и масштабы эффектов и прочее - все это работает уже сейчас, изначально. Поскольку сразу было заложено в архитектуру проекта. Фреймворк я тоже переписал частично, чтобы он нормально работал. Код есть, открыт, как установить и запустить - описано. Правда люди которые проверяли и запускали почему-то предпочитают общаться в личке... Поэтому создается впечатление, что никто кроме меня не запускает. Это не так, работа проверена как на esp8266 так и на esp32.
 
  • Лойс +1
Реакции: kostyamat и Belokota

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kostyamat, нет, я уж допилю, раз взялся, пусть даже для своего интереса ))) фреймворки особо не люблю