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

Сообщение изъято на правах администрации
ВНИМАНИЕ !!!
те кто живой и хочет увидеть ссылку на свое исполнение, прошу централизовать все свои доработки и сообщения. Далее в теме пишем сообщение с ссылкой на ваше сообщение (с проектом), с пометкой @mechanic .


В данной ветке обсуждаются только сия проект. Общие вопросы, доработки и проблемы, не относящиеся к конкретным прошивкам!. Вопросы по прошивкам решаем в темах самих прошивок. Здесь такие разговоры оффтоп.
Всякий любой вопрос не по теме сразу удаляется БЕЗ объяснения причины!
Для этого есть соответствующие ветки форума. Вопрос почему удалили мой пост? также удаляется.

  • Общаясь на форуме будьте взаимно вежливы!
  • Обратите внимание на то, что у нас принято говорить Спасибо путём повышения репутации, нажав на кнопочку
    .
  • Если есть претензии то нажмите кнопку .
  • Запрещено писать красным цветом в ваших постах - этот цвет только для Модераторов .
  • Вопросы, ответ на которые есть в шапке или в FAQ, будут удаляться. За повторный вопрос пользователь может быть наказан.
  • Убедительная просьба придерживаться тематики ветки, избегать флуда и оффтопа!
Очень часто при первом запуске лампы, при подключении к сети лампы не открывается менеджер сетей WIFI.
Помогает комментирование строки #define ESP_USE_BUTTON (отключение кнопки) и заливка скетча выставив Erase flash в All Flash Content
После того, как вы подключили лампу к сети эту строку можно раскомментировать и залить скетч с параметром Erase flash установленным в Only Sketh
Наш участник собрал много полезной информации по блокам питания для лампы. Качественное питание - необходимое условие надёжной работы любого устройства. Изучаем: https://community.alexgyver.ru/threads/nebolshoj-opus-po-bp-dlja-gyverlamp-wifi-lampa-budilnik.3523/

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

Комментарии

recoshet

★✩✩✩✩✩✩
15 Июн 2019
1
14
Сообщение изъято на правах администрации
ВНИМАНИЕ !!!
те кто живой и хочет увидеть ссылку на свое исполнение, прошу централизовать все свои доработки и сообщения. Далее в теме пишем сообщение с ссылкой на ваше сообщение (с проектом), с пометкой @mechanic .


В данной ветке обсуждаются только сия проект. Общие вопросы, доработки и проблемы, не относящиеся к конкретным прошивкам!. Вопросы по прошивкам решаем в темах самих прошивок. Здесь такие разговоры оффтоп.
Всякий любой вопрос не по теме сразу удаляется БЕЗ объяснения причины!
Для этого есть соответствующие ветки форума. Вопрос почему удалили мой пост? также удаляется.

  • Общаясь на форуме будьте взаимно вежливы!
  • Обратите внимание на то, что у нас принято говорить Спасибо путём повышения репутации, нажав на кнопочку
    .
  • Если есть претензии то нажмите кнопку .
  • Запрещено писать красным цветом в ваших постах - этот цвет только для Модераторов .
  • Вопросы, ответ на которые есть в шапке или в FAQ, будут удаляться. За повторный вопрос пользователь может быть наказан.
  • Убедительная просьба придерживаться тематики ветки, избегать флуда и оффтопа!
Очень часто при первом запуске лампы, при подключении к сети лампы не открывается менеджер сетей WIFI.
Помогает комментирование строки #define ESP_USE_BUTTON (отключение кнопки) и заливка скетча выставив Erase flash в All Flash Content
После того, как вы подключили лампу к сети эту строку можно раскомментировать и залить скетч с параметром Erase flash установленным в Only Sketh
Наш участник собрал много полезной информации по блокам питания для лампы. Качественное питание - необходимое условие надёжной работы любого устройства. Изучаем: https://community.alexgyver.ru/threads/nebolshoj-opus-po-bp-dlja-gyverlamp-wifi-lampa-budilnik.3523/

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

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
Новые
Эффекты Тучка в банке и Гроза в банке
Прям с молниями⚡ (который гроза⛈):

Там в коде ещё просто "Дождь" есть.
Но на регулятор масштаб пока что и длина капель и их цвет реагируют одновременно.
Не знаю, как разрулить. И то и это хочется.

Сделал ему регулировку и цвета и длины хвостов одним регулятором (Масштабу значения нужны от 0 до 255).
Теперь это хоть снег, хоть дождь, хоть матрица, хоть водопад. Назову Эффект Осадки.
C-like:
// ============= ЭФФЕКТЫ ОСАДКИ / ТУЧКА В БАНКЕ / ГРОЗА В БАНКЕ ===============
// Адаптация (c) SottNick
// https/github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/master/FastLED/Sublime_Demos/Sublime_Demos.ino
// там по ссылке ещё остались эффекты с 3 по 9 (в SimplePatternList перечислены)

//прикольная процедура добавляет блеск почти к любому эффекту после его отрисовки https://www.youtube.com/watch?v=aobtR1gIyIo
//void addGlitter( uint8_t chanceOfGlitter){
//  if ( random8() < chanceOfGlitter) leds[ random16(NUM_LEDS) ] += CRGB::White;
//}

//static uint8_t intensity = 42;  // будет бегунок масштаба

// Array of temp cells (used by fire, theMatrix, coloredRain, stormyRain)
// uint8_t **tempMatrix; = noise3d[0][WIDTH][HEIGHT]
// uint8_t *splashArray; = line[WIDTH] из эффекта Огонь

CRGB solidRainColor = CRGB(60,80,90);

uint8_t wrapX(int8_t x){
  return (x + WIDTH)%WIDTH;
}
uint8_t wrapY(int8_t y){
  return (y + HEIGHT)%HEIGHT;
}

