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

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

  • BMP280

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

    Голосов: 60 73.2%

  • Всего проголосовало
    82
[BigClock] Большие часы на WS2812, ESP8266, Народный мониторинг
Создаю отдельную тему по разработке прошивки на базе NodeMCU.

Мой проект сделан на ДВП, на нее наклеил ленту, объем цифрам сделал из сэндвич панели, поверх белый лист бумаги.
Корпус из дерева, покрашен акриловой краской, смесь белой и коричневой.

Данная прошивка проверяет время по NTP, часы RTC теоретически не нужны.
Барометр на базе BME280.
Имеется датчик освещенности и датчик DS18B20
Clock_схема.pngсхема пайки.jpgClock_схема3.jpg
Плата: NodeMCU 1.0 (ESP 12-E Module)
Если в качестве микроконтроллера вы используете Wemos D1 - в менеджере плат для компиляции все равно выбирайте "NodeMCU v1.0 (ESP-12E)", в противном случае, если выберете плату Wemos D1 (xxxx), - будет работать нестабильно.
Выбирайте ядро ESP версии 2.7.4.

ESP8266 (SDK v2.7+)

Необходимые библиотеки находим в репозитории программы IDE.
Настраиваем прошивку под себя, если нужно, меняем пароли для точки и OTA, WiFi можно не задавать.

Если не задавали настройки WiFi, то стартует точка, адрес стандартный 192.168.4.1 пароль по умолчанию administrator, задавать не менее 8 символов, иначе название точки не отобразится, а будет ее внутреннее имя, типа ESP12345.
Адрес портала http://clock.local/ или по IP адресу, выданному роутером.
Данные для OTA: имя: admin пароль: pass

Для подключения к сервису "Народный мониторинг" MAC адрес отображается на соответствующей странице, вводите этот адрес при регистрации устройства.

Новая версия на гитхаб, последние изменения и публикация свежих версий будет там)

Версия от 16.04.2023 CLOCK_ESP_2.0:
  • оптимизация под новый портал
  • переделано давление с инт на флоат для мониторинга
  • переделан интерфейс на UI
  • добавлена ручная синхронизация времени
  • заменена библиотека rtc на microDS3231
  • багфиксы)
  • добавлена в код точка, для десятичного знака уличной температуры
  • добавлена строка с версией прошивки
  • исправление даты
  • добавление DFPlayer, спасибо: @Maxx1200 и @Romshteks
  • добавлен режим с датой (номер 5)
  • обновлена библиотека EEManager (сбросятся настройки!!!)
  • добавлен режим с показом первого нуля в часах
  • добавлена возможность устанавливать цветовое оформление в настройках прошивки, визуальные правки
  • fix GMT
  • заменены библиотеки датчиков
  • визуальные правки
  • может что-то еще))
Проект на гитхаб со всеми библиотеками и mp3
  • Дофига изменений))
  • Появилась web страничка с настройками на базе GyverPortal.
  • Изменены библиотеки.
  • Переписан код, распределил по вкладкам.
исправлено:
  • баг со сменой цвета на последней цифре
добавлен
  • символ давления, включать в настройках
исправлено:
  • переделан вывод сегментов
  • переделана функция показа точек
добавлено:
  • выбор режима мигания секунд 1 и 2 раза в сек
  • можно вручную задать порядок отображения датчиков и время показа каждого датчика
  • откл. WiFi без мониторинга
  • корректировка показания датчиков
внедрение датчика BME280, добавлен режим влажности с возможностью включить символ проценты
[*]багфиксы
багфиксы
незначительные изменения кода (настройки под себя и комментарии)
  • все настройки вынесены в Constants, вроде:)
  • добавлен web сервер, для обновления через браузер, изначально прошить через кабель, потом можете вносить изменения под себя и обновляться через бинарный файл
  • добавлены библиотеки
  • изменение в коде, из-за выноса настроек:)
  • добавлен НГ режим :)
  • возможно исправлена анимация, про которую писали, с точками и цифрами :)
  • теперь при запуске часов идет проверка с датчика времени, и если все ОК, то запускаются часы без синхронизации
  • исправлена функция освещенности заменой switch на if/else
  • подправлен код с switch в других местах
