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,104
1,434
Хорошо бы кто-нибудь сформулировал, при каких симптомах нужно вкорячивать этот диод в схему.
 

kDn

★★★★★✩✩
18 Ноя 2019
1,109
437
Там логический уровень указывается как
Screenshot_20200519-205607.png
Да ни в коей мере... фронты там конечно не изуродовало в клочья, но в той мере что это можно измерить вполне достаточно.
Я тут вспомнил, что там возле каждого светодиода конденсатор стоит, а их 256 штук - только не помню по питанию они там или по сигнальному.
 

vortigont

★★★★★✩✩
24 Апр 2020
852
461
Saint-Petersburg, Russia
А скиньте, плз, ссылочку на даташит, это другой какой-то, мне еще тайминги интересно поглядеть, как раз сейчас вожусь с производительностью.

Я тут вспомнил, что там возле каждого светодиода конденсатор стоит, а их 256 штук - только не помню по питанию они там или по сигнальному.
Да вроде по питалову должен быть, но вот еще 5 копеек - я когда снимал осциллограммы на пограничных пределах по напряжению (когда вот-вот начинались глюки) заметил что даже подключение экранированного высокоомного щупа осцилла на x10 к дата-пину первого диода влияет на артефакты. Причем, что интересно в лучшую сторону :)) так что мелкий ВЧ кондер-шумодав по входу может оказаться не такой уж безумной идеей.
 
  • Лойс +1
Реакции: Belokota

kDn

★★★★★✩✩
18 Ноя 2019
1,109
437
А скиньте, плз, ссылочку на даташит, это другой какой-то, мне еще тайминги интересно поглядеть, как раз сейчас вожусь с производительностью.
Это из того на который вы вчера ссылку давали. Отдельно я не искал...
 

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
Если кому-то нужно убить знакомого эпилептика, то вам пригодится
Эффект Звёзды (beta-версия)

Я не знаю, что с ним делать. Возможно, эта версия - последняя. Предсмертная.
C-like:
// добавлено изменение текущей палитры (используется во многих эффектах ниже для бегунка Масштаб)
const TProgmemRGBPalette16 *palette_arr[] = {&PartyColors_p, &OceanColors_p, &LavaColors_p, &HeatColors_p, &WaterfallColors_p, &CloudColors_p, &ForestColors_p, &RainbowColors_p, &RainbowStripeColors_p};
const TProgmemRGBPalette16 *curPalette = palette_arr[0];
void setCurrentPalette(){
      if (modes[currentMode].Scale > 100) modes[currentMode].Scale = 100; // чтобы не было проблем при прошивке без очистки памяти
      curPalette = palette_arr[(uint8_t)((float)modes[currentMode].Scale/100*((sizeof(palette_arr)/sizeof(TProgmemRGBPalette16 *))-0.01U))];
}
C-like:
// ------------------------------ ЭФФЕКТ ЗВЁЗДЫ ----------------------
// (c) SottNick
// производная от эффекта White Warp
// https://github.com/marcmerlin/NeoMatrix-FastLED-IR/blob/master/Table_Mark_Estes_Impl.h
// https://github.com/marcmerlin/FastLED_NeoMatrix_SmartMatrix_LEDMatrix_GFX_Demos/blob/master/LEDMatrix/Table_Mark_Estes/Table_Mark_Estes.ino
//int16_t pointy, blender = 128;//, laps, hue, steper,  xblender, hhowmany, radius3, xpoffset[MATRIX_WIDTH * 3];
#define STAR_BLENDER 128U             // хз что это 
#define CENTER_DRIFT_SPEED 6U         // скорость перемещения плавающего центра возникновения звёзд

unsigned int  counter;//, ringdelay;//, bringdelay, sumthum;
//int16_t shifty = 6;//, pattern = 0, poffset;
int16_t radius2;//, fpeed[WIDTH * 3], fcount[WIDTH * 3], fcountr[WIDTH * 3];//, xxx, yyy, dot = 3, rr, gg, bb, adjunct = 3;
//uint8_t fcolor[WIDTH * 3];
//uint16_t h = 0, howmany;// ccoolloorr, why1, why2, why3, eeks1, eeks2, eeks3, oldpattern, xhowmany, kk;
float driftx, drifty;//, locusx, locusy, xcen, ycen, yangle, xangle;
float cangle, sangle;//xfire[WIDTH * 3], yfire[WIDTH * 3], radius, xslope[MATRIX_WIDTH * 3], yslope[MATRIX_WIDTH * 3]; 

//Дополнительная функция построения линий
void DrawLine(int x1, int y1, int x2, int y2, CRGB color)
{
  int tmp;
  int x,y;
  int dx, dy;
  int err;
  int ystep;

  uint8_t swapxy = 0;
  
  if ( x1 > x2 ) dx = x1-x2; else dx = x2-x1;
  if ( y1 > y2 ) dy = y1-y2; else dy = y2-y1;

  if ( dy > dx ) 
  {
    swapxy = 1;
    tmp = dx; dx =dy; dy = tmp;
    tmp = x1; x1 =y1; y1 = tmp;
    tmp = x2; x2 =y2; y2 = tmp;
  }
  if ( x1 > x2 ) 
  {
    tmp = x1; x1 =x2; x2 = tmp;
    tmp = y1; y1 =y2; y2 = tmp;
  }
  err = dx >> 1;
  if ( y2 > y1 ) ystep = 1; else ystep = -1;
  y = y1;

  for( x = x1; x <= x2; x++ )
  {
    if ( swapxy == 0 ) drawPixelXY(x, y, color);
    else drawPixelXY(y, x, color);
    err -= (uint8_t)dy;
    if ( err < 0 ) 
    {
      y += ystep;
      err += dx;
    }
  }
}

void drawstar(int16_t xlocl, int16_t ylocl, int16_t biggy, int16_t little, int16_t points, int16_t dangle, uint8_t koler)// random multipoint star
{
//  if (counter == 0) { // это, блин, вообще что за хрень была?!
//    shifty = 3;//move quick 
//  }
  radius2 = 255 / points;
  for (int i = 0; i < points; i++)
  {
    //DrawLine(xlocl + ((little * (sin8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
    //DrawLine(xlocl + ((little * (sin8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), CHSV(koler , 255, 255));
    // две строчки выше - рисуют звезду просто по оттенку, а две строчки ниже - берут цвет из текущей палитры
    DrawLine(xlocl + ((little * (sin8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 + radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), ColorFromPalette(*curPalette, koler));
    DrawLine(xlocl + ((little * (sin8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), ylocl + ((little * (cos8(i * radius2 - radius2 / 2 - dangle) - 128.0)) / 128), xlocl + ((biggy * (sin8(i * radius2 - dangle) - 128.0)) / 128), ylocl + ((biggy * (cos8(i * radius2 - dangle) - 128.0)) / 128), ColorFromPalette(*curPalette, koler));
    }
}

//uint8_t bballsCOLOR[bballsMaxNUM] ;                   // цвет звезды (используем повторно массив эффекта Мячики)
//uint8_t bballsX[bballsMaxNUM] ;                       // количество углов в звезде (используем повторно массив эффекта Мячики)
//int   bballsPos[bballsMaxNUM] ;                       // задержка пуска звезды относительно счётчика (используем повторно массив эффекта Мячики)
//uint8_t bballsNUM;                                    // количество звёзд (используем повторно переменную эффекта Мячики)

void starRoutine() {
  //dimAll(255U - modes[currentMode].Scale * 2);
  dimAll(89U);
  //dimAll(myScale8(modes[currentMode].Scale));

  if (loadingFlag)
  {
    loadingFlag = false;
    setCurrentPalette();

    driftx = random8(4, WIDTH - 4);//set an initial location for the animation center
    drifty = random8(4, HEIGHT - 4);// set an initial location for the animation center
    
    cangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation gives a float value between -1 and 1
    sangle = (sin8(random(25, 220)) - 128.0) / 128.0;//angle of movement for the center of animation in the y direction gives a float value between -1 and 1
    //shifty = random (3, 12);//how often the drifter moves будет CENTER_DRIFT_SPEED = 6

    //pointy = 7; теперь количество углов у каждой звезды своё
    bballsNUM = (WIDTH + 6U) / 2U;//(modes[currentMode].Scale - 1U) / 99.0 * (bballsMaxNUM - 1U) + 1U;
    if (bballsNUM > bballsMaxNUM) bballsNUM = bballsMaxNUM;
    for (uint8_t num = 0; num < bballsNUM; num++) {
      bballsX[num] = random8(3, 9);//pointy = random8(3, 9); // количество углов в звезде
      bballsPos[num] = counter + (num << 2) + 1U;//random8(50);//modes[currentMode].Scale;//random8(50, 99); // задержка следующего пуска звезды
      bballsCOLOR[num] = random8();
    }

  }

  
  //hue++;//increment the color basis был общий оттенок на весь эффект. теперь у каждой звезды свой
  //h = hue;  //set h to the color basis
  counter++;
  if (driftx > (WIDTH - spirocenterX / 2U))//change directin of drift if you get near the right 1/4 of the screen
    cangle = 0 - fabs(cangle);
  if (driftx < spirocenterX / 2U)//change directin of drift if you get near the right 1/4 of the screen
    cangle = fabs(cangle);
  if (counter % CENTER_DRIFT_SPEED == 0)
    driftx = driftx + cangle;//move the x center every so often

  if (drifty > ( HEIGHT - spirocenterY / 2U))// if y gets too big, reverse
    sangle = 0 - fabs(sangle);
  if (drifty < spirocenterY / 2U) // if y gets too small reverse
    sangle = fabs(sangle);
  if ((counter + CENTER_DRIFT_SPEED / 2U) % CENTER_DRIFT_SPEED == 0)
    drifty =  drifty + sangle;//move the y center every so often
  
  //по идее, не нужно равнять диапазоны плавающего центра. за них и так вылет невозможен
  //driftx = constrain(driftx, spirocenterX - spirocenterX / 3, spirocenterX + spirocenterX / 3);//constrain the center, probably never gets evoked any more but was useful at one time to keep the graphics on the screen....
  //drifty = constrain(drifty, spirocenterY - spirocenterY / 3, spirocenterY + spirocenterY / 3);

  for (uint8_t num = 0; num < bballsNUM; num++) {
    if (counter >= bballsPos[num])//(counter >= ringdelay)
    {
      if (counter - bballsPos[num] <= WIDTH + 5U) {  //(counter - ringdelay <= WIDTH + 5){
        //drawstar(driftx  , drifty, 2 * (counter - ringdelay), (counter - ringdelay), pointy, blender + h, h * 2 + 85);
        drawstar(driftx  , drifty, 2 * (counter - bballsPos[num]), (counter - bballsPos[num]), bballsX[num], STAR_BLENDER + bballsCOLOR[num], bballsCOLOR[num] * 2);//, h * 2 + 85);// что, бл, за 85?!
        bballsCOLOR[num]++;
      }
      else
        //bballsX[num] = random8(3, 9);//pointy = random8(3, 9); // количество углов в звезде
        bballsPos[num] = counter + (bballsNUM << 1) + 1U;//random8(50, 99);//modes[currentMode].Scale;//random8(50, 99); // задержка следующего пуска звезды
    }
  }
}
 

Shaitan

★★★✩✩✩✩
17 Фев 2020
149
142
Новый
Эффект Дым
ошибка
в 52 строке вместо
leds[XY((deltaHue2 + HEIGHT - y - 1U)%WIDTH, HEIGHT - y)] += color;
подозреваю надо как и в 58
leds[XY((deltaHue2 + HEIGHT - y - 1U)%WIDTH, HEIGHT - y - 1u)] += color;
иначе при y==0 выходим за пределы массива
 
  • Лойс +1
Реакции: Сотнег

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
@Shaitan, ну оно работает, вид не портит, поэтому здесь исправлять поленился.
А в прошивке всё сделано.

ПС: и оптимизировано, кстати, немного.
 
Изменено:
  • Лойс +1
Реакции: Belokota и Shaitan

Shaitan

★★★✩✩✩✩
17 Фев 2020
149
142
@Shaitan, ну оно работает, вид не портит, поэтому здесь исправлять поленился.
А в прошивке всё сделано.
ПС: и оптимизировано, кстати, немного.
а я добавил в прошивку, и у меня глюки начались, то количество mp3 файлов поменялось, то он время воспроизвел.... в общем портил мне переменные, как мог. :)
 
  • Лойс +1
Реакции: Сотнег

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
@Shaitan, а ведь действительно.
Я почему-то думал, что там функция проверки диапазона отрабатывает,
а её нет.
Странно, что вообще работало. Подправлю тут тоже.
 

NordA

✩✩✩✩✩✩✩
9 Янв 2020
7
1
Народ, подскажите по лампе на простой ардуинке.
В архиве две версии. GyverLamp_v1.4_Arduino_v1.0 компилится и нормально работает с библиотекой GyverButton 2.12 из того же архива.
GyverLamp_v1.4_Arduino_v1.2 c ней не компилится.
Нашел GyverButton 2.15. С ней компилится, но не переключаются эффекты и нет выключения, работает яркость и сохранение на 5 кликов.
Как заставить работать GyverLamp_v1.4_Arduino_v1.2?
 

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
@NordA, попробуйте другие версии библиотеки ну или автора спросить.
Скорее всего, он просто забыл обновить библиотеку.
v2.12 попробуйте. Она в других прошивках лежит.

А чем первая версия прошивки не устраивает?
 

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
Друзья! Вот и я наконец-таки создал эту чудо-лампу! Огненную лампу!

По образу и подобию я взял в качестве основания - корпус от пожарного датчика. Снизу закрепил заглушку на 50 мм и уже на нее надел трубу с закрепленной LED матрицей. Паяльника по рукой не было, поэтому все сделал на скрутке и закрепил синей изолентой. Куда же без неё :)
Набор для лампы заказал на Алике, все пришло в целости и сохранности до Москвы за 19 дней! Сначала собрал и запустил на столе, потом уже сделал все в корпусе. Прошивку поставил от gunner47 v1.5, приложение на iPhone - Arduino Lamp. Все сделал по инструкции, проблем не возникло.
Теперь лампа стоит на столе и радует глаз! Особенно вечером, когда в комнате становится темно и включается эффект - Ламповый огонь! Бесподобно!
Огромное спасибо Алексу Гайверу, gunner47 и все ребятам, кто поддерживает этот проект! Респект!!!

Также я сделал небольшой видео обзор этой лампы. Можете посмотреть, как все получилось)
Рекомендую добавить рассеиватель.
Пикселизацию заметно.
 
  • Лойс +1
Реакции: YES IDI

YES IDI

★✩✩✩✩✩✩
11 Фев 2020
20
13
Рекомендую добавить рассеиватель.
Пикселизацию заметно.
Рассеиватель стоит, трубу обмотал двумя слоями кальки. Пробовал отдалять ее на некоторое расстояние от трубы, получалось не очень. Заметно было, что в лампе что-то присутствует постороннее. Поэтому пока остановился на этом результате.

Может еще поэкспериментирую с рассеивателем из папки-скоросшивателя :) Писали, что она тоже неплохо справляется со своей задачей.
 

YES IDI

★✩✩✩✩✩✩
11 Фев 2020
20
13
Хорошо, будет время - проверю.

А так - попробовал намотать еще несколько слоев кальки на трубку. Стало лучше, но пиксели все равно не пропадают. А вот если обмотать калькой внутреннюю поверхность самого плафона, увеличив тем самым его свойства рассеивать, получается классный эффект, особенно у огня. НО! Остальные эффекты теряются, время практически не видно, следы матрицы расплывчаты и т.д.
Поэтому нужно искать идеальную середину :)
 

NordA

✩✩✩✩✩✩✩
9 Янв 2020
7
1
@NordA, попробуйте другие версии библиотеки ну или автора спросить.
Скорее всего, он просто забыл обновить библиотеку.
v2.12 попробуйте. Она в других прошивках лежит.

А чем первая версия прошивки не устраивает?
Во второй вроде костер интереснее.
С библой 2.12 пишет:
exit status 1
'class GButton' has no member named 'getHoldClicks'; did you mean 'getClicks'?
Если исправить на getClicks, компилится, но выключения и смены эффектов все равно нет
С какой библиотекой делался скетч?
 

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
@Владимир Яцеленко, это 2304 пикселя.
Начинайте с gunner47 v.1.4, потом пробуйте новее, если всё будет работать,
и вы справитесь с проблемами электронной части.
 

Владимир Яцеленко

✩✩✩✩✩✩✩
23 Янв 2020
2
0
@Сотнег, что-то не вижу там таких настроек, подскажите где это настроить?
матрица 3х3 должна работать как цельный экран


// --- МАТРИЦА -------------------------
#define BRIGHTNESS (255U) // стандартная маскимальная яркость (0-255)
#define CURRENT_LIMIT (10000U) // лимит по току в миллиамперах, автоматически управляет яркостью (пожалей свой блок питания!) 0 - выключить лимит

#define WIDTH (6U) // ширина матрицы
#define HEIGHT (18U) // высота матрицы

#define COLOR_ORDER (GRB) // порядок цветов на ленте. Если цвет отображается некорректно - меняйте. Начать можно с RGB

#define MATRIX_TYPE (0U) // тип матрицы: 0 - зигзаг, 1 - параллельная
#define CONNECTION_ANGLE (3U) // угол подключения: 0 - левый нижний, 1 - левый верхний, 2 - правый верхний, 3 - правый нижний
#define STRIP_DIRECTION (2U)
 

Сотнег

★★★★★★★
15 Янв 2020
4,104
1,434
@Владимир Яцеленко, матрицу писать размером 48х48,
а ещё придётся самостоятельно переписать под себя функцию getPixelNumber()
и её копию сделать под именем XY().

Угол, зигзаг и прочее про матрицу нет смысла настраивать, потому что адресацию всё равно переделывать нужно.

@Владимир Яцеленко, а, ну да.
Вообще нет смысла что-то настраивать и переделывать, кроме
WIDTH 48
HEIGHT 48

пока прошивка не заработает и часть эффектов типа Конфетти.