void rain(byte backgroundDepth, byte maxBrightness, byte spawnFreq, byte tailLength, CRGB rainColor, bool splashes, bool clouds, bool storm)
{
  static uint16_t noiseX = random16();
  static uint16_t noiseY = random16();
  static uint16_t noiseZ = random16();

  CRGB lightningColor = CRGB(72,72,80);
  CRGBPalette16 rain_p( CRGB::Black, rainColor );
#ifdef SMARTMATRIX
  CRGBPalette16 rainClouds_p( CRGB::Black, CRGB(75,84,84), CRGB(49,75,75), CRGB::Black );
#else
  CRGBPalette16 rainClouds_p( CRGB::Black, CRGB(15,24,24), CRGB(9,15,15), CRGB::Black );
#endif

  fadeToBlackBy( leds, NUM_LEDS, 255-tailLength);

  // Loop for each column individually
  for (int x = 0; x < WIDTH; x++) {
    // Step 1.  Move each dot down one cell
    for (int i = 0; i < HEIGHT; i++) {
      if (noise3d[0][x][i] >= backgroundDepth) {  // Don't move empty cells
        if (i > 0) noise3d[0][x][wrapY(i-1)] = noise3d[0][x][i];
        noise3d[0][x][i] = 0;
      }
    }

    // Step 2.  Randomly spawn new dots at top
    if (random(255) < spawnFreq) {
      noise3d[0][x][HEIGHT-1] = random(backgroundDepth, maxBrightness);
    }

    // Step 3. Map from tempMatrix cells to LED colors
    for (int y = 0; y < HEIGHT; y++) {
      if (noise3d[0][x][y] >= backgroundDepth) {  // Don't write out empty cells
        leds[XY(x,y)] = ColorFromPalette(rain_p, noise3d[0][x][y]);
      }
    }

    // Step 4. Add splash if called for
    if (splashes) {
      // FIXME, this is broken
      byte j = line[x];
      byte v = noise3d[0][x][0];

      if (j >= backgroundDepth) {
        leds[XY(wrapX(x-2),0)] = ColorFromPalette(rain_p, j/3);
        leds[XY(wrapX(x+2),0)] = ColorFromPalette(rain_p, j/3);
        line[x] = 0;   // Reset splash
      }

      if (v >= backgroundDepth) {
        leds[XY(wrapX(x-1),1)] = ColorFromPalette(rain_p, v/2);
        leds[XY(wrapX(x+1),1)] = ColorFromPalette(rain_p, v/2);
        line[x] = v; // Prep splash for next frame
      }
    }

    // Step 5. Add lightning if called for
    if (storm) {
      //uint8_t lightning[WIDTH][HEIGHT];
      // ESP32 does not like static arrays  https://github.com/espressif/arduino-esp32/issues/2567
      uint8_t *lightning = (uint8_t *) malloc(WIDTH * HEIGHT);
      while (lightning == NULL) { Serial.println("lightning malloc failed"); }


      if (random16() < 72) {    // Odds of a lightning bolt
        lightning[scale8(random8(), WIDTH-1) + (HEIGHT-1) * WIDTH] = 255;  // Random starting location
        for(int ly = HEIGHT-1; ly > 1; ly--) {
          for (int lx = 1; lx < WIDTH-1; lx++) {
            if (lightning[lx + ly * WIDTH] == 255) {
              lightning[lx + ly * WIDTH] = 0;
              uint8_t dir = random8(4);
              switch (dir) {
                case 0:
                  leds[XY(lx+1,ly-1)] = lightningColor;
                  lightning[(lx+1) + (ly-1) * WIDTH] = 255; // move down and right
                break;
                case 1:
                  leds[XY(lx,ly-1)] = CRGB(128,128,128); // я без понятия, почему у верхней молнии один оттенок, а у остальных - другой
                  lightning[lx + (ly-1) * WIDTH] = 255;    // move down
                break;
                case 2:
                  leds[XY(lx-1,ly-1)] = CRGB(128,128,128);
                  lightning[(lx-1) + (ly-1) * WIDTH] = 255; // move down and left
                break;
                case 3:
                  leds[XY(lx-1,ly-1)] = CRGB(128,128,128);
                  lightning[(lx-1) + (ly-1) * WIDTH] = 255; // fork down and left
                  leds[XY(lx-1,ly-1)] = CRGB(128,128,128);
                  lightning[(lx+1) + (ly-1) * WIDTH] = 255; // fork down and right
                break;
              }
            }
          }
        }
      }
      free(lightning);
    }

    // Step 6. Add clouds if called for
    if (clouds) {
      uint16_t noiseScale = 250;  // A value of 1 will be so zoomed in, you'll mostly see solid colors. A value of 4011 will be very zoomed out and shimmery
      const uint16_t cloudHeight = (HEIGHT*0.4)+1;

      // This is the array that we keep our computed noise values in
      //static uint8_t noise[WIDTH][cloudHeight];
      static uint8_t *noise = (uint8_t *) malloc(WIDTH * cloudHeight);
      while (noise == NULL) { Serial.println("noise malloc failed"); }
      int xoffset = noiseScale * x + hue;

      for(int z = 0; z < cloudHeight; z++) {
        int yoffset = noiseScale * z - hue;
        uint8_t dataSmoothing = 192;
        uint8_t noiseData = qsub8(inoise8(noiseX + xoffset,noiseY + yoffset,noiseZ),16);
        noiseData = qadd8(noiseData,scale8(noiseData,39));
        noise[x * cloudHeight + z] = scale8( noise[x * cloudHeight + z], dataSmoothing) + scale8( noiseData, 256 - dataSmoothing);
        nblend(leds[XY(x,HEIGHT-z-1)], ColorFromPalette(rainClouds_p, noise[x * cloudHeight + z]), (cloudHeight-z)*(250/cloudHeight));
      }
      noiseZ ++;
    }
  }
}

