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

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

  • BMP280

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

    Голосов: 71 73.2%

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

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Я видел этот пост. Мне нужно понимать как сейчас работает программа и что от неё ожидается на самом деле. Опишите по подробнее...
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Sergo_ST, работает только если выставить диапазон с нуля, если с 23 часов и т.д., то нет)
 

Влад78

✩✩✩✩✩✩✩
6 Июн 2023
37
1
Всем добрый день.
Часы работают. На этой неделе с мониторинга приходили уведомления о том, что не передаёт данные. Через пару часов все норм. Ничего не менял, т к. Не смогу к ним подключиться в браузере. IP есть, но не видны настройки часов... Белый экран, что с телефона, что с компьютера
 
Изменено:

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, А, там про яркость речь была...
Используйте просто эту функцию:
C++:
boolean checkHourStrart(uint8_t _start, uint8_t _end, uint8_t _hour) //установка яркости от времени суток(час начала ночного режима, час окончания ночного режима, текущий час)
{
  return ((_start > _end && (_hour >= _start || _hour < _end)) || (_start < _end && _hour >= _start && _hour < _end));
}
Передаёте час начала ночного режима, час окончания ночного режима и текущий час. Возвращает ночной режим сейчас(true) или нет(false).
 
Изменено:
  • Лойс +1
Реакции: poty

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Влад78, такие проблемы периодически бывают. Тут много факторов, чаще всего проблемы с интернетом у провайдера. Или отключали электричество.

@Sergo_ST, спасибо, буду за ПК, постараюсь разобраться)
 

Влад78

✩✩✩✩✩✩✩
6 Июн 2023
37
1
@ASM,
Или отключали электричество.
Вчера в этот момент я был дома и все работало, интернет был, электричество в наличии, часы работали штатно (визуально). Стал подключаться к ним и меня постигла беда, никак не могу через хаб.
 

kym13

★★★✩✩✩✩
14 Ноя 2020
716
118
@Sergo_ST, Проблема такая, точки не переключается на 2 раза в сек. и не переходят в ночной режим
 
  • Лойс +1
Реакции: maksland

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@kym13, Ну с точками всё просто, интервал применяется только при запуске программы, тк условие находится в объявлении экземпляра класса:
C++:
static gh::Timer timer(c.mode_sec ? 500 : 1000);
А нужно во первых объявить таймер глобально и задать какой нибудь интервал по умолчанию, например 1сек.
C++:
gh::Timer timerDot(1000);
А при запуске программы/изменении режима из программы изменять уже интервал соответствующим методом:
C++:
timerDot.setTime(c.mode_sec ? 500 : 1000);
 
  • Лойс +1
Реакции: maksland

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
Ну с точками всё просто
поправил, проблема осталась) я думаю проблема не в коде)
в проекте проблема есть, а на новой ESP проблемы нет) надо будет попробовать удалить настройки или установить на чистую)
сейчас пока занят, позже попробую...
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Покажите как сделали, куда что добавили/удалили. И опишите тогда ещё раз проблему по подробнее.
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Sergo_ST,
C++:
gh::Timer timerDot(1000);
void timeToDots() {
  static bool showDot = false;
  showDot ? Dots(Dot) : Dots(!Dot);
  timerDot.setTime(c.mode_sec ? 500 : 1000);
  if (timerDot) {
    showDot = !showDot;
    hlog.println((String)NTP.second() + "   " + showDot);
  }
}
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Нус, так делать не совсем правильно, устанавливать интервал всё же стоит по событию, например изменения настройки, ну или хотяб в условии самого таймера... Но для отладки пойдет...
Так-же в отладку неплохо бы было вывести текущее состояние переменной c.mode_sec...

В любом случае предыдущая конструкция не имела смысла, тк настройка интервала бы применялась только один раз после запуска программы и создания экземпляра класса, далее изменение этой настройки не будет давать никакого результата(во всяком случае до перезагрузки устройства/перезапуска программы, и то, при условии что настройки будут считаны раньше чем создастся экземпляр класса).

И вы так не ответили на вопрос - что именно не так с миганием? Может я не совсем понял о чём речь...

Просто в моём понимании "мигание два раза в секунду" это два включения и два выключения точки за одну секунду. А у вас получается или переключение состояния точки раз в секунду, или одно включение и одно выключение раз в секунду.
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Sergo_ST, точки меняют состояние либо раз в секунду, либо два раза в секунду) кому как нравится)
C++:
hlog.println((String)NTP.second() + "   " + showDot + "   " + timerDot + "   " + c.mode_sec);
я сделал лог в таком виде, и вижу, что таймер нулевой...
попробую тот же лог в оригинальном коде, без переделки) делаю все на ходу)
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Что имеется ввиду под фразой "таймер нулевой"? То что "timerDot" возвращает "0" в логе отладки после условия "if (timerDot)"?
Так это нормально, вы же уже прочитали его состояние в условии, получили в ответ "1", и в следующий раз там будет "1" только после истечения заданного интервала...
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
C++:
  static gh::Timer timerDot(500);
  if (timerDot) {
    showDot = !showDot;
    hlog.println((String)NTP.second() + "   " + showDot + "   " + a);
    showDot ? Dots(Dot) : Dots(!Dot);
  }
лог работы
Код:
52   0   500
53   1   500
54   0   500
55   1   500
а вот лог работы этого же кода на другой плате)
Код:
42   0   500
43   1   500
43   0   500
44   1   500
как видно, на 43 секунде две смены, как и должно быть
 
Изменено:

Elektronik777

✩✩✩✩✩✩✩
8 Апр 2023
3
0
Уважаемые форумчане, я заканчиваю сборку своего экземпляра и хочу сказать огромнейшее спасибо Алексу Гайверу за начало проекта, разработчику ПО сего чудного девайса и всем тем, кто помогает в допиливании проекта.

От себя хочу внести правки в комментарий в прошивке.
В разделе Constants 21 строка.
Как написан комментарий.
21 // один вывод фоторезистора на пин A0, или любой другой, второй на GND. Между GND и питанием ставим резистор

Как вижу я должен быть написан (исходя из своего небольшого опыта и схемы к проекту).
21 // один вывод фоторезистора на пин A0 (если у вас wemos D1mini), или любой другой (если на плате есть аналоговые входы АЦП), второй на GND. Между выводом фоторезистора (А0) и питанием ставим резистор.
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Попробуйте вот так, что будет в логе на обеих платах?
C++:
gh::Timer timerDot(1000);
void timeToDots() {
  static bool showDot = false;
  if (timerDot) {
    timerDot.setTime(c.mode_sec ? 500 : 1000);
    showDot = !showDot;
    Dots(showDot);
    hlog.println(String(NTP.second()) + "   " + millis() + "   " + timerDot.getTime() + "   " + showDot);
  }
}
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Sergo_ST,
проект:
19   33330   500   0
20   34331   500   1
21   35330   500   0
плата:
49   10612   500   1
50   11113   500   0
50   11614   500   1
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Интересно... А так?
C++:
void timeToDots() {
  static bool showDot = false;
  static uint16_t period = 0;
  static uint32_t timer = millis();
  if ((millis() - timer) >= period) {
    timer = millis();
    period = (c.mode_sec) ? 500 : 1000;
    showDot = !showDot;
    Dots(showDot);
    hlog.println(String(NTP.second()) + " " + millis() + " " + period + " " + showDot);
  }
}
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Sergo_ST,
проект:
19 18830 500 1
20 19830 500 0
21 20830 500 1
22 21830 500 0
плата:
3 22559 500 0
4 23062 500 1
4 23564 500 0
5 24067 500 1
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Уточните, что обозначают подписи "проект" и "плата"? Вы где-то в симуляторе запускаете код в первом варианте?
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Sergo_ST, проект, это готовые часы, т.е. эта тема.
плата, чистая ESP из ящика.
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Вы собираете исходник тот что на гит-хабе сейчас актуальный?
 

ASM

★★★★★✩✩
26 Окт 2018
1,918
422
@Sergo_ST, нет, но он похожий. в том тоже проблема эта сохраняется, раз люди пишут)
 

Sergo_ST

★★★★★★✩
15 Мар 2020
1,094
885
@ASM, Скиньте в лс ту прошивку что вы сейчас используете, или же, попробуйте процедуру из поста 2270 на прошивке из гит-хаба.

По всей видимости есть ещё какой-то вложенный таймер или задержка на 1 секунду, который(ая) и ограничивает частоту мигания...

И я даже уже понял что... У вас раз в секунду идёт блокирующий опрос датчика ds18b20. Вот и ответ, на плате с датчиком - есть задержка(тк датчик отвечает и мы ждём ответа), а на плате без - нет задержки(тк датчика нет и процедура ожидания скипается)...

Варианта два - или уменьшить разрешение датчика до 9 бит(тогда задержка будет всего 100мс), либо использовать асинхронное чтение датчика(либа вроде поддерживает это).
 
  • Лойс +1
Реакции: ASM