ESP, IoT [BigClock] Большие часы на WS2812, ESP8266, Народный мониторинг

Какой вариант датчика используется у вас? Интересно, использует ли кто BME280, как у меня?)

  • BMP280

    Голосов: 26 26.8%
  • BME280

    Голосов: 71 73.2%

  • Всего проголосовало
    97

maksland

★★★✩✩✩✩
13 Янв 2019
614
144
Omsk
-30, CRGB:: MediumSlateBlue 0x7B68EE
-20, CRGB:: Blue, 0x0000FF
-10, CRGB:: DeepSkyBlue,0x00BFFF
0, CRGB:: DeepSkyBlue,0x00BFFF
10, CRGB:: MediumSpringGreen 0x00FA9A
20, CRGB:: Lime 0x00FF00 или LimeGreen 0x32CD32
30, CRGB:: DarkOrange 0xFF8C00 или Orange 0xFFA500

предложение Сотнег тоже интересно
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
-10, CRGB:: DeepSkyBlue,0x00BFFF
0, CRGB:: DeepSkyBlue,0x00BFFF
одинаковы же?)
предложение @Сотнег тоже интересно
не один из вариантов не рабочий, судя по эмулятору)

возможно палитра не работает с минусовыми диапазонами...
 
Изменено:

Сотнег

★★★★★★★
15 Янв 2020
4,587
1,552
@ASM,
CRGBPalette256 работает ведь.

В моём примере кода отрицательные значения приводятся к положительным.
 

maksland

★★★✩✩✩✩
13 Янв 2019
614
144
Omsk
да "0" это такая штука ...то она есть, то её нет
время жизни нуля мимолетно, жирно какой то цвет для него отдельно делать, вот +1 уже да !
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
Прикольнулся задал неро сити вот её ответ
C++:
#include <iostream>
#include <cmath>

int main() {
    double temperature = -10.0;
    double red, green, blue;

    if (temperature < 0) {
        blue = 255;
        red = 0;
        green = 0;
    } else if (temperature > 0) {
        blue = 0;
        red = 255;
        green = 0;
    } else {
        blue = 0;
        red = 0;
        green = 255;
    }

    double t = std::abs(temperature);
    double factor = t / 10.0;

    red *= factor;
    green *= factor;
    blue *= factor;

    std::cout << "RGB Color: (" << red << ", " << green << ", " << blue << ")" << std::endl;

    return 0;
}
 

Сотнег

★★★★★★★
15 Янв 2020
4,587
1,552
@ASM,
1. Зайти по ссылке на эмулятор.
2. Заменить в коде в эмуляторе палитру после строки DEFINE_GRADIENT_PALETTE (оставив название).
3. Заменить CRGBPalette16 на CRGBPalette256.
4. Выбрать размер "экрана" 16х16.

Помигать цветом нужной температуры можно, если заменить число 51 в коде на (128 - температура).
Либо на (128 - температура *2), если брать второй вариант палитры с удвоенной градацией.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Сотнег, я так и делал)
в общем, подобрал код ColorFromPalette(MyPalette, color_index, 255, NOBLEND);
тогда градиент работает, не двоится, теперь попробую адаптировать под свои цвета.

получилось)
C++:
 DEFINE_GRADIENT_PALETTE( Temperature ) {
         0,  123,   104,   238,   //MediumSlateBlue
128 -30 *2,    0,     0,   255,   //Blue
128 -20 *2,    0,   191,   255,   //DeepSkyBlue
128  +0 *2,  176,   224,   230,   //PowderBlue
128 +10 *2,  238,   232,   170,   //PaleGoldenrod
128 +20 *2,  255,   255,     0,   //Yellow
       255,  255,     0,     0 }; //Red
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Подобрал плавную смену цвета, получилось красиво)
C++:
         0,    0,     0,   139,   //DarkBlue
128 -30 *2,    0,     0,   255,   //Blue
128 -20 *2,   30,   144,   255,   //DodgerBlue
128 -10 *2,    0,   191,   255,   //DeepSkyBlue
128  +0 *2,  176,   224,   230,   //PowderBlue
128 +10 *2,  238,   232,   170,   //PaleGoldenrod
128 +20 *2,  255,   255,     0,   //Yellow
128 +30 *2,  255,   165,     0,   //Orange
       255,  255,     0,     0    //Red
 
Изменено:

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@ASM,я конечно понимаю что уже спрашивал но я никак не пойму почему уличный опрашивает вовремя запуска и все больше не меняет температуру до следующей перезагрузки сейчас уже датчик взял другой опять от платы 10см резюк 4.7 советский поставил но все равно ни в какую . и похоже проблема ток у меня такая
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@wulf, попробуй последнюю версию, как в ней себя ведет?)
возможно что-то не так с датчиком делаешь?
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
залита версия где палитру начали делать дачик подключен верно если наоборот он греется тогда

может можно где то и частотой опроса поиграть?
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Тестируйте, экспериментируйте)
сделал для уличной и домашней, чтобы можно было тестировать)
немного работает не так, если не решит никто, потом гляну)
 

Вложения

  • Лойс +1
Реакции: maksland

maksland

★★★✩✩✩✩
13 Янв 2019
614
144
Omsk
в общем так - скомпилировал дома, по удаленке (1.4 км) залил в часы.
поигрался с настройками наблюдая через камеру видеонаблюдения в телефоне (картинка ЧБ но вижу что цвет меняется )
"сделал для ........ и домашней" смена цвета от температуры?

-28 показывает почти белым
 
Изменено:

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
чет купил не подумав а dht22 будит ли работать тут 🤔
C++:
void TempToArray() {  // Display temperature from DTH22 sensor on the screen
  if (DOT_TEMP == 1) {
    leds[NUM_LEDS - 1] = CRGB(0, 0, 0);
  }
  FtempH = (dht.readTemperature()) + other.cor_tempH;
  tempH = FtempH;
  //Serial.println((String)tempH + " | " + FtempH);
  Dots(!Dot);
  DigitTempH(digits[10], segment_4);  // degree symbol
  int digit = abs(tempH % 10);
  DigitTempH(digits[digit], segment_3);
  digit = tempH / 10;
  if (digit == 0) {
    DigitTempH(digits[12], segment_2);  // turn off leading zero if present
  } else {
    DigitTempH(digits[digit], segment_2);  // display as it is
    DigitTempH(digits[12], segment_1);     // disable segment 1
  }
}
я так понимаю должно выглядить вот так для считывания
а библиотеки менять надо нет?
и на какие
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
dht22 будит ли работать тут
без библиотеки не будет) находим библиотеку с dht, например тут есть пример...
смотрим как работает и правим запросы)
-28 показывает почти белым
значит на все цвета так показывает, не работает этот код)
у тебя тоже на оба дачика один цвет работает
немного работает не так, если не решит никто, потом гляну)
нашел один косяк, в главном файле исправьте 53 строку CRGBPalette256 myPalette = Temperature;

множитель *2 еще можно убрать у положительных температур, тогда цвета поинтереснее будут)
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@maksland, попробуй поиграться корректировкой температуры, как будет меняться яркость?)
осторожно, в мониторинг не отправь эти данные) посмотри интервал и проверь)
у меня -4 корректирую до -13 появляется желтый оттенок)
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
не знаю но у меня цвета улечного дачика работают в инверсии сменил чвета немного чтобы лутше видно было но расцветка минуса работает при плюсе и наобород
C++:
DEFINE_GRADIENT_PALETTE(Temperature){
  0, 0, 0, 139,                 //DarkBlue
  128 - 30 * 2, 0, 0, 255,      //Blue
  128 - 20 * 2, 70, 130, 180,   //SteelBlue
  128 - 10 * 2, 0, 255, 255,    //Aqua
  128 + 0 * 2, 255, 255, 255,   //White
  128 + 10 * 2, 0, 255, 0,  //Lime
  128 + 20 * 2, 240, 128, 128,    //LightCoral
  128 + 30 * 2, 255, 165, 0,    //Orange
  255, 255, 0, 0
};  //Red
нашол должно быть так
C++:
void DigitTemp(uint8_t digit, uint8_t cursor) {  // функция отображения символов
  for (uint8_t mask = 0b01000000; mask > 0; mask = mask >> 1) {
    for (uint8_t i = 0; i < LEDS_IN_SEGMENT; i++) {
      if (clck.new_god) {
        leds[cursor] = (digit & mask) ? ColorTable[rand() % NUM_COLORS - 1] : CRGB(0, 0, 0);
      } else {
        leds[cursor] = (digit & mask) ? ColorFromPalette(myPalette, 128 + tempS, 255, NOBLEND) : CRGB(0, 0, 0);
      }
      cursor++;
    }
  }
}
ну у меня это выглядит вот так на часах специально сменил цвет
IMG_20240220_230224.jpgIMG_20240220_230224.jpgIMG_20240220_230226.jpgIMG_20240220_230226.jpgIMG_20240220_230230.jpgIMG_20240220_230230.jpg
 
Изменено:

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@ASM,подскажи . буду делать часы человеку а он гипертоник спрашивал можно ли на давление палитру сделать .
насколько я понял нужно дабавить
C++:
void DigitPres(uint8_t digit, uint8_t cursor) {  // функция отображения символов
  for (uint8_t mask = 0b01000000; mask > 0; mask = mask >> 1) {
    for (uint8_t i = 0; i < LEDS_IN_SEGMENT; i++) {
      if (clck.new_god) {
        leds[cursor] = (digit & mask) ? ColorTable[rand() % NUM_COLORS - 1] : CRGB(0, 0, 0);
      } else {
        leds[cursor] = (digit & mask) ? ColorFromPalette(myPalette1, 128 + pres, 255, NOBLEND) : CRGB(0, 0, 0);
      }
      cursor++;
    }
  }
}
и палитру
C++:
CRGB ledColorPres;

DEFINE_GRADIENT_PALETTE(Pressure){
  0, 0, 0, 139,                 //DarkBlue
  128 - 30 * 2, 0, 0, 255,      //Blue
  128 - 20 * 2, 30, 144, 255,   //DodgerBlue
  128 - 10 * 2, 0, 191, 255,    //DeepSkyBlue
  128 + 0 * 2, 176, 224, 230,   //PowderBlue
  128 + 10 * 2, 238, 232, 170,  //PaleGoldenrod
  128 + 20 * 2, 255, 215, 0,    //Gold
  128 + 30 * 2, 255, 165, 0,    //Orange
  255, 255, 0, 0
};  //Red

CRGBPalette16 myPalette1 = Pressure;
ток не пойму как показания давления прописать или я еще где то ошибаюсь
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
198
27
@Сотнег, так чтоль
C++:
DEFINE_GRADIENT_PALETTE(Pressure){
  0, 0, 0, 139,                 //DarkBlue
  128 + Pres * 2, 0, 0, 255,      //Blue
  128 + Pres * 2, 30, 144, 255,   //DodgerBlue
  128 + Pres * 2, 0, 191, 255,    //DeepSkyBlue
  128 + Pres * 2, 176, 224, 230,   //PowderBlue
  128 + Pres * 2, 238, 232, 170,  //PaleGoldenrod
  128 + Pres * 2, 255, 215, 0,    //Gold
  128 + Pres * 2, 255, 165, 0,    //Orange
  255, 255, 0, 0
};  //Red

CRGBPalette16 myPalette1 = Pressure;