uint8_t myScale8(uint8_t x) { // даёт масштабировать каждые 8 градаций (от 0 до 7) бегунка Масштаб в значения от 0 до 255 по типа синусоиде
  uint8_t x8 = x % 8U;
  uint8_t x4 = x8 % 4U;
  if (x4 == 0U)
    if (x8 == 0U)       return 0U;
    else                return 255U;
  else if (x8 < 4U)     return (1U   + x4 * 72U); // всего 7шт по 36U + 3U лишних = 255U (чтобы восхождение по синусоиде не было зеркально спуску)
//else
                        return (253U - x4 * 72U);
}

void coloredRain() // внимание! этот эффект заточен на работу бегунка Масштаб в диапазоне от 0 до 255. пока что единственный.
{
  // ( Depth of dots, maximum brightness, frequency of new dots, length of tails, color, splashes, clouds, ligthening )
  //rain(60, 200, map8(intensity,5,100), 195, CRGB::Green, false, false, false); // было CRGB::Green
  if (modes[currentMode].Scale > 247U)
    rain(60, 200, map8(42,5,100), myScale8(modes[currentMode].Scale), solidRainColor, false, false, false);
  else
    rain(60, 200, map8(42,5,100), myScale8(modes[currentMode].Scale), CHSV(modes[currentMode].Scale, 255U, 255U), false, false, false);
}

void simpleRain()
{
  // ( Depth of dots, maximum brightness, frequency of new dots, length of tails, color, splashes, clouds, ligthening )
  //rain(60, 200, map8(intensity,2,60), 10, solidRainColor, true, true, false);
  rain(60, 180,(modes[currentMode].Scale-1) * 2.58, 30, solidRainColor, true, true, false);
}

void stormyRain()
{
  // ( Depth of dots, maximum brightness, frequency of new dots, length of tails, color, splashes, clouds, ligthening )
  //rain(0, 90, map8(intensity,0,150)+60, 10, solidRainColor, true, true, true);
  rain(60, 160, (modes[currentMode].Scale-1) * 2.58, 30, solidRainColor, true, true, true);
}

C-like:
// несколько общих для нескольких эффектов буферов
CRGB ledsbuff[NUM_LEDS];
#define NUM_LAYERSMAX 2
uint8_t noise3d[NUM_LAYERSMAX][WIDTH][HEIGHT];
uint8_t line[WIDTH];
Если на какую-то из строчке будет ругаться (redefinition of...), значит она повторяет существующую. Просто удалить.
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@menooooo, у какого эффекта?
У дождя из предыдущего сообщения белые капли при Масштаб =100.
Проблема в том, что при этом масштабе у капель хвосты во всю высоту лампы.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@menooooo, сейчас о чём речь?
вы уже успели поставить себе данные эффекты и пытаетесь избавиться от хвостов в новом цветном дожде?

Я доработал код (в сообщении отредактировал). Теперь хвосты регулируются почти независимо
 
Изменено:
  • Лойс +1
Реакции: Gogy

Gogy

★✩✩✩✩✩✩
14 Апр 2019
80
14
@Сотнег,
Уважаемый!
А с приложением от GANNER47 Эффекты Тучка в банке и Гроза в банке работать будут?
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Добавил цветомузыку в свою прошивку, на основе микрофона MAX9814, может кому интересно будет такое ;) .
 
  • Лойс +1
Реакции: t_igr и VALERIOG

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@Gogy, Если установить вместо каких-то старых эффектов (от Огня и ниже), чтобы общее количество не изменилось, Тучка и Гроза в банке будут работать без проблем.

Осадки - будут, но частично.
 

Gogy

★✩✩✩✩✩✩
14 Апр 2019
80
14
@Gogy, Если установить вместо каких-то старых эффектов (от Огня и ниже), чтобы общее количество не изменилось, Тучка и Гроза в банке будут работать без проблем.