Увидел в коде небольшую ошибку с НГ режимом, не важно, включен он или нет, все равно будет) только разными методами)
leds[cursor] = (digit & mask) ? CHSV(random(0, 255), random(0, 255), random(0, 255)) : CRGB (0, 0, 0);
leds[cursor] = (digit & mask) ? ledColor : CRGB (0, 0, 0);
  • исправлен НГ режим
  • отключена точка доступа за ненадобностью
  • оптимизирован код
  • выбор в настройках кол-во разделительных точек
  • можно запускать с RTC модулем и без него
  • изменена библиотека NTP
  • поправлен код :)
Внимание: у кого мигает первый светодиод, необходимо изменить ядро ESP на 2.7.4 (инструменты/Плата/Менеджер плат).
Новые версии нестабильные на октябрь 2021г.
 

Вложения

Изменено:

Комментарии

kym13

★★✩✩✩✩✩
14 Ноя 2020
529
74
@Divin,
Оба выхода работают. И цифровой выход прекрасно работает, проверенно. У Вас какой скетч использован?
 

Divin

★★★✩✩✩✩
30 Янв 2021
441
192
@kym13, новогодний, но еще не запускал на диодах, только собираю.
 

Старик Похабыч

★★★★★★★
14 Авг 2019
4,272
1,303
Москва
(D0,он дает либо ноль либо единицу, в нашем проекте бесполезная вещь).
Почему же бесполезная ? Там есть подстроечный резистор, который регулирует переход 0 в 1 и обратно.
Так вот если надо не плавно регулировать яркость. а переключать дневная/ночная, то это куда более удобное решение.
 
  • Лойс +1
Реакции: kym13

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
56
Таганрог
forum.wisecomp.ru
Как говорили моя бабушка (1911 года рождения)
А мне(после ваших слов), сразу вспомнилось выражение моей бабушки (после того как она увидела стринги!): В случае чего и обос..ся некуда! :)

Почему же бесполезная ? Там есть подстроечный резистор, который регулирует переход 0 в 1 и обратно.
Так вот если надо не плавно регулировать яркость. а переключать дневная/ночная, то это куда более удобное решение.
Дело в том, что в нашей прошивке изюминка как раз состоит в том чтоб плавно,в зависимости от освещенности, регулировать яркость светодиодов. А цифровой используется для включения/выключения, и не предусматривает плавного изменения состояния пина :).
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
529
74
@Divin,
Если модуль фоторезистора будет работать наоборот поменяй в строке 135 и 138 min и max местами.
 
  • Лойс +1
Реакции: Divin

ASM

★★★★★✩✩
26 Окт 2018
1,693
339
поменял режим WiFi на
C++:
  WiFi.mode(WIFI_STA);
точка доступа в WiFi исчезла, часы работают пока исправно...

П.С. бывают сбои при отправке показаний, не всегда отправляет показания.
 
Изменено:
  • Лойс +1
Реакции: Divin, kym13 и Leon111_09

Divin

★★★✩✩✩✩
30 Янв 2021
441
192
Вот что показывает монитор порта:
C++:
--------------- CUT HERE FOR EXCEPTION DECODER ---------------

Soft WDT reset

>>>stack>>>

ctx: cont
sp: 3ffffda0 end: 3fffffc0 offset: 01a0
3fffff40:  00000000 3ffee6a8 3ffeec10 4020276c
3fffff50:  00706300 00657461 80efeffe 70747400
3fffff60:  feefef00 80efeffe 696d6400 feef006e
3fffff70:  80efeffe feefeffe feefeffe feefeffe
3fffff80:  3fff06b8 3fff06b8 00000000 feefeffe
3fffff90:  feefeffe feefeffe feefeffe 3ffeed5c
3fffffa0:  3fffdad0 00000000 3ffeed1c 40211cd0
3fffffb0:  feefeffe feefeffe 3ffe852c 401013bd
<<<stack<<<

--------------- CUT HERE FOR EXCEPTION DECODER ---------------

ets Jan  8 2013,rst cause:2, boot mode:(3,7)

load 0x4010f000, len 3584, room 16
tail 0
chksum 0xb0
csum 0xb0
v2843a5ac
~ld

