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

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

  • BMP280

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

    Голосов: 71 73.2%

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

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@mps33, не знаком этот датчик) да и куда его ставить? Фоторезистор аккуратно можно приспособить...
 

mps33

✩✩✩✩✩✩✩
21 Мар 2019
13
3
Возможность использовать фоторезистор осталась.
 

Вложения

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

kym13

★★★✩✩✩✩
14 Ноя 2020
716
118
@mps33, Вы скетчем с изменениями где датчик ВН1750 поделитесь, а мы потестируем, благо есть на чём.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@mps33, ну у меня в проекте есть возможность использовать как один фоторезистор, так и китайский модуль с ним, аналог и цифра.
 

mps33

✩✩✩✩✩✩✩
21 Мар 2019
13
3
@mps33, Вы скетчем с изменениями где датчик ВН1750 поделитесь, а мы потестируем, благо есть на чём.
Надо будет попробовать, не обещаю. Дело в том, что я взял за основу этот проект для Электроники-7, а там в одном сегменте матрица из 88(8х11) диодов. Много переписано.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Изменено:

poty

★★★★★★★
19 Фев 2020
3,543
1,010
@ASM, рекурсивный вызов функции расходует стек. Классический подход (циклы) гораздо правильнее и понятнее. Если повторов нужно всего 4, то проще просто написать 4 раза вызов нужной функции.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@poty,
C++:
byte test = 0;
void rtcCheck() {
  WiFi.setAutoReconnect(true);
  NTP.updateNow();

  if (!c.rtc_check) {
    if (NTP.getUnix() < 12345) {
      Serial.println("Время получено неправильное!");
      test++;
      delay(5000);
      if (test == 4) {
        test = 0;
        return;
      }
      rtcCheck();
    }
  }
}
вот этот пример в упрощенном виде)

рекурсия тут прямо вписывается)
 

poty

★★★★★★★
19 Фев 2020
3,543
1,010
@ASM,
в этом решении
WiFi.setAutoReconnect(true)
для чего-то вызывается несколько раз, а test является глобальной переменной напрасно расходующей память.
Если подходить "в лоб", то конструкция:
Вариант "в лоб":
void rtcCheck() {
    WiFi.setAutoReconnect(true);
    for (byte test=0; test < 4; test++) {
        NTP.updateNow();
        if (c.rtc_check) return;
        if (NTP.getUnix() > 12345) return;
        Serial.println("Время получено неправильное!");
        delay(5000);
    }
}
выглядит гораздо понятней и презентабельней.
 
  • Лойс +1
Реакции: Sergo_ST

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
для чего-то вызывается несколько раз
зато стабильно держит WiFI
test является глобальной переменной
так и задумано, она используется в нескольких местах, это я код упростил, для наглядности.
так то могу и в функцию занести...

в прошивке можно использовать модуль rtc, можно и без него.
соответственно проверка так и идет...
 
Изменено:

poty

★★★★★★★
19 Фев 2020
3,543
1,010
зато стабильно держит WiFI
именно из-за многократного повторения при инициализации? Мне кажется, ерунда это всё.
так и задумано
так вот о том, что это плохо задумано, Вам и говорят.
так то могу и в функцию занести...
с рекурсией - только как static, это значит, что память всё равно будет занята.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Зачем за память переживать, это же не нано. Даже если сделать по "науке", изменения в процентах не заметны.
 

AlChel

★✩✩✩✩✩✩
20 Апр 2022
33
12
@ASM, привет. А можно добавить включение ночного режима еще и в зависимости от яркости в помещении? Например,включение ночного режима настроено на 22 часа, но если в комнате горит свет, то переходить в ночной режим часам как бы и не зачем. Я себе делал так на старой прошивке, но в новой версии много чего поменялось, и я чего то уже не соображу как сделать.
1.jpg
 
  • Лойс +1
Реакции: kym13

AlChel

★✩✩✩✩✩✩
20 Апр 2022
33
12
Фух, вроде получилось:)
Захват-1.jpg
Пришлось так секцию BrightnessCheck перетасовать, надеюсь правильно, но вроде все работает

BrightnessCheck:
//////////// функция освещенности
void Brightness() {
  static gh::Timer timer(o.brg * 1000);  // как часто проверять изменение по датчику освещенности в сек
  if (timer) {
    if (o.auto_brg) {                  // если включена автояркость
        if (o.type_brg) new_brg = o.min_max ? map(digitalRead(BRG_PIN), 7, 1023, o.min_brg, o.max_brg) : map(digitalRead(BRG_PIN), 7, 1023, o.max_brg, o.min_brg);  // тип датчика цифра
        if (!o.type_brg) new_brg = o.min_max ? map(analogRead(BRG_PIN), 7, 1023, o.min_brg, o.max_brg) : map(analogRead(BRG_PIN), 7, 1023, o.max_brg, o.min_brg);   // тип датчика аналог
        FastLED.setBrightness(new_brg);  // устанавливаем яркость
        if (c.change_color == 0) ledColor = ColorTable[c.led_color];
        flag_night = false;
    } else {
      if (!o.auto_brg) FastLED.setBrightness(o.min_brg);}
      if (new_brg < o.light_night && o.night_mode && ((o.start_night > o.stop_night && (hour >= o.start_night || hour < o.stop_night)) || (o.start_night < o.stop_night && hour >= o.start_night && hour >= o.start_night && hour < o.stop_night)))
      {
      FastLED.setBrightness(o.night_brg); // яркость ночного режима
      ledColor = ColorTable[o.night_color];
      flag_night = true;
     }     
  }
}
 

kym13

★★★✩✩✩✩
14 Ноя 2020
716
118
@AlChel, Вы весь скетч выложите, там же наверное ещё и в WEB морде изменения
 

AlChel

★✩✩✩✩✩✩
20 Апр 2022
33
12
@kym13,
Надо чтоб проверил кто-то, я так то вообще не программист, методом тыка все делаю :)
 

Вложения

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

kym13

★★★✩✩✩✩
14 Ноя 2020
716
118
@AlChel, Вроде всё работает как надо, погоняю сутки посмотрю.
 

Вложения

  • 78.5 KB Просмотры: 18

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Глянул я код, есть сомнения в работе яркости, если выключена автояркость...
Есть у меня мысли, как можно упростить)
Дождусь результатов от @kym13
 

kym13

★★★✩✩✩✩
14 Ноя 2020
716
118
@ASM, Проработали почти сутки никаких багов не вылезло. В ночном режиме(у меня только часы) при включении света в комнате переходят в обычный режим т.е. отображают показания и т.д., после выключения света переходят в обычный ночной режим. Порог яркости при котором часы переходят из ночного в обычный режим и обратно выставляется в WEB. ...если выключена автояркость... то часы светят на минимально установленной в WEB яркости.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@kym13, это так, но если выключена автояркость, попробуй перезагрузить и потестить.
Замера нет, при выключенной автояркости.
 
  • Лойс +1
Реакции: kym13

kym13

★★★✩✩✩✩
14 Ноя 2020
716
118
@ASM, Проверил, перезагружал из WEB и отключал питание яркость устанавливается минимально установленная в WEB

Перевел в ночной отключил автояркость перезагрузил при включении светились примерно если установить 5 в минималке
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@kym13, а ночной режим как отрабатывает в этот момент, по идее, текущее освещение считается за ноль.