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
@kamikadzze, вебморды нет, только страничка в html editor))
Попробовал сделать по примеру с интернета, включать и выключать светодиоды...
Не рабочий метод, компилятор ругается на синтаксис html))
Надо думать, как интегрировать html в код)
Или может тупо записать одной строкой в PROGMEM, и загружать в качестве html страницы) идея отличная, только можно ли сделать, спецы, помогите)
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
Или может тупо записать одной строкой в PROGMEM, и загружать в качестве html страницы) идея отличная, только можно ли сделать, спецы, помогите)
Можно сделать что угодно. Можете ли это сделать вы - вопрос к вам. Примеров достаточно даже на этом форуме.
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
641
149
55
Таганрог
forum.wisecomp.ru
@ASM, У вас в файле Constants ошибка в 15-ой строчке. Компиллятор ругается,типа не для этой платы скетч.Дописал букву D к номеру пина ленты и компиллятор пошел как по маслу.Специально перепроверил: вернул как было,и ошибка повторилась. Внес изменение-и пошло аки брехня по селу :).
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@Leon111_09, странно, конечно)
Код рабочий, перед публикацией удалил только ssid и 2 пароля своих))
У меня nodemcu...
 

kym13

★★✩✩✩✩✩
14 Ноя 2020
472
70
@Leon111_09,
Вы поставьте в менеджере плату "NodeMCU v1.0", уберите D и прошейте Wemos. И компилятор не на что не ругается.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@kDn, так, частично разобрался, компилятор не ругается)
теперь крупный вопрос:
C++:
#define max_bright          200
String max_bright = httpServer.arg("brmax");
###############################
<input name="brmax" value="200" min="10" max="255" type="number">
как их подружить, чтобы компилятор не ругался?)
а то получается, что у max_bright два значения)

Ну и второй в довесок)
C++:
  String s = MAIN_page;
  httpServer.send(200, "text/html", s);
Как сюда засунуть кучу констант из настроек для передачи на страницу?)
 
Изменено:

bort707

★★★★★★✩
21 Сен 2020
3,046
909
По первому - никак, просто не называй их одинаково
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@ASM, вы задаете элементарные вопросы, на которые требуется громадное кол-во времени, чтобы ответить. Вам нужно изучить базовые вещи. Впрочем можете для начала воспользоваться конструкторами, к примеру: https://community.alexgyver.ru/threads/gyverportal.6632/ . Наш вариант не предлагаю, поскольку понял еще год назад, что предлагать бессмысленно. :)
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
По первому - никак, просто не называй их одинаково
Мне надо обновить настройки с телефона)
Хм, тогда остаётся вариант с gson?)
Уж он то должен справится, считывать настройки с файла и записать то уж думаю более реально)
Или использовать запись в память?)
Какой вариант проще, ради записи десятка значений?)
@kDn, я думал не сложный вопрос, просто Гугл не помог, он умеет включать и выключать светодиоды)
Был вариант с SendHTML, но вчера я сообщал, что он не компилируется) Использую отдельный файл index.h, читать я понял как, передать пробовал подставляя в значении 's', пробовал приводя все значения в строку, всё равно не компилируется)
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@ASM, я вам сказал куда смотреть. Хотите изобретать свой велосипед - вперед и с песней, но я не готов тратить свое время на объяснение основ, типа "что такое колесо и почему его лучше делать круглым".
 

bort707

★★★★★★✩
21 Сен 2020
3,046
909
@ASM, как связано обновления настроек и то что вы назвали два идентификатора одной строкой?
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@bort707, 1 строка из настроек, вторая чтение с вэбсервера и запись переменных в настройки, 4 строка с сервера, для показа, откуда будут настройки)
Поизучаю ссылку на конструктор, может что найдётся нужное.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@kDn, ответ то был простой, сказал бы уточни, что означает #define, это и был бы ответ на первый вопрос)
Конструктор посмотрел, разобрался, интересный, но переменных маловато...
Поизучал PROGMEM, попробовал применить на практике, и понял, что с этой штукой для каждой переменной кучу кода надо написать...
C++:
int Cprs = 0;
void setup() {
    const uint8_t prs PROGMEM  = Cprs;
}
int prs = pgm_read_word(prs);
void loop() {
    prs = portal.getInt("prs");
    const int prs PROGMEM  = prs;
}
урезанно, без флагов и условий, как-то так будет) куча мала) не подходит, надо ознакомиться с json, может он больше подойдет)
По идее все настройки в одном файле, они не будут перезаписываться при перезапуске платы, только считывай и перезаписывай при надобности...
п.с. будут у кого еще предложения по интеграции?)
 

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@ASM, так вы даже вопрос толком задать не можете. )))
Вон ваш пример с PROGMEM явно показывает полное непонимание того зачем используется PROGMEM и какие проблемы решает))).
Про макросы и классы-обертки F(), PSTR(), FPSTR() вы походу не слышали.

Конструктор посмотрел, разобрался, интересный, но переменных маловато...
@kDn, посмотрел, ничего нужного нет, и библиотеки разные)
Время идет, вы все смотрите и ничего сделать не можете. Может вам нужно перестать смотреть и начать делать? :)
Ну а если сделать не получается - то сначала разобраться, изучить чужие наработки, а затем уже пытаться свою альтернативу писать? А так... посмотрели что-то, ничего не поняли, опустили руки и побежали писать "смотрел, ничего нужного нет, смотрел - переменных маловато" - это же просто смешно :)
надо ознакомиться с json, может он больше подойдет)
Ну-ну... Подойдет для чего и куда? Для обмена по сокетам? Да - он удобнее, для MQTT - да, замечательно. Для передачи слабоструктурированных данных - очень хорош. Для того чтобы вы после просмотра реализовали нормальный проект? - Нет, он вам не подойдет, потому что ваш уровень знаний недостаточен для того чтобы шаблонизаторы писать и динамически строить страницы. Для статики же json нафиг не нужен.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@kDn, голова перегружена кучей информации, поэтому сложно задать вопрос)
Мне не нужно реализовать сложный проект, а тупо чтобы не перезаписывать прошивку, зайти на сервер и поменять некоторые значения) json уже подсобрал основные моменты, судя по библиотеке, всё гораздо проще, чем еепром и прогмем)
Я уже ни раз говорю, я не программист) все эти тонкости не знаю, и не понимаю) Даже программисты не могут помочь, задавал пару раз вопросы знакомым тестировщикам, не знают этот язык...
Так вот и приходится брать кусками с одного места, с другого) И как-то делать это рабочим) Попался пример с json, он походу на старой библиотеке, заменял обновлёнными функциями, сразу сменился цвет в коде)

Помучаю ещё прошивку, если всё получится, то ок. Последние баги исправлены, сбоев больше не было. Думаю в марте новую версию часов делать, современную, с минимум пайки...
 
  • Лойс +1
Реакции: kym13

kDn

★★★★★✩✩
18 Ноя 2019
1,103
437
@ASM, для простых вещей я вам уже дал ссылку на конструктор и предложил его изучить. Не посмотреть, а именно изучить, проверить в работе, сделать несколько разных интерфейсов. Когда его перестанет хватать и захочется большего - будете изучать EmbUI и его использование. А вот после того как изучите (впрочем это можно сделать и сейчас) появится возможность создавать веб-интерфейсы произвольной сложности буквально за считанные минуты/часы.

Я вас не отговариваю от изучения JSON, просто сомневаюсь что вы за разумное время сможете понять идею и нормально его использовать. Есть очень лихая библиотека: https://arduinojson.org/ но как и любой мощный инструмент - с нею легко можно выстрелить себе в ногу. :)

И уж точно JSON не замена PROGMEM - это вообще разные вещи. Если вам нужно хранилище в памяти программ, то проще использовать ФС, а именно - LittleFS или SPIFFS (устарела). Тогда ресурсы (html и прочее) кладется туда, а веб-сервером выдергивается с нее. При этом ресурсы могут быть упакованы... Впрочем это я уже пересказываю реализацию EmbUI, но это займет кучу времени, которого у меня нет.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@kDn, изучить сложно, без второй ESP) дергать каждый раз не буду, идёт мониторинг постоянный) поэтому такая сложность)
В примере был json с SPIFFS, значит направление верное)

И да, с интерфейсом проблем нет, нарисовать не сложно) Конструктор рисует шаблонно. Поэтому страница будет моей, движок с портала)
 
  • Лойс +1
Реакции: kDn

Divin

★★★✩✩✩✩
30 Янв 2021
436
192
@ASM, Внес правильные изменения в код, скомпилировалось без ошибок, прошилось, но в результате :
C++:
load 0x4010f000, len 3584, room 16
tail 0
chksum 0xb0
csum 0xb0
v2843a5ac
~ld

Загрузка прошивки...
Не найдет модуль часов RTC

Жду часы из Китая, хотя обидно - теоретически может работать без RTC, фактически нифига.
 

ASM

★★★★★✩✩
26 Окт 2018
1,599
311
@Divin, попробуй) в архиве только первый файл, добавишь к нему второй файл со своими настройками.
и установи новую библиотеку NTPClient
 

Вложения

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