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г.
 

Вложения

Изменено:

Комментарии

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@kDn,
C++:
void build() {
  String s;
  BUILD_BEGIN(s);
  add.THEME (GP_LIGHT);
  add.FORM_BEGIN("/update");
  add.TEXT("prs", "pressure", "0");
  add.BREAK();
  add.SUBMIT("Save");
  add.FORM_END();
  BUILD_END();
}

void myAction(GyverPortal* p) {
  if (p->form("/update")) Serial.println("Save");
}

String jsonConfig = "{}";

bool saveConfig() {
  DynamicJsonDocument doc(1024);
  doc["prs"] = prs;
  serializeJson(doc, jsonConfig);
  File configFile = SPIFFS.open ("/config.json", "w");
  if (!configFile) {
    return false;
  }
  serializeJson(doc, configFile);
  return true;
}
bool loadConfig() {
  File configFile = SPIFFS.open("/config.json", "r");
  if (!configFile) {
    saveConfig();
    return false;
  }
  size_t size = configFile.size();
  if (size > 1024) {
    return false;
  }
  jsonConfig = configFile.readString();
  DynamicJsonDocument doc(1024);
  deserializeJson (doc, jsonConfig);
  prs = doc ["prs"];
  return true;
}
void setup() {
  loadConfig();
  portal.attachBuild(build);
  portal.start();
  portal.attachForm(myAction);
}
void loop() {
  portal.tick();
  if (portal.form()) {
    if (portal.form("/update"))
      prs = portal.getInt("prs");
      saveConfig();
      }
}
как-то так получается)
 
  • Лойс +1
Реакции: kDn

Divin

★★★✩✩✩✩
30 Янв 2021
436
192
@ASM, Все заработало с пол пинка - думаю скетч можно к шапке -для тех кто захочет без модуля часов, спасибо огромное!
 
  • Лойс +1
Реакции: ASM

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@Divin, я и писал ранее, возможно придется немного подправить...
Из-за UnixTime пришлось использовать библиотеку EasyNTPClient, а раз модуля RTC нет, то библиотека не подошла, поставил обычную, подправив обработку времени.
Теперь надо подумать, как объединить, или конвертировать время)
П.С.
getEpochTime оказывается и есть Unix, судя по библиотеке, тогда можно немного упростить...
посмотрел прошивку лампы, она на 5 версии Json библиотеки сделана) у меня пример тоже был на ней, кучу времени потратил на адаптацию...
Чтобы не нагружать ФС лучше сделать несколько json файлов и несколько форм? Ведь json "w" перезаписывает полностью файл, а не изменившиеся значения?
 
Изменено:

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
посмотрел прошивку лампы, она на 5 версии Json библиотеки сделана)
Без понятия какую вы именно прошивку лампы глядели, в нашей к примеру используется <ArduinoJson> 6.19.1
Чтобы не нагружать ФС лучше сделать несколько json файлов и несколько форм?
Все зависит от задачи. В нашей прошивке лампы используется основной конфиг, а также множество дополнительных - отдельные конфиги для событий, кнопки, индексы эффектов, бакапы и сами эффекты. Т.е. таких файлов больше сотни :). Но сам фреймворк в базовом наборе содержит только основной конфиг, возможно перенесу в него еще события модулем.

Суть в том, что хранить большие json-объекты в памяти несколько накладно, т.к. RAM не резиновая. Правильным подходом будет выделять память только когда нужно и освобождать когда она уже не нужна. Но это требует динамического менеджмента памяти, что мало кто использует. Второе что полезно использовать это планировщик для асинхронных задач, да и вообще все использовать асинхронное... Вот по этой причине GyverPortal на данном этапе годится разве что для ознакомления, если же потребуется более основательная и эффективная работа - то вам в тему EmbUI :)
 
  • Лойс +1
Реакции: ASM

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@Divin,
обновил общий скетч, в настройках есть переключатель: есть модуль RTC или нет) проверь у себя)
 

Вложения

Изменено:
  • Лойс +1
Реакции: Divin

Divin

★★★✩✩✩✩
30 Янв 2021
436
192
@ASM, как то не очень
C++:
Arduino: 1.8.13 (Windows 7), Плата:"NodeMCU 1.0 (ESP-12E Module), 80 MHz, Flash, Legacy (new can return nullptr), All SSL ciphers (most compatible), 4MB (FS:2MB OTA:~1019KB), 2, v2 Lower Memory, Disabled, None, All Flash Contents, 115200"


Компиляция скетча...

"C:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\python3\\3.7.2-post1/python3" "C:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4/tools/signing.py" --mode header --publickey "F:\\arduino\\Clock_ESP_8/public.key" --out "C:\\Users\\viktor\\AppData\\Local\\Temp\\arduino_build_959665/core/Updater_Signing.h"

"C:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\tools\\xtensa-lx106-elf-gcc\\2.5.0-4-b40a506/bin/xtensa-lx106-elf-g++" -D__ets__ -DICACHE_FLASH -U__STRICT_ANSI__ "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4/tools/sdk/include" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4/tools/sdk/lwip2/include" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4/tools/sdk/libc/xtensa-lx106-elf/include" "-IC:\\Users\\viktor\\AppData\\Local\\Temp\\arduino_build_959665/core" -c -w -Os -g -mlongcalls -mtext-section-literals -fno-rtti -falign-functions=4 -std=gnu++11 -MMD -ffunction-sections -fdata-sections -fno-exceptions -DNONOSDK22x_190703=1 -DF_CPU=80000000L -DLWIP_OPEN_SRC -DTCP_MSS=536 -DLWIP_FEATURES=1 -DLWIP_IPV6=0 -DARDUINO=10813 -DARDUINO_ESP8266_NODEMCU -DARDUINO_ARCH_ESP8266 "-DARDUINO_BOARD=\"ESP8266_NODEMCU\"" -DLED_BUILTIN=2 -DFLASHMODE_DIO -DESP8266 "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4\\cores\\esp8266" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4\\variants\\nodemcu" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4\\libraries\\ESP8266WiFi\\src" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4\\libraries\\ESP8266WebServer\\src" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4\\libraries\\ESP8266mDNS\\src" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4\\libraries\\ESP8266HTTPUpdateServer\\src" "-IC:\\Program Files (x86)\\Arduino\\libraries\\NTPClient_Generic\\src" "-IC:\\Program Files (x86)\\Arduino\\libraries\\Time" "-IC:\\Program Files (x86)\\Arduino\\libraries\\RTClib" "-IC:\\Program Files (x86)\\Arduino\\libraries\\FastLED\\src" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4\\libraries\\Wire" "-IC:\\Program Files (x86)\\Arduino\\libraries\\SparkFun_BME280\\src" "-IC:\\Users\\viktor\\AppData\\Local\\Arduino15\\packages\\esp8266\\hardware\\esp8266\\2.7.4\\libraries\\SPI" "-IC:\\Program Files (x86)\\Arduino\\libraries\\OneWire" "-IC:\\Program Files (x86)\\Arduino\\libraries\\DallasTemperature" "C:\\Users\\viktor\\AppData\\Local\\Temp\\arduino_build_959665\\sketch\\Clock_ESP_8.ino.cpp" -o "C:\\Users\\viktor\\AppData\\Local\\Temp\\arduino_build_959665\\sketch\\Clock_ESP_8.ino.cpp.o"

In file included from F:\arduino\Clock_ESP_8\Clock_ESP_8.ino:16:0:

C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:14:21: note: #pragma message: FastLED version 3.004.000

 #    pragma message "FastLED version 3.004.000"

                     ^

In file included from C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:65:0,

                 from F:\arduino\Clock_ESP_8\Clock_ESP_8.ino:16:

C:\Program Files (x86)\Arduino\libraries\FastLED\src/fastspi.h:135:23: note: #pragma message: No hardware SPI pins defined.  All SPI access will default to bitbanged output

 #      pragma message "No hardware SPI pins defined.  All SPI access will default to bitbanged output"

                       ^

In file included from C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:48:0,

                 from F:\arduino\Clock_ESP_8\Clock_ESP_8.ino:16:

C:\Program Files (x86)\Arduino\libraries\FastLED\src/fastpin.h: In instantiation of 'class FastPin<12u>':

C:\Program Files (x86)\Arduino\libraries\FastLED\src/platforms/esp/8266/clockless_esp8266.h:21:49:   required from 'class ClocklessController<12, 20, 50, 30, (EOrder)10u, 0, false, 50>'

C:\Program Files (x86)\Arduino\libraries\FastLED\src/chipsets.h:578:7:   required from 'class WS2812Controller800Khz<12u, (EOrder)10u>'

C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:105:52:   required from 'class WS2812B<12u, (EOrder)10u>'

C:\Program Files (x86)\Arduino\libraries\FastLED\src/FastLED.h:302:39:   required from 'static CLEDController& CFastLED::addLeds(CRGB*, int, int) [with CHIPSET = WS2812B; unsigned char DATA_PIN = 12u; EOrder RGB_ORDER = (EOrder)10u]'

F:\arduino\Clock_ESP_8\Clock_ESP_8.ino:102:56:   required from here

C:\Program Files (x86)\Arduino\libraries\FastLED\src/fastpin.h:210:2: error: static assertion failed: Invalid pin specified

  static_assert(validpin(), "Invalid pin specified");

  ^

Используем библиотеку ESP8266WiFi версии 1.0 из папки: C:\Users\viktor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WiFi

Используем библиотеку ESP8266WebServer версии 1.0 из папки: C:\Users\viktor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266WebServer

Используем библиотеку ESP8266mDNS версии 1.2 из папки: C:\Users\viktor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266mDNS

Используем библиотеку ESP8266HTTPUpdateServer версии 1.0 из папки: C:\Users\viktor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\ESP8266HTTPUpdateServer

Используем библиотеку NTPClient_Generic версии 3.7.1 из папки: C:\Program Files (x86)\Arduino\libraries\NTPClient_Generic

Используем библиотеку Time версии 1.6 из папки: C:\Program Files (x86)\Arduino\libraries\Time

Используем библиотеку RTClib версии 1.12.5 из папки: C:\Program Files (x86)\Arduino\libraries\RTClib

Используем библиотеку FastLED версии 3.4.0 из папки: C:\Program Files (x86)\Arduino\libraries\FastLED

Используем библиотеку Wire версии 1.0 из папки: C:\Users\viktor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\Wire

Используем библиотеку SparkFun_BME280 версии 2.0.9 из папки: C:\Program Files (x86)\Arduino\libraries\SparkFun_BME280

Используем библиотеку SPI версии 1.0 из папки: C:\Users\viktor\AppData\Local\Arduino15\packages\esp8266\hardware\esp8266\2.7.4\libraries\SPI

Используем библиотеку OneWire версии 2.3.5 из папки: C:\Program Files (x86)\Arduino\libraries\OneWire

Используем библиотеку DallasTemperature версии 3.9.0 из папки: C:\Program Files (x86)\Arduino\libraries\DallasTemperature

exit status 1

Ошибка компиляции для платы NodeMCU 1.0 (ESP-12E Module).
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@Divin,
попробуй исправить пин ленты, я дописывал букву D, вспоминая твои слова)
 

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
#define DOTS_NUM 2 // задаём сколько у нас разделительных - я так понимаю если мы хотим точки покрупнее сделать то можем указать 4 , 6, 8 и соответственно на одну точку у нас будет 2, 3, 4 светодиода ?
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@maksland, ага) только немного код дописать с точками) хотя можно доделать хотя бы несколько вариантов, 2,4,6,8 больше уж вряд ли надо будет))
переделал под 2/4/6/8 точек) если нужно, проверь)
@kamikadzze, тоже, если возможно)
 

Вложения

Изменено:
  • Лойс +1
Реакции: kamikadzze

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
не .... мне 2 хватит :) это @kamikadzze надо
хотя попросили в школу сделать, в фойе. Спросил какие размеры - в воздухе начертили примерно как у kamikadzze.
Делать надо так как директор школы часто забирает мои радиодетали из города :(
Еще хотел чтобы часы сигнал выдавали на звонок но я отговорил :) еще по размеру надо отговорить !
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
Ребят, я тут плату развел под часы на базе модуля ESP-12. Бюджетную плату: односторонний гетинакс. Даже что-то наподобие шелкографии получилось-вторую половину схемы переводить надо после травления на тыльную сторону. Печатал на фольге, при 110% увеличении-тогда контакты совпадают полностью.
1234567.jpg 7654321.jpg

P.S.Чуть не забыл упомянуть о косяке: там от контура USB почему то отпечаталась черта. Ее обязательно надо удалить после протравки, иначе будет КЗ. Я на скрине отметил ту черту. Она по идее должна была уйти в шелкографию,но почему-то отобразилась как дорожка. А заметил я ее только сейчас,когда плату уже протравил.
 

Вложения

Изменено:
  • Лойс +1
Реакции: Divin и ASM

kamikadzze

✩✩✩✩✩✩✩
3 Ноя 2020
19
1
@ASM
я уже подправил код в 5 версии. Но завтра загружу ваш для проверки. Все как вы тогда описали,-работают
 
  • Лойс +1
Реакции: ASM

kamikadzze

✩✩✩✩✩✩✩
3 Ноя 2020
19
1
@maksland,
С размерами на самом деле ничего сложного. Что под 4 диода, что под 6, как по мне разницы нет. Шаблон индикатора(табло если нужно) для лазера почти готов. Вырезал себе, надо пару косяков исправить.
 

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
а какое потребление получается с 4 светодиодами ? проблема с питанием встаёт в плане 5в
для 1-2 светиков на сегмент хватает и 2А DCDC и все на одной плате сделать можно
хотя сейчас модули есть и до 4А уже (у Лисина на ютубе обзор есть ) но там корпус ужас :)
@kamikadzze покажите что вырезано и чем закрываете табло для рассеивания?
а чем SK6812 от ws2812 отличаются ? хочу еще настольные моноплатные микрочасики сделать - у них корпус 3.5 мм (и даже 2 на 2 мм )
+ потребление есть на 5ма и 12ма (на цвет)
 
Изменено:

kamikadzze

✩✩✩✩✩✩✩
3 Ноя 2020
19
1
@ASM,
Прошил версию 8 с разделительными точками. Все работает в выводе на экран, но есть баг с ds3231. У меня она есть и в настройках оставил 1. Но стоило передернуть батарейку, время 0.00 и с инета не тянет. Вайфай работает. Все в норме. Прошиваю эту же версию с настройкой 0, синхронизация проходит.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@kamikadzze, если время обнулить, то синхронизация не работает с включенным rtc?, я так понял?)
 

ASM

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

kamikadzze

✩✩✩✩✩✩✩
3 Ноя 2020
19
1
@ASM,
В Монитор порта завтра залезу. Лог пришлю. Да я сам случайно это обнаружил.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@kamikadzze, программно задал неверное время, вижу проблему)
исправил, урра) на библиотеке NTPClient...
 
Изменено:
  • Лойс +1
Реакции: kamikadzze