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
@andryakov.d, одновременно ими управлять никак нельзя.
Удобнее всего будет, если подключите обе лампы к одному роутеру,
а приложение клонируете, чтобы каждая копия управляла одной из ламп.
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@diversant123, будет так себе...

У кого не хватает кальки на лампе, можно заодно проверить лайфхак...
pem1.jpg pem2.jpg pem3.jpg

Высоты хватает, чтобы накрыть ленту, но, к сожалению коротковата бутылочка, чтобы перекрыть ещё и горлышко от 40й трубы. Придётся подумать над конструкцией.

Диаметр тоже не идеален. Могут цепляться замки от стяжек на матрице. Да и калька такого же диаметра не давала достаточного рассеивания. А тут прозрачность, вроде бы, такая же, как у кальки.

Но есть надежда, что бутылёк подойдёт для наших целей. Отпишитесь, кто испытает!

ПС: клей стирается растительным маслом.
Сам наконец-то проверил, как оно...

Прозрачность - то, что надо. Эквивалент кальки.
А вот диаметр действительно маловат.

Цифры на Часах прекрасно читаются.
Теперь могу уверенно говорить, что если вам удаётся легко разглядеть цифры в эффекте Часы,
значит большинство лучших эффектов у вас выглядит плохо, и надо переделывать рассеивание.
IMG_20201022_005151.jpg
 

dimaz3452

✩✩✩✩✩✩✩
29 Сен 2020
4
2
Всем доброго времени, уважаемые самодельщики! :)

Столкнулся с наитупейшей ситуацией... собрал сей замечательный проект по инструкции, один день в полусобранном состоянии даже успел лампой насладиться. После приклеивания кнопки и плотного прижима заглушки мне оставался лишь последний шаг - подключение питания. И, как вы возможно уже догадались, по своей невнимательности перепутал два разных БП с одинаковыми штекерами, как итог подключил 12В вместо 5...

Лампа больше не горит вообще. На плате Wemos D1 также никакой индикации, ESP8266 соответственно также перестал гореть синим светодиодом. В общем, плата точно под замену, закажу новую. Вопрос лишь в том, в живых ли осталась самая дорогостоящая в проекте матрица? Можно ли без контроллера как-то это проверить? При подключении к ней питания 5В сейчас ничего вообще не происходит, потребление также 0А. Визуально кристаллы светодиодов без прогара.

По моей логике, сигнал на включение матрицы подаётся от контроллера после успешной инициализации, а он вышел из строя, не успев этот сигнал отправить. Я надеюсь на это, но так ли это? Всем благодарен за обратную связь! Прямых вам рук, чтоб не как у меня. :)
Продолжение моей неудачной истории, может кому пригодится информация. :D

Купил новый NodeMCU, сегодня получил, подключил - и, о да, всё работает! Я очень рад, лампа невероятная. :)

Всем добра.
 
Изменено:
  • Лойс +1
Реакции: Vados2020

никита010300

✩✩✩✩✩✩✩
22 Окт 2020
4
0
добрый вечер. после подключения к wifi лампы не выскакивает настройка конфигурации...
нашел на сайте _ Очень часто при первом запуске лампы, при подключении к сети лампы не открывается менеджер сетей WIFI.
Помогает комментирование строки #define ESP_USE_BUTTON (отключение кнопки) и заливка скетча выставив Erase flash в All Flash Content
После того, как вы подключили лампу к сети эту строку можно раскомментировать и залить скетч с параметром Erase flash установленным в Only Sketh _
но не понимаю что и как здесь надо сделать
😱
помогите пожалуйста
🙏🏻
🙏🏻
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@никита010300,
Если действовать так, как вы вычитали, то найдите в прошивке строчку
#define USE_BUTTON
и удалите её.
Затем прошейте лампу и пробуйте подключаться заново (сперва "забыть эту сеть").

Если все заработает, вернёте строчку обратно и прошьёте заново.


Если искать более адекватный путь, тогда выключите в телефоне мобильный интернет, "забудьте эту сеть", подключитесь к ней заново, и, если ничего не появится, наберите в браузере адрес 192.168.4.1

если речь про сенсорную кнопку то - работает
Если кнопка работает (включает лампу), значит нет смысла всё это делать.
Подключайте к ней телефон, запускайте приложение и пользуйтесь.
 

никита010300

✩✩✩✩✩✩✩
22 Окт 2020
4
0
Если кнопка работает (включает лампу), значит нет смысла всё это делать.
Подключайте к ней телефон, запускайте приложение и пользуйтесь.
просто если делать дальше по инструкции то в приложение пишет (статус лампы - отключен )
 

diversant123

★✩✩✩✩✩✩
19 Окт 2020
17
13
УРА! НАШЕЛ!!! нашел в Украине плафон очень похожий на леруашный, диаметр 10см, высота 20см, отверстие 4см, матовый, немного в полосочку но их почти не видно.
Позже соберу - скину фото как получилось
 

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
Новый
Эффект Реакция Белоусова-Жаботинского
Должно быть нечто, напоминающее это (но у нашей матрицы разрешение маловато):
belousova2.gif

Эффект устанавливается с теми, у которых бегунок Скорость регулирует задержку между кадрами.
Код пока не оптимизирован, зато читабелен...
C-like:
//uint8_t hue, hue2;                                 // постепенный сдвиг оттенка или какой-нибудь другой цикличный счётчик
//uint8_t deltaHue, deltaHue2;                       // ещё пара таких же, когда нужно много
//uint8_t step;                                      // какой-нибудь счётчик кадров или последовательностей операций
//uint8_t deltaValue;                                // просто повторно используемая переменная

// ============= Эффект Реакция Белоусова-Жаботинского (Осциллятор) ===============
// (c) SottNick

void drawPixelXYFseamless(float x, float y, CRGB color)
{
  uint8_t xx = (x - (int)x) * 255, yy = (y - (int)y) * 255, ix = 255 - xx, iy = 255 - yy;
  // calculate the intensities for each affected pixel
  #define WU_WEIGHT(a,b) ((uint8_t) (((a)*(b)+(a)+(b))>>8))
  uint8_t wu[4] = {WU_WEIGHT(ix, iy), WU_WEIGHT(xx, iy),
                   WU_WEIGHT(ix, yy), WU_WEIGHT(xx, yy)};
  // multiply the intensities by the colour, and saturating-add them to the pixels
  for (uint8_t i = 0; i < 4; i++) {
    uint8_t xn = (int8_t)(x + (i & 1)) % WIDTH;
    uint8_t yn = (int8_t)(y + ((i >> 1) & 1)) % HEIGHT;
    CRGB clr = getPixColorXY(xn, yn);
    clr.r = qadd8(clr.r, (color.r * wu[i]) >> 8);
    clr.g = qadd8(clr.g, (color.g * wu[i]) >> 8);
    clr.b = qadd8(clr.b, (color.b * wu[i]) >> 8);
    drawPixelXY(xn, yn, clr);
  }
}

class oscillatingCell {
public:
  byte red;
  byte blue;
  byte green;
  byte color;
};
oscillatingCell oscillatingWorld[WIDTH][HEIGHT];

int redNeighbours(uint8_t x, uint8_t y) {
  return (oscillatingWorld[(x + 1) % WIDTH][y].red) +
         (oscillatingWorld[x][(y + 1) % HEIGHT].red) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][y].red) +
         (oscillatingWorld[x][(y + HEIGHT - 1) % HEIGHT].red) +
         (oscillatingWorld[(x + 1) % WIDTH][(y + 1) % HEIGHT].red) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][(y + 1) % HEIGHT].red) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][(y + HEIGHT - 1) % HEIGHT].red) +
         (oscillatingWorld[(x + 1) % WIDTH][(y + HEIGHT - 1) % HEIGHT].red);
    }

int blueNeighbours(uint8_t x, uint8_t y) {
  return (oscillatingWorld[(x + 1) % WIDTH][y].blue) +
         (oscillatingWorld[x][(y + 1) % HEIGHT].blue) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][y].blue) +
         (oscillatingWorld[x][(y + HEIGHT - 1) % HEIGHT].blue) +
         (oscillatingWorld[(x + 1) % WIDTH][(y + 1) % HEIGHT].blue) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][(y + 1) % HEIGHT].blue) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][(y + HEIGHT - 1) % HEIGHT].blue) +
         (oscillatingWorld[(x + 1) % WIDTH][(y + HEIGHT - 1) % HEIGHT].blue);
    }
  
int greenNeighbours(uint8_t x, uint8_t y) {
  return (oscillatingWorld[(x + 1) % WIDTH][y].green) +
         (oscillatingWorld[x][(y + 1) % HEIGHT].green) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][y].green) +
         (oscillatingWorld[x][(y + HEIGHT - 1) % HEIGHT].green) +
         (oscillatingWorld[(x + 1) % WIDTH][(y + 1) % HEIGHT].green) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][(y + 1) % HEIGHT].green) +
         (oscillatingWorld[(x + WIDTH - 1) % WIDTH][(y + HEIGHT - 1) % HEIGHT].green) +
         (oscillatingWorld[(x + 1) % WIDTH][(y + HEIGHT - 1) % HEIGHT].green);
    }

void setCellColors(uint8_t x, uint8_t y) {
  oscillatingWorld[x][y].red = (oscillatingWorld[x][y].color == 0U);
  oscillatingWorld[x][y].green = (oscillatingWorld[x][y].color == 1U);
  oscillatingWorld[x][y].blue = (oscillatingWorld[x][y].color == 2U);
}

void oscillatingRoutine() {
  if (loadingFlag) {
    loadingFlag = false;
    step = 0U;
    //setCurrentPalette();
    if (modes[currentMode].Scale > 100U) modes[currentMode].Scale = 100U; // чтобы не было проблем при прошивке без очистки памяти
    if (modes[currentMode].Scale <= 50U)
      curPalette = palette_arr[(uint8_t)(modes[currentMode].Scale/50.0F * ((sizeof(palette_arr)/sizeof(TProgmemRGBPalette16 *))-0.01F))];
    //else
      //curPalette = firePalettes[(uint8_t)((modes[currentMode].Scale - 50)/50.0F * ((sizeof(firePalettes)/sizeof(TProgmemRGBPalette16 *))-0.01F))];
  
  
    //случайное заполнение
    for (uint8_t i = 0; i < WIDTH; i++) {
      for (uint8_t j = 0; j < HEIGHT; j++) {
        oscillatingWorld[i][j].color = random8(3);
        setCellColors(i, j);
      }
    }
  }

  hue++;
  CRGB currColors[3];
  if (modes[currentMode].Scale == 100U){
    currColors[0U] = CHSV(hue, 255U, 255U);
    currColors[1U] = CHSV(hue, 128U, 255U);
    currColors[2U] = CHSV(hue, 255U, 128U);
  }
  else if (modes[currentMode].Scale > 50U){
    //uint8_t temp = (modes[currentMode].Scale - 50U) * 1.275;
    currColors[0U] = CHSV((modes[currentMode].Scale - 50U) * 5.1, 255U, 255U);
    currColors[1U] = CHSV((modes[currentMode].Scale - 50U) * 5.1, 128U, 255U);
    currColors[2U] = CHSV((modes[currentMode].Scale - 50U) * 5.1, 255U, 128U);
  }
  else
    for (uint8_t c = 0; c < 3; c++)
      currColors[c] = ColorFromPalette(*curPalette, c * 85U + hue);
  FastLED.clear();

  // расчёт химической реакции и отрисовка мира
  uint16_t colorCount[3] = {0U, 0U, 0U};
  for (uint8_t x = 0; x < WIDTH; x++) {
      for (uint8_t y = 0; y < HEIGHT; y++) {
          if (oscillatingWorld[x][y].red){
             colorCount[0U]++;
             if (greenNeighbours(x, y) > 2U)
                oscillatingWorld[x][y].color = 1U;
          }
          else if (oscillatingWorld[x][y].green){
             colorCount[1U]++;
             if (blueNeighbours(x, y) > 2U)
                oscillatingWorld[x][y].color = 2U;
          }
          else {//if (oscillatingWorld[x][y].blue){
             colorCount[2U]++;
             if (redNeighbours(x, y) > 2U)
                oscillatingWorld[x][y].color = 0U;
          }
          drawPixelXYFseamless((float)x + 0.5, (float)y + 0.5, currColors[oscillatingWorld[x][y].color]);
      }
  }

  // проверка зацикливания
  if (colorCount[0] == deltaHue && colorCount[1] == deltaHue2 && colorCount[2] == deltaValue){
    step++;
    if (step > 10U){
      if (colorCount[0] < colorCount[1])
        step = 0;
      else
        step = 1;
      if (colorCount[2] < colorCount[step])
        step = 2;
      colorCount[step] = 0U;
      step = 0U;
    }
  }
  else
    step = 0U;
  
  // вброс хаоса
  if (hue == hue2){// чтобы не каждый ход
    hue2 += random8(220U) + 36U;
    uint8_t tx = random8(WIDTH);
    deltaHue = oscillatingWorld[tx][0U].color + 1U;
    if (deltaHue > 2U) deltaHue = 0U;
    oscillatingWorld[tx][0U].color = deltaHue;
    oscillatingWorld[(tx + 1U) % WIDTH][0U].color = deltaHue;
    oscillatingWorld[(tx + 2U) % WIDTH][0U].color = deltaHue;
  }

  deltaHue = colorCount[0];
  deltaHue2 = colorCount[1];
  deltaValue = colorCount[2];

  // вброс исчезнувшего цвета
  for (uint8_t c = 0; c < 3; c++)
  {
    if (colorCount[c] < 6U){
      uint8_t tx = random8(WIDTH);
      uint8_t ty = random8(HEIGHT);
      if (random8(2U)){
        oscillatingWorld[tx][ty].color = c;
        oscillatingWorld[(tx + 1U) % WIDTH][ty].color = c;
        oscillatingWorld[(tx + 2U) % WIDTH][ty].color = c;
      }
      else {
        oscillatingWorld[tx][ty].color = c;
        oscillatingWorld[tx][(ty + 1U) % HEIGHT].color = c;
        oscillatingWorld[tx][(ty + 2U) % HEIGHT].color = c;
      }
    }
  }

  // перенос на следующий цикл
  for (uint8_t x = 0; x < WIDTH; x++) {
      for (uint8_t y = 0; y < HEIGHT; y++) {
          setCellColors(x, y);
      }
  }
}
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,340
1,492
@kostyamat, пока что нету лампы, на которой можно снять видео.

Подправил использование палитр и цветов, защиту от зацикливания, добавил видео.
 
Изменено:

AVANG

✩✩✩✩✩✩✩
26 Окт 2020
2
0
Добрый день!

Я только начал погружаться в мир Arduino и столкнулся с проблемой прошивки и запуска WeMos D1 mini ESP8266.

Решил реализовать проект GyverLamp на базе WeMos D1 mini ESP8266. Собрал все в соответствии со схемой, настроил все по инструкции, но контроллер не хотел прошиваться с ошибкой:
C++:
Traceback (most recent call last):
  File "C:\Users\Vadim\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.5.2/tools/upload.py", line 25, in <module>
    esptool.main(fakeargs)
  File "C:/Users/Vadim/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/Vadim/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
esptool.FatalError: Failed to connect to ESP8266: Timed out waiting for packet header
На просторах интернета нашел подсказку, что перед подключением usb нужно соединить D3 c GND. Данное соединение помогло только на чистой схеме (без обвязки). Прошить - прошил, но микроконтроллер работает нестабильно. Даже без обвязки не всегда поднимает прошивку. В мониторе порта при рестартах на скорости 74880 выводит в основном:
C++:
ets Jan  8 2013,rst cause:2, boot mode:(7,6)

waiting for host
И редко (1 к 10):
C++:
 ets Jan  8 2013,rst cause:2, boot mode:(3,6)

load 0x4010f000, len 1384, room 16
tail 8
chksum 0x2d
csum 0x2d
v8b899c12
~ld
WiFi поднимается (появляется точка доступа) только на редких сообщениях.
На скорости 115200 редкое сообщение выглядит следующим образом:
C++:
⸮⸮⸮⸮{⸮c⸮c⸮⸮oo⸮doo⸮⸮⸮c⸮b⸮drlrl⸮n⸮⸮|⸮⸮⸮n|
    WiFi manager
Т.е. крякозябры и надпись WiFi manager.
Когда Wifi поднялся, удалось подключить его к роутеру и запустить лампу, но до следующей перезагрузки микроконтроллера. После чего он перепрошился раза с 10-го даже с соединенным D3 и GND (чуть не потерял надежду, что перепрошьется).

Подскажите:
1. Почему микроконтроллер не прошивался без соединения D3 и GND?
2. Почему микроконтроллер не прошивался c соединением D3 и GND, но в составе схемы?
3. Почему микроконтроллер не загружает прошивку и что с ним твориться?
4. Это брак микроконтроллера? И можно ли его как-то привести в чувства?

Не исключаю кривизну рук, но делал все в соответствии с инструкцией.

P.S.
ОС Winows 10
IDE Arduino 1.8.13
Драйвера CH341SER установлены
Прошивка: GyverLamp_v1.5.5
Настройки прошивки:
tmp.png
 
Изменено:

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
А чего эту скорость соединения используете? 115200 вроде же было.


GND - Ground

* По теме - не хотите мучений с менеджером WiFi, подключением и прочими танцами с бубном - лучше сразу идите в нашу тему и ставьте PIO. Ну или же можете помучаться, надоест - приходите. :)
 

AVANG

✩✩✩✩✩✩✩
26 Окт 2020
2
0
GRD - исправил
74880 - просто на этой скорости было обнаружено внятное сообщение. На 11520 выводит крякозябры с редкими
WiFi manager.

Просветите что за PIO и "наша тема"?
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Просветите что за PIO и "наша тема"?