Booting Sketch...
Couldn't find RTC
Собрал без модуля часов - по ходу в скетче надо какуюто строку закомментировать? На часах ничего не отображается, но к роутеру есп подключается, веб морды нет - трудно понять что происходит.
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
529
74
@Divin,
По моему без модуля часов работать не будет.
Он же Вам пишет внизу
Booting Sketch...
Couldn't find RTC
Загрузочный Эскиз...
Не удалось найти RTC
 

ASM

★★★★★✩✩
26 Окт 2018
1,693
339
@Divin, нужно поправить код, чтобы данные брались из переменной, а не из модуля, как я понимаю) записать время в переменную, а не в модуль.
 

Divin

★★★✩✩✩✩
30 Янв 2021
441
192
@kym13, , будем паять часы, придется ишшо батарейку покупать к ним :(
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
529
74
@Divin,
Попробуйте закоментировать строки со 105 по 108
Батарейку можно и не ставить, пока питание идет время сбиваться не будет.
 
  • Лойс +1
Реакции: Divin

Divin

★★★✩✩✩✩
30 Янв 2021
441
192
@kym13,
C++:
 FastLED.setMaxPowerInVoltsAndMilliamps (5, milliamp);
  if (!rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }
У меня в скетче 105 строка - FastLED.setMaxPowerInVoltsAndMilliamps (5, milliamp); не думаю что ее надо закоммичивать скорей всего с 106 по 109
 
  • Лойс +1
Реакции: kym13

ASM

★★★★★✩✩
26 Окт 2018
1,693
339
@Divin, думаю этого мало будет) с rtc.now нужно поработать, возможно)
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
529
74
@Divin,
Вот эти строки и фигурную скобку тоже:
if (!rtc.begin()) {
Serial.println("Couldn't find RTC");
while (1);
}
 

ASM

★★★★★✩✩
26 Окт 2018
1,693
339
@Divin, в переменную DateTime записывается значение из модуля DateTime now = rtc.now();
long unix = now.unixtime();
if (unix > 1640822400) {
Serial.println("Время корректно!");
}
else {
Serial.println("Некорректное время, старт синхронизации!");
syncTime();
}

Не нужно, добавить просто syncTime();
 
Изменено:

Divin

★★★✩✩✩✩
30 Янв 2021
441
192
@ASM, Дяденька, я не настоящий сварщик, со мной нужно как с той обезьянкой - нажми синюю кнопку - будет банан надо закомментировать или нет я подозреваю что значение от модуля часов записывается между круглыми скобками в
DateTime now = rtc.now() но знание этого мне ничего не дает.
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
Если у вас нет RTC, вместо всего этого
C++:
long unix = now.unixtime();
if (unix > 1640822400) {
Serial.println("Время корректно!");
}
else {
Serial.println("Некорректное время, старт синхронизации!");
syncTime();
}
надо оставить только
syncTime();
но работать будет только при хорошем постоянном инете
 
  • Лойс +1
Реакции: Leon111_09 и Divin

ASM

★★★★★✩✩
26 Окт 2018
1,693
339
@Divin, тяжело с телефона это всё писать. Надо с ПК делать, сразу редактируя и проверяя)
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
подозреваю что значение от модуля часов записывается между круглыми скобками в
DateTime now = rtc.now() но знание этого мне ничего не дает.
подозреваете неправильно
Значение от модуля часов никуда в коде записывать не надо
 

Divin

★★★✩✩✩✩
30 Янв 2021
441
192
@bort707, я не корректно выразился , понятно что в код не запишешь текущее значение времени (оно неизвестно) в процессе выполнения кода именно этой строчкой сопоставляются показания времени
 

bort707

★★★★★★✩
21 Сен 2020
3,067
915
в процессе выполнения кода именно этой строчкой сопоставляются показания времени
зачем их сопоставлять?
Без модуля часов корректного значения времени при запуске вам взять неоткуда, поэтому надо сразу делать
syncTime() , не тратя времени на пустые сопоставления
 

Divin

★★★✩✩✩✩
30 Янв 2021
441
192
@bort707, но эта строчка в коде подразумевает наличие модуля часов , я не о том как станет после вашей правки, а о том как было до изменений.
 

ASM

★★★★★✩✩
26 Окт 2018
1,693
339
@kDn, как-то не стабильно передаются показания с STA, пропускает. Интересно, почему так происходит?)