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
206
ЗДЕСЬ ОБСУЖДАЕМ ТОЛЬКО ДАННУЮ ПРОШИВКУ
ВСЕ ЧТО НЕ ПО СИЯ ТЕМЕ И ПРОШИВКЕ, ВСЕ СНОСИТСЯ НА@@@!

Очень просим не делать репост "ЦИТИРОВАНИЕ" сообщений! Делать только в КРАЙНЕЙ необходимости, удаляя лишний текст (у нас не ЧАТ)!
Иначе опять будет 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, проблема с загрузкой скетча
Читайте (ЧИТАЙТЕ! Не пишите!) эти темы, там уже есть решение вашей проблемы.
Здесь подобные вопросы считаются оффтопом и молча удаляются, а авторы получают баллы нарушений.
 
Изменено:

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Сотнег, Посмотрел твою реализацию и сразу нашел у нас 2 ошибки ))) Как говорится, кодеры думают одинаково, но - одна голова хорошо, а две лучше! :)

Скину код - счас ваще ништяк буде!

C-like:
// ------------- огонь -----------------
uint8_t line[WIDTH];
uint8_t pcnt = 0U;
uint8_t shiftMask = 16U;                                // смещение +1 стэк
uint8_t shiftBase[HEIGHT];                              // массив дороожки горизонтального смещения пламени (hueMask)

//these values are substracetd from the generated values to give a shape to the animation
static const uint8_t valueMask[8][16] PROGMEM =
{
  {0  , 0  , 0  , 32 , 32 , 0  , 0  , 0  , 0  , 0  , 0  , 32 , 32 , 0  , 0  , 0  },
  {0  , 0  , 0  , 64 , 64 , 0  , 0  , 0  , 0  , 0  , 0  , 64 , 64 , 0  , 0  , 0  },
  {0  , 0  , 32 , 96 , 96 , 32 , 0  , 0  , 0  , 0  , 32 , 96 , 96 , 32 , 0  , 0  },
  {0  , 32 , 64 , 128, 128, 64 , 32 , 0  , 0  , 32 , 64 , 128, 128, 64 , 32 , 0  },
  {32 , 64 , 96 , 160, 160, 96 , 64 , 32 , 32 , 64 , 96 , 160, 160, 96 , 64 , 32 },
  {64 , 96 , 128, 192, 192, 128, 96 , 64 , 64 , 96 , 128, 192, 192, 128, 96 , 64 },
  {96 , 128, 160, 255, 255, 160, 128, 96 , 96 , 128, 160, 255, 255, 160, 128, 96 },
  {128, 160, 192, 255, 255, 192, 160, 128, 128, 160, 192, 255, 255, 192, 160, 128}
};

//these are the hues for the fire,
//should be between 0 (red) to about 25 (yellow)
static const uint8_t hueMask[8][16] PROGMEM =
{
  {25, 22, 11, 1 , 1 , 11, 19, 25, 25, 22, 11, 1 , 1 , 11, 19, 25 },
  {25, 19, 8 , 1 , 1 , 8 , 13, 19, 25, 19, 8 , 1 , 1 , 8 , 13, 19 },
  {19, 16, 8 , 1 , 1 , 8 , 13, 16, 19, 16, 8 , 1 , 1 , 8 , 13, 16 },
  {13, 13, 5 , 1 , 1 , 5 , 11, 13, 13, 13, 5 , 1 , 1 , 5 , 11, 13 },
  {11, 11, 5 , 1 , 1 , 5 , 11, 11, 11, 11, 5 , 1 , 1 , 5 , 11, 11 },
  {8 , 5 , 1 , 0 , 0 , 1 , 5 , 8 , 8 , 5 , 1 , 0 , 0 , 1 , 5 , 8  },
  {5 , 1 , 0 , 0 , 0 , 0 , 1 , 5 , 5 , 1 , 0 , 0 , 0 , 0 , 1 , 5  },
  {1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 0 , 0 , 0 , 0 , 0 , 0 , 1  }
};

void fireRoutine(char *isColored)                            // C - цветной огонь, остальное - белый
{
  if (loadingFlag) {
    loadingFlag = false;
    //FastLED.clear();
    generateLine();
    //memset(matrixValue, 0, sizeof(matrixValue)); без очистки
  }
  if (pcnt >= 30) {
    shiftUp();
    generateLine();
    pcnt = 0;
  }
  drawFrame(pcnt, (strcmp(isColored, "C") == 0));
  pcnt += 25;  // делитель кадров: задает скорость подъема пламени 25/100 = 1/4
}

// Randomly generate the next line (matrix row)
void generateLine() {
  for (uint8_t x = 0U; x < WIDTH; x++) {
    line[x] = random(64, 255);
  }
}

void shiftUp() {
  for (uint8_t y = HEIGHT - 1U; y > 0U; y--) {
    for (uint8_t x = 0U; x < WIDTH; x++) {
      uint8_t newX = x;
      if (x > 15U) newX = x % 16U;
      if (y > 7U) continue;
      matrixValue[y][newX] = matrixValue[y - 1U][newX];
    }
  }

  for (uint8_t x = 0U; x < WIDTH; x++) {
    uint8_t newX = x;
    if (x > 15U) newX = x % 16U;
    matrixValue[0U][newX] = line[newX];
  }
}

// draw a frame, interpolating between 2 "key frames"
// @param pcnt percentage of interpolation

void drawFrame(uint8_t pcnt, bool isColored) {
  int32_t nextv;
  //uint8_t shiftMask = shiftBase;

  //first row interpolates with the "next" line
  shiftMask = constrain (shiftMask + random(0U, 2U) - random(0U, 2U), 15U, 17U);  // высчитываем плавную дорожку смещения всполохов для строки
  shiftBase[0] = shiftMask;
  for (uint8_t x = 0U; x < WIDTH; x++) {
    uint8_t newX = x % 16;
    CRGB color = CHSV(
                   modes[EFF_FIRE].Scale * 2.57 + pgm_read_byte(&hueMask[0][(x + shiftMask) % 16U]),     // H - смещение всполохов
                   (modes[EFF_FIRE].Scale < 100) ? 255U : 0U,                                            // S - когда колесо масштаба =100 - белый огонь (экономим на 1 эффекте)
                   (uint8_t)(((100.0 - pcnt) * matrixValue[0][newX] + pcnt * line[newX]) / 100.0)        // V
                 );
    //leds[getPixelNumber(newX, 0)] = color;                                         // на форуме пишут что это ошибка - вместо newX должно быть x, иначе
    leds[getPixelNumber(x, 0)] = color;                                              // на матрицах шире 16 столбцов нижний правый угол неработает
  }

  //each row interpolates with the one before it
  for (uint8_t y = HEIGHT - 1U; y > 0U; y--) {
    shiftMask = shiftBase[y];
    shiftBase[y] = shiftBase[y - 1];
    if (y > 8U) {
      for (uint8_t _x = 0U; _x < WIDTH; _x++) {                                              // стираем строчку с искрами (очень не оптимально)
        drawPixelXY(_x, y, 0U);
      }
    }
    for (uint8_t x = 0U; x < WIDTH; x++) {
      uint8_t newX = x % 16U;
      if (y < 8U) {
        nextv =
          (((100.0 - pcnt) * matrixValue[y][newX]
            + pcnt * matrixValue[y - 1][newX]) / 100.0)
          - pgm_read_byte(&valueMask[y][newX]);

        CRGB color = CHSV(
                       modes[EFF_FIRE].Scale * 2.57 + pgm_read_byte(&hueMask[y][(newX + shiftMask) % 16U ]),     // H - смещение всполохов
                       (modes[EFF_FIRE].Scale < 100) ? 255U : 0U,                                                // S - когда колесо масштаба =100 - белый огонь (экономим на 1 эффекте)
                       (uint8_t)max(0, nextv)                                                                    // V
                     );
        leds[getPixelNumber(x, y)] = color;
      }
      else if (y == 8U && SPARKLES) {
        if (random(0, 20) == 0 && getPixColorXY(x, y - 1U) != 0U) drawPixelXY(x, y, getPixColorXY(x, y - 2U));
        else drawPixelXY(x, y, 0U);
      }
      else if (SPARKLES) {
        // старая версия для яркости
        newX = (random(0, 4)) ? x : (x + WIDTH + random(0U, 2U) - random(0U, 2U)) % WIDTH ;   // сместилась?
        if (getPixColorXY(x, y - 1U) > 0U) drawPixelXY(newX, y, getPixColorXY(x, y - 1U));    // рисуем искорку на ноовой строчке
      }
    }
  }
}
UPD + поправил алгоритм, теперь пламя колышется плавно и искорки стали более сочными и стали отклоняться. :cool:(y)
UPD ++
 
Изменено:

kostyamat

★★★★★★✩
29 Окт 2019
1,098
632
@Palpalych, а теперь все то же самое, плюс рандомные всплески по высоте пламени и всполохи/угасания по яркости - вообще как живой будет. Пожалуйста. ;)
 

Palpalych

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

sergeym11

★★✩✩✩✩✩
23 Янв 2020
90
51
@mason, Схема MOSFET.jpg
Проверено работает. Если не ставить оптрон, то выхода 3,3 в не хватает для правильной работы мосфета в отличии от 5-ти вольтовой логики Ардуино. Либо нужно подбирать другой мосфет, который будет уверенно отрабатывать при управляющем уровне 3,3В. Схема с этого форума, напомню чья.
 
  • Лойс +1
Реакции: ssp1971 и mason

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@Palpalych, Если уж исправлять весь алгоритм, тогда стоит избавиться от половины маски.
Она на 16 пикселей нарисована, но два раза повторяется одинаково.

Я, кстати, по коду не смог понять, что теперь происходит.
 

renby

★✩✩✩✩✩✩
5 Янв 2020
58
11
@Сотнег, Посмотрел твою реализацию и сразу нашел у нас 2 ошибки ))) Как говорится, кодеры думают одинаково, но - одна голова хорошо, а две лучше! :)

Скину код - счас ваще ништяк буде!




UPD + поправил алгоритм, теперь пламя колышется плавно и искорки стали более сочными и стали отклоняться. :cool:(y)
UPD ++
Нижний ряд мельтешит как то очень... всю картину портит.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@renby, Попробуй восстановить эту строчку
C-like:
  pcnt += 30;  // делитель кадров: задает скорость подъема пламени 25/100 = 1/4
----------------------
line[x] = random(127, 255); // заполнение случайным образом нижней линии (127, 255) - менее контрастное, (64, 255) - оригинал
 
Изменено:

Vladimir_st

✩✩✩✩✩✩✩
20 Окт 2019
38
8
Смотрите как классно смотрится прошивка с часами :)
Специально для модера! Это прошивка Гуннера!
 

Вложения

renby

★✩✩✩✩✩✩
5 Янв 2020
58
11
@renby, Попробуй восстановить эту строчку
C-like:
  pcnt += 30;  // делитель кадров: задает скорость подъема пламени 25/100 = 1/4
----------------------
line[x] = random(127, 255); // заполнение случайным образом нижней линии (127, 255) - менее контрастное, (64, 255) - оригинал
Тут, мне кажется, дело не в контрастности а в мерцании. Светики на какое то время тухнут и из за этого нет реалистичности. Настоящий огонь не тухнет... Нужно чтобы первый ряд работал примерно как второй.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Vladimir_st, Прошивка от Гайвера?

Попробуй так
C-like:
void fireRoutine(bool somevar)                             // для прошивки Гайвера
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@renby, мерцание задается параметрами. Первая строчка как раз показывает как часть будет мерцать нижняя строка (на 2,3,4... кадр) вторая строка в примере - как сильно она будет мерцать. Остальное это уже математика на основании первой строки.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Vladimir_st, @Palpalych, да уж.
Заменить тип параметра в основной функции вызова эффекта - это было смело...
Так и задумывалось в моей версии прошивки. Вообще передача строки наиболее простой вариант передачи множества параметров за один раз, правда парсить нужно будет. Но в будущем это потребуется. Но вводить признак ради разделения белый или цветной огонь - это действительно было весьма оригинальным и странным решением :) .

Короче по итогу - не достаточно лишь поправить параметр, надо еще поправить место, где он передается, иначе будет ошибка приведения типов.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@kDn, вроде ведь, вызов функции происходит каждый кадр.
Нагружать процессор обработкой параметров из строчных переменных - это как-то странновато для такого места в коде.
 
Изменено:

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@kDn, вроде ведь, вызов функции происходит каждый кадр.
Нагружать процессор парсингом параметров из строчных переменных - это как-то странновато для такого места в коде.
Ну ведь парсинг парсингу рознь))), в данном конкретном случае анализируется лишь первый символ. Это одна проверка, ничуть не медленней передачи с булевым параметром.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@kDn, Облегчил тебе работу с перевернутым текстом - сделал установки отзеркаливания матрицы! Та будет проще, логичнее и быстрее )))
В принципе да, половину проблемы это решает. Т.е. отзеркаливание реализуется, но необходимо также менять направление скроллинга справа-налево и наоборот. Чтобы понять что именно происходит, вы можете поставить зеркало перед лампой и глядеть в отражение :)
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@kDn, Точно не знаю, но медленнее в разы, я думаю.
Не знаете точно - всегда есть возможность замерить. Запускаете таймер, прогоняете 1000 циклов, смотрите разницу времени и делите на 1000. Повторяете те же измерения для другого варианта.

После результатов измерений - делитесь новыми полученными знаниями, если они отличаются от моих утверждений. :)

По итогу вы будете точно знать и быть абсолютно уверены в своих словах.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@kDn, Я абсолютно уверен в своих словах, что медленнее.
Я не уверен, во сколько раз (в разы / в десятки раз / в сотни раз).
Замерять смысла нет.
Screenshot_2020-02-15-17-33-36-265_com.android.chrome.png
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Сотнег, а... ну тогда все понятно. Будете готовы вести конструктивную беседу - рад буду помочь.
На глупости тратить время возможности нет.
 

Vladimir_st

✩✩✩✩✩✩✩
20 Окт 2019
38
8
Эффект огонь выглядит заторможенным!? в чем может быть причина?
 

junk

✩✩✩✩✩✩✩
28 Дек 2019
1
0
Все работает прекрасно, но есть одна проблема, если в приложение активно двигать ползунки яркости, масштаба, скорости то лампа ломается, перестает реагировать на любые настройки и горит в том же режиме, отключение от питания на 5-7 минут снова приводит в чувство. кто сталкивался с таким ? как чинить? дело в прошивке или чем-то другом?