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

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

  • BMP280

    Голосов: 23 29.1%
  • BME280

    Голосов: 56 70.9%

  • Всего проголосовало
    79
[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г.
 

Вложения

Изменено:

Комментарии

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Да кабы я смог, сделал бы :) Но увы для меня сложновато. Поэтому и высказал пожелания.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
так и я не специалист) методом проб и ошибок делаю)
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@S_Sergey_G, теоретически все можно, надо только изучать) так-то должна же быть библиотека)
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Да пример похож, но надо как то вывести на дисплей инфу от брокера.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@S_Sergey_G,так по сути аналогично, как и выводятся данные с датчиков.
принять топик и занести в переменную, вместо считывания датчика, вроде больших сложностей нет)
 

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

★★★★★★★
14 Авг 2019
4,253
1,297
Москва
Ну вот если ставить часы на столе (условно) а датчик в огороде, то скорее всего они будут работать в одной сети. Надо ли через брокера делать ?
А если датчик в огороде, а часы на работе, то уже есть смысл. Но тогда напрашивается вариант с 2мя, 3мя , 6-ю датчиками. В разных местах. И что бы их отличить надо как то их именовать. И имя это выводить перед температурой. Но тогда это уже будут не часы, т.к. львиную долю они будут показывать не время :D
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Ну вот если ставить часы на столе (условно) а датчик в огороде, то скорее всего они будут работать в одной сети. Надо ли через брокера делать ?
А как передать с датчика температуру на часы сразу без посредников. И да мне часы не очень нужны, я люблю термометры:)
 

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

★★★★★★★
14 Авг 2019
4,253
1,297
Москва
Да как угодно, куда угодно. Между 2-мя есп очень легко, одна в режиме точки доступа, другая ее клиент. Просто в нужный ip по UDP , по NRF24 , но это сложнее, хотя может быть дальнобойнее.
 

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

★★★★★★★
14 Авг 2019
4,253
1,297
Москва
Да, так можно сделать, это один из вариантов
Тогда ip часов будет обычно 192.168.4.1, на часах можно запустить UDP сервер и на него слать данные с датчика температуры
Или веб сервер и слать запросы.
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Подключил датчик DS18B20 на D5, в настройках выбрал отображать время и температуру на улице. Перед показом температуры перестают мигать точки, потом переключаются на температуру и все висит, температура не меняется на часы не переключаются. Датчик исправен. В чем может быть причина?
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Разобрался. В настройках веб, порядок и время ставил сначала так: 0,2 и 30,30. Сейчас прописал 0,2,0,2,0 и 30,30,30,30,30. Всё заработало как надо.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Интересно, не должно быть такого, посмотрю))
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
И ещё, принёс сейчас часы с работы домой, точку доступа создал, но по адресу 192.168.4.1 не заходит.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@S_Sergey_G, к точке надо подключиться напрямую)
@S_Sergey_G, ага, есть такой баг) индикация останавливается, но часы работают)
При тестировании я выключал только влажность и менял интервал, всё было норм. Но при отключении влажности, нет чтения с датчика, соответственно мониторинг не видит новых показаний, поэтому больше не замудрялся)
 
Изменено:

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Напрямую. Телефон увидел сеть, подключаюсь к ней, ввожу IP и на веб интерфейс не входит.
Часы не показывают, светится 4 знак 3 сегмента в верху. Понял про какой баг.
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@S_Sergey_G, проблему с ТД увидел. Появилась в результате переделки проверки синхронизации. Сейчас висит в вечном цикле запрос времени ntp, время неправильное, и снова запрос...
Тогда на данный момент один выход, прописать в коде записи от WiFi.
Постараюсь на выходных исправить)

п.с. возможно это в моей бета версии такой баг, залил версию как из шапки, и после старта ТД получилось зайти и вернуть настройки в правильное значение)
 
Изменено:

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Уже прописал в коде свой wifi всё пока работает.
А как температуру выводить с десятыми 25,6, градус можно убрать.
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@S_Sergey_G,
в этой строчке
C++:
int digit = abs(tempS % 10);
Поменять на
C++:
int digit = abs(FtempS / 10);
по идее флоат идет с 2 мя знаками после запятой, делим и получаем 3 числа) вот и их выводить, аналогично давлению)
вообщем мысль передал)
C++:
  int digit = pres % 10;
  Digit(digits[digit], segment_4);
  digit = pres % 100 / 10;
  Digit(digits[digit], segment_3);
  digit = pres / 100;
  Digit(digits[digit], segment_2);
сейчас не загрузить голову, чтобы осмыслить, сил нет)
 

S_Sergey_G

✩✩✩✩✩✩✩
23 Фев 2021
165
3
Если просто поменять на
C++:
int digit = abs(FtempS / 10);
то показывает всегда 22° в сериале отображает правильно.
Аналогично давлению меняю
C++:
Digit(digits[10], segment_4);
на
C++:
Digit(digits[digit], segment_4);
чтобы вместо градусов показывал десятые, но выдаёт ошибку (
'digit' was not declared in this scope
)
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
Первый код обязателен, он формирует число, которое в следующем коде через математику разбивает на числа. 123 это остаток деления %10 будет тройка.остаток деления %100 будет 23 и /10 будет 2. Если разделить на 100 будет 1. Так и работает вывод.

Ещё заметил, замени int digit на float digit
п.с. может лучше так int digit = FtempS *100;
Таким образом сделаем из 23.45 целое число 2345, которое можно разбить на числа)
 
Изменено: