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

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@Palpalych, если "строка" константная то можно читать ее с помощью memcpy_P и подобных в промежуточный буфер. Так будет уверенность, что все выравнено.
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kDn, похоже что компилятор не понимает такой конструкт и портит прошивку.
Как только массив с указателем попадает в прошивку, то контроллер даже не запускается. Вернее запускается с перезагрузкой и неустановленной скоростью по последовательному порту. (((
 

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
А кому Синусоид третий нужен, неглючный и быстрый, а?
C++:
// ***** SINUSOID3 / СИНУСОИД3 *****
// v1.0 - Updating for GuverLamp v1 by PalPalych 12.03.2020
// v1.1 - trig16 logic by kDn
// v1.2 - Full integer logic, + inverse rings, + dithering by PalPalych 12.04.2020
/*  Sinusoid3 by Stefan Petrick (mod by Palpalych for GyverLamp 27/02/2020)
    read more about the concept: https://www.youtube.com/watch?v=mubH-w_gwdA */

#define e_s3_BEATSINLOGIC (false) // логика beatsin8 = true / логика реального времени = false
#define e_s3_INVERSE (true)       // инвертирование колец
#define e_s3_DITHER (2U)       // разрешить дисперсию (0 - отключить; 2... - каждый n-кадр будет прорисовываться заново) Влияет на скорость!
const uint8_t _s3_xz = CENTERX * WIDTH_steps;
const uint8_t _s3_yz = CENTERY * HEIGHT_steps;

//static int16_t maxxx;
//static int16_t minxx;

bool sinusoid3Routine(uint8_t Scale = 8U, uint8_t Speed = 8U)
{
#if (e_s3_DITHER)
  if (eff_framecounter % e_s3_DITHER)
    return false;
#endif

  const uint8_t _s3_scale = map8(Scale, HEIGHT_steps, HEIGHT_steps << 2U); // speed of the movement along the Lissajous curves
#if e_s3_BEATSINLOGIC
  const uint8_t _s3_size = Speed >> 1U; // amplitude of the curves
#endif
  fillScreen(CRGB::Black);
  for (int16_t y = 0; y < HEIGHT; y++)
  {
    for (int16_t x = 0; x < WIDTH; x++)
    {
      CRGB color;
#if e_s3_BEATSINLOGIC
      int16_t cx = beatsin8(4, _s3_size, ~_s3_size) - y * _s3_scale + _s3_yz;         // (beatsin version)
      int16_t cy = beatsin8(7, _s3_size, ~_s3_size, 0, 64U) - x * _s3_scale + _s3_xz; // (beatsin version)
#else
      uint32_t _s3_time = millis();                                          // (rt version)
      int16_t cx = rangesin8(_s3_time / 23, Speed) + _s3_yz - y * _s3_scale; // (rt version)
      int16_t cy = rangecos8(_s3_time / 29, Speed) + _s3_xz - x * _s3_scale; // (rt version)
#endif

#if e_s3_INVERSE
color.r = ~sin8(sqrt16((cx * cx) + (cy * cy)));
#else
      color.r = sin8(sqrt16((cx * cx) + (cy * cy)));
#endif
      color.r = dim8_video(color.r);

#if e_s3_BEATSINLOGIC
      cx = beatsin8(5, _s3_size, ~_s3_size) - y * _s3_scale + _s3_yz;         // (beatsin version)
      cy = beatsin8(8, _s3_size, ~_s3_size, 0, 64U) - x * _s3_scale + _s3_xz; // (beatsin version)
#else
      cx = rangesin8(_s3_time / 27, Speed) + _s3_yz - y * _s3_scale; // (rt version)
      cy = rangecos8(_s3_time / 31, Speed) + _s3_xz - x * _s3_scale; // (rt version)
#endif
#if e_s3_INVERSE
      color.g = ~sin8(sqrt16((cx * cx) + (cy * cy)));
#else
      color.g = sin8(sqrt16((cx * cx) + (cy * cy)));
#endif
      color.g = dim8_video(color.g);
#if e_s3_BEATSINLOGIC
      cx = beatsin8(9, _s3_size, ~_s3_size) - y * _s3_scale + _s3_yz;          // (beatsin version)
      cy = beatsin8(11, _s3_size, ~_s3_size, 0, 64U) - x * _s3_scale + _s3_xz; // (beatsin version)
#else
      cx = rangesin8(_s3_time / 19, Speed) + _s3_yz - y * _s3_scale; // (rt version)
      cy = rangecos8(_s3_time / 15, Speed) + _s3_xz - x * _s3_scale; // (rt version)
#endif
#if e_s3_INVERSE
      color.b = ~sin8(sqrt16((cx * cx) + (cy * cy)));
#else
      color.b = sin8(sqrt16((cx * cx) + (cy * cy)));
#endif
      color.b = dim8_video(color.b);
      drawPixel_fast(x, y, color);

      // maxxx = max(maxxx, cx);
      //minxx = min(minxx, cx);
      // EVERY_N_SECONDS(1)
      /* {
        LOG.printf_P("%u %u %u\n", minxx, maxxx, Scale);
      }*/
    }
  }
  return true;


// ---- LEDraw functions ----
uint8_t rangesin8(uint8_t theta, uint8_t scale = 255)
{
  return scale8(sin8(theta), scale) + ((255 - scale) >> 1U);
}
uint8_t rangecos8(uint8_t theta, uint8_t scale = 255)
{
  return scale8(cos8(theta), scale) + ((255 - scale) >> 1U);
}

}

Скорость прорисовки возросла с 30+ FPS (оригинальный вариант) до ~57-60 FPS

  • перевел полностью на цельночисленную логику
  • дефайн инверсии колец
  • дефайн дизера (~67-70 FPS , + плавная заливка)
  • регулировка масштаба от 1/2 до 2 (регулятор масштаб)
  • регулировка глубины расхождения колец (регулятор скорость)
  • выбор логики прорисовки: через функцию beatsin8() или через мою реального времени (как оказалось - быстрее работает)

Естественно, писалась под мою прошивку, но, думаю, разберетесь для модов... :cool:
 
Изменено:

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Сотнег,

C++:
static const uint8_t HEIGHT_steps = 256U / HEIGHT; // диапазон значений приходящихся на 1 пиксель высоты матрицы
 

Сотнег

★★★★★★★
15 Янв 2020
4,339
1,492
@Palpalych, ещё штук 8 пришлось искать в прошивке.
Эффекты становятся всё менее и менее портируемыми.
 

EGORka

★✩✩✩✩✩✩
15 Мар 2020
87
37
@EGORka, ....
Почему не использовать официальный пул ru.pool.ntp.org к примеру?
Потом , что этот первый попавшийся сервер из списка, с которыми запустилась синхронизация. Заработала лампа нормально и ладно. Сейчас перешивать лампу смысла не вижу. Вот добавит @Koteyka 🐱, еще пару-тройка эффектов в свою прошивку, тогда прошью и заодно попытаюсь сменить нтп сервер. Хотя слова "использовать пул", для меня темный лес. Вот вписать адрес сервера понятнее. :)
 
Изменено:

kDn

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

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@kDn, Возможно я недостаточно объявил указатели. Подозреваю, что в массиве они уже должнеы фигурировать как константы, а у меня они объявлены явно. В остальном проверял, при извлечении использовал функции не зависящие от способа хранения.

Еще вопрос, Вы с Сотником портировали эффект Свирл (Водоворот)?

Если конечно интересно (от автора Стаи)
C++:
// ============= SWIRL /  ВОДОВОРОТ ===============
// Prismata Loading Animation
// v1.0 - Updating for GuverLamp v1.7 by SottNick 12.04.2020
// v1.1 - +dither by PalPalych 12.04.2020
// Aurora: https://github.com/pixelmatix/aurora
// Copyright (c) 2014 Jason Coon

#define e_swi_DITHER (2U) // разрешить дисперсию (0 - отключить; 2... - каждый n-кадр будет прорисовываться заново)
#define e_swi_BORDER (1U)  // размытие экрана за активный кадр

bool swirlRoutine(uint8_t Scale = 8U, uint8_t Speed = 8U)
{

#if e_swi_DITHER
  if (eff_framecounter % e_swi_DITHER)
    return false;
#endif
  // Apply some blurring to whatever's already on the matrix
  // Note that we never actually clear the matrix, we just constantly
  // blur it repeatedly.  Since the blurring is 'lossy', there's
  // an automatic trend toward black -- by design.
  const TProgmemRGBPalette16 *curPalette = palettes[Scale / palletes_steps];
#if (WIDTH < 25)
  blurScreen(beatsin8(2, 10, 128));
#else
  // Never mind, on my 64x96 array, the dots are just too small
  blurScreen(172);
#endif

  // Use two out-of-sync sine waves
  uint8_t i = beatsin8(27, e_swi_BORDER, HEIGHT - e_swi_BORDER); // borderWidth
  uint8_t j = beatsin8(41, e_swi_BORDER, WIDTH - e_swi_BORDER);
  // Also calculate some reflections
  uint8_t ni = (WIDTH_d)-i;
  uint8_t nj = (WIDTH_d)-j;

  // The color of each point shifts over time, each at a different speed.
  uint16_t ms = millis();
  leds[XY(i, j)] += ColorFromPalette(*curPalette, ms / 11);
  leds[XY(j, i)] += ColorFromPalette(*curPalette, ms / 13);
  leds[XY(ni, nj)] += ColorFromPalette(*curPalette, ms / 17);
  leds[XY(nj, ni)] += ColorFromPalette(*curPalette, ms / 29);
  leds[XY(i, nj)] += ColorFromPalette(*curPalette, ms / 37);
  leds[XY(ni, j)] += ColorFromPalette(*curPalette, ms / 41);

  return true;
};
 
Изменено:
  • Лойс +1
Реакции: Belokota и Сотнег

Сотнег

★★★★★★★
15 Янв 2020
4,339
1,492

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
@Сотнег,

Лови поправленные и выверенные Дрифты. Если возникнут вопросы по константам - скажи какие...
C++:
static const int8_t CENTER_max = max(CENTERX, CENTERY); // Наибольшее значение центра
static const uint8_t WIDTH_steps = 256U / WIDTH;   // диапазон значений приходящихся на 1 пиксель ширины матрицы
static const uint8_t HEIGHT_steps = 256U / HEIGHT; // диапазон значений приходящихся на 1 пиксель высоты матрицы

static uint8_t _dri_phase;
// ============= DRIFT / ДРИФТ ===============
// v1.0 - Updating for GuverLamp v1.7 by SottNick 12.04.2020
// v1.1 - +dither, +phase shifting by PalPalych 12.04.2020
// https://github.com/pixelmatix/aurora/blob/master/PatternIncrementalDrift.h
#define e_dri_DITHER (2U) // разрешить дисперсию эффектов DRIFT/DRIFT2 (0 - отключить; 2... - каждый n-кадр будет прорисовываться заново)
    bool
    incrementalDriftRoutine(uint8_t Scale = 8U, uint8_t Speed = 8U)
{
#if e_dri_DITHER
  if (eff_framecounter % e_dri_DITHER)
    return false;
#endif
  const TProgmemRGBPalette16 *curPalette = palettes[Scale / palletes_steps];
  blurScreen(beatsin8(3U, 5, 10));
  dimScreen(beatsin8(2U, 246, 252));
  uint8_t _dri_speed = map8(Speed, 1U, 20U);
  uint8_t _dri_delta = beatsin8(1U);
  EVERY_N_MILLIS(13){
  _dri_phase++;
  }
  for (uint8_t i = 1; i < SEMIWIDTH; i++) // возможно, стоит здесь использовать const MINLENGTH
  {
    int8_t x = beatsin8((CENTER_max - i) * _dri_speed, SEMIWIDTH_d - i, SEMIWIDTH_d + 1U + i, 0, 64U + _dri_phase); // используем константы центра матрицы из эффекта Кометы
    int8_t y = beatsin8((CENTER_max - i) * _dri_speed, SEMIWIDTH_d - i, SEMIWIDTH_d + 1U + i, 0, _dri_phase);       // используем константы центра матрицы из эффекта Кометы
    drawPixel(x, y, ColorFromPalette(*curPalette, (i - 1U) * WIDTH_steps * 2U + _dri_delta) ); // используем массив палитр из других эффектов выше
  }
  re

  return true;
}
// ============= DRIFT 2 / ДРИФТ 2 ===============
// v1.0 - Updating for GuverLamp v1.7 by SottNick 12.04.2020
// v1.1 - +dither, +phase shifting by PalPalych 12.04.2020
// https://github.com/pixelmatix/aurora/blob/master/PatternIncrementalDrift2.h
bool incrementalDriftRoutine2(uint8_t Scale = 8U, uint8_t Speed = 8U)
{
#if e_dri_DITHER
  if (eff_framecounter % e_dri_DITHER)
    return false;
#endif
  const TProgmemRGBPalette16 *curPalette = palettes[Scale / palletes_steps];
  blurScreen(beatsin8(3U, 5, 10));
  dimScreen(beatsin8(2U, 224, 252));
  uint8_t _dri_speed = map8(Speed, 1U, 15U);
  uint8_t _dri_delta = beatsin8(1U);
  EVERY_N_MILLIS(13)
  {
    _dri_phase++;
  }
  for (uint8_t i = 0; i < WIDTH; i++)
  {
    int8_t x = 0;
    int8_t y = 0;
    CRGB color;
    if (i < SEMIWIDTH)
    {
      x = beatsin8((i + 1) * _dri_speed, i + 1U, WIDTH_d - i, 0, 64U + _dri_phase);
      y = beatsin8((i + 1) * _dri_speed, i + 1U, HEIGHT_d - i, 0, _dri_phase);
      color = ColorFromPalette(*curPalette, i * WIDTH_steps * 2U + _dri_delta);
    }
    else
    {
      x = beatsin8((WIDTH - i) * _dri_speed, WIDTH_d - i, i + 1U, 0, _dri_phase);
      y = beatsin8((HEIGHT - i) * _dri_speed, HEIGHT_d - i, i + 1U, 0, 64U + _dri_phase);
      color = ColorFromPalette(*curPalette, ~(i * WIDTH_steps * 2U + _dri_delta));
    }
    drawPixel(x, y, color);
  }
  return true;
}
 
Изменено:
  • Лойс +1
Реакции: Belokota и kDn

Сотнег

★★★★★★★
15 Янв 2020
4,339
1,492
@Palpalych, Что-то не верится.
Вихри мне зашли. При скорости показа кадров каждые 15 мс.

Может, на уровне Спиралей? Да и то не дотягивают, скорее всего.

Я там в Авроре уже всё посмотрел практически.
PatternAttract.h - очередное вращение. делать не стал. есть видео с демонстрацией по ссылке выше.
PatternBounce.h - какие-то прыжки странные. делать не стал. тоже есть в видео.
PatternInfinity.h - знак бесконечности по центру матрицы. ерунда.
PatternInvaders.h - генератор пиксельных пиктограмм. не для лампы эффект.
PatternLife.h - портировал. фигня.
PatternMaze.h - почти закончил портировать, но понял, что не для лампы. генератор лабиринта.
PatternMunch.h - портировал. неописуемая хрень.
PatternPulse.h - по коду напоминает твой Пульс.
PatternRadar.h - есть в видео. ерунда.
PatternSpark.h - водопад наш.

PatternRainbowSmoke.h - в теории рисует абстрактные картины. но вряд ли для размера 16х16 подойдёт.
PatternElectricMandala.h - там скорее интересны функции отражения для эффектов калейдоскопа.
сперва хотел сделать возможность наложить калейдоскоп на любой эффект, потом понял, что получится ерунда.
пока забил.

Ничего не знаю про
PatternSimplexNoise.h
PatternNoiseSmearing.h
PatternSpiral.h
 
Изменено:
  • Лойс +1
Реакции: kDn

Palpalych

★★★★★✩✩
24 Дек 2019
766
405
Изменено:
  • Лойс +1
Реакции: Сотнег

Сотнег

★★★★★★★
15 Янв 2020
4,339
1,492
@Palpalych, он так отстойно видео снял, что многие эффекты могут заочно не понравиться
Особенно Призмате не повезло.
 

Belokota

★✩✩✩✩✩✩
24 Дек 2019
101
32
@Сотнег, вы в свою прошивку вставили ЭФФЕКТ "SINUSOID 3" V1.2 (переделанный) или пока оставили тот какой и был ранее?