Осадки - будут, но частично.
Спасибо!
В коде, который Вы выложили, можно оставить только эффекты Тучка и Гроза, исключив осадки?
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@Gogy, можно просто не использовать.
Специально выпиливать лишнее смысла нет.
 

andree75

✩✩✩✩✩✩✩
26 Фев 2020
28
4
@Сотнег, Правильно ли я понял, что во вкладку "effects" прошивки gunner47 v1.5 добавляем код эффекта из #4658. А на что исправить заменяемый эффект во вкладке effectTicker (не нашел название в коде)? С мячиками понятно - bbals, со спиралью понятно - spiro, заменил их на не нужные (кубик и белый свет) и все работает. А вот тут не разобрался. Тоже самое и с Эффект Огонь 2018 beta2.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@andree75, лучше посмотреть в готовом примере, чем на пальцах объяснять:
Прошивка 63 эффекта в 1

Вам не обязательно менять EFF_блабла.
Оно может оставаться от старого эффекта.

Важна только процедура запуска
типа stormyRain();
 
Изменено:
  • Лойс +1
Реакции: andree75

Gogy

★✩✩✩✩✩✩
14 Апр 2019
80
14
@Сотнег, Перепрошил. Всё получилось. Здорово!
Такая же проблема. Прошивки gunner47 v1.4. Установил код эффекта "Тучка и Гроза" вместо эффекта "метель", во вкладке effectTicker вместо "case EFF_SNOWSTORM: snowStormRoutine(); break; " прописано "case EFF_SNOWSTORM: stormyRain(); break;" в результате получается ошибка:
 

Вложения

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@Gogy, это я вынес из нескольких эффектов общие переменные.

Добавил дополнительный код в сообщение...
 

Gogy

★✩✩✩✩✩✩
14 Апр 2019
80
14
@Gogy, это я вынес из нескольких эффектов общие переменные.

Добавил дополнительный код в сообщение...
Спасибо за участие. Теперь матерится на строку uint8_t line[WIDTH]; из дополнительного кода словами: redefinition of 'uint8_t line [16]'
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@Gogy, Непонятно, что делали?
Проблемная строчка помечается красным цветом.
В ошибке написано "redefinition of" - повторное определение.
Нужно было просто удалить такую строчку.

Если так же ругается на другую строчку - другую тоже удалить.

Изначальная проблема была, что у вас не хватало строчки про noise3d.
Её нужно было добавить над кодом самого эффекта.
 

BRACKET

✩✩✩✩✩✩✩
19 Фев 2020
1
0
Добрый день. Сделал лампу по инструкции, все собрал и все отлично заработало. Поработало какое то время и потом перестала включаться. Прошивка от gunnerа. Сейчас пытаюсь перепрошить контроллер и выходит вот такая ошибка:
esptool.py v2.6
2.6
esptool.py v2.6
Serial port COM3
Connecting........_____....._____....._____....._____....._____....._____.....____Traceback (most recent call last):
File "C:\Users\user\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2/tools/upload.py", line 25, in <module>
esptool.main(fakeargs)
File "C:/Users/user/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/tools/esptool\esptool.py", line 2653, in main
esp.connect(args.before)
File "C:/Users/user/AppData/Local/Arduino15/packages/esp8266/hardware/esp8266/2.5.2/tools/esptool\esptool.py", line 468, in connect
raise FatalError('Failed to connect to %s: %s' % (self.CHIP_NAME, last_error))
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
_
выбранный последовательный порт _
не существует или плата не подключена к нему
При этом не включается лампа ни через кнопку, в приложении она не находит. Подскажите пожалуйста в какую сторону копать. Плата NodeMCU. Порт правильный, кабель менял на другой. Прочитал тут на форуме что нужно вместо пина D4 использовать D8, перепаял, изменил в настройках пин ленты на 15U (если я правильно понял из картинки которую прислал(а) Belokota), эффект тот же. Буду благодарен за помощь. Заранее извиняюсь если написал не в той ветке
 
Изменено: