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

Вложения

Изменено:

Комментарии

Влад78

✩✩✩✩✩✩✩
6 Июн 2023
28
0
Всем доброго дня!
Увидел недавно такие часы, загорелось. В программировании я только по верхушкам :) (все никак не погружусь, блинк и очень простые начальные программки).
Сергей, вчера скачал и стал компилировать прошивку, ругается на библиотеку GyverHub.h, прошу уточнить, когда релиз (если знаете).? И как поступить при отсутствии. Нашел Old версию, но в ней чего-то не хватает.

UPD:Вопрос снимаю, вроде разобрался.
 
Изменено:

ASM

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

Влад78

✩✩✩✩✩✩✩
6 Июн 2023
28
0
@ASM,
Спасибо!
Так у меня и стопорнулось тоже.
Я планировал на ESP8266 (NodeMCU 30 ногую, что в наличии)залить скетч без особых правок. НО что-то пошло не так...
Ядро поставил 2.4.7 но ругается пока на старую библиотеку Хаба. Разбираюсь, насколько могу... Мне то надо просто часики, без отправки данных на мониторинг, с возможностью играть цветом (подключаясь к ним). В открыто доступе Arudino IDE не могу найти библиотеки.
 

Влад78

✩✩✩✩✩✩✩
6 Июн 2023
28
0
@ASM,
Спасибо. Попробую с этой библиотекой . Пробовал все прошивки, и везде что-то с библиотеками...
 

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
сегодня подкрутил уличный датчик и "-" показывает в первом разряде (на улице -3 ), ночью конечно -25 и показывать будет нормально,
но сейчас некрасиво с пустым вторым разрядом
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@maksland,
у меня так |-|2|5|'| или |-| |2|'| хочется минус ближе к цифре? | |-|2|'|
 
Изменено:
  • Лойс +1
Реакции: maksland

Sergo_ST

★★★★★★✩
15 Мар 2020
943
819
Просто пора уйти от вывода данных на дисплей посимвольно вручную, и написать процедуру которая будет сама выводить числа(целые/со знаком/с запятой), ну и добавить бы полноценный набор символов, для вывода текста и тд))
 

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
@Sergo_ST, в проекте с матрицей там все просто) print("-25")и все работает) а тут мудристика)

или switch case?)
 
Изменено:

Sergo_ST

★★★★★★✩
15 Мар 2020
943
819
@ASM, Нет, при помощи процедуры, например такой:
C++:
void printNum(int16_t _num, int8_t _pos, uint8_t _length = 0, uint8_t _filler = 12); //вывод чисел
//-------------------------Вывод чисел----------------------------------------------------
void printNum(int16_t _num, int8_t _pos, uint8_t _length, uint8_t _filler) //вывод чисел
{
  uint8_t seg[4] = {segment_1, segment_2, segment_3, segment_4};

  uint8_t buff[6]; //временный буфер
  uint8_t count = 0; //счетчик символо

  if (!_num) { //если ноль
    buff[count++] = 0; //устанавливаем ноль
  }
  else { //иначе заполняем буфер числами
    boolean neg = 0; //флаг отрицательного числа

    if (_num < 0) {
      neg = 1;
      _num = -_num;
    }

    while (_num && (count < 6)) { //если есть число
      buff[count++] = (_num % 10); //забираем младший разряд в буфер
      _num /= 10; //отнимаем младший разряд от числа
    }

    if (neg) buff[count++] = 13; //добавили минус
  }

  while ((_length > count) && (count < 6)) buff[count++] = _filler; //заполняем символами заполнителями

  if (_length && (_length < count)) _pos -= count - _length; //смещаем буфер если число длиннее

  while (count) { //если есть знаки
    count--; //убавляем счётчик
    if ((uint8_t)_pos < 4) { //если курсор в диапазоне дисплея
      Digit(digits[buff[count]], seg[_pos]); //выводим символ
    }
    _pos++; //прибавляем положение
  }
}
 
Изменено:
  • Лойс +1
Реакции: ASM

ASM

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

надо как-то изобрести шрифты, тогда будет проще)
 
Изменено:

Sergo_ST

★★★★★★✩
15 Мар 2020
943
819
@ASM, Ничего сложного:
C++:
void printNum(число,
              позиция на дисплее,
              длинна(для выравнивания по правому краю и символа заполнителя)(опционально),
              символ заполнитель(опционально));
Вывод температуры будет например выглядеть так:
C++:
if (clck.new_god) {
      leds[NUM_LEDS - 1] = ColorTable[rand() % NUM_COLORS - 1];
    } else {
      leds[NUM_LEDS - 1] = ledColor;
    }

printNum(FtempS * 10, 1, 2, 0); //температура

Digit(digits[10], segment_4);  // символ градуса
 
  • Лойс +1
Реакции: ASM

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
хочу выходить на народный мониторинг, что то очень мутно у них на сайте написано :)
куда и что в код добавлять ?
по часам еще - вот выбор своего цвета жутко неудобно, можно например из 8-16 цветов выбирать просто и всё ?
вот как смена каждую минуту цветов - из тех и выбрать !
 
Изменено:

ASM

★★★★★✩✩
26 Окт 2018
1,602
311
хочу выходить на народный мониторинг, что то очень мутно у них на сайте написано :)
все просто, регистрируешься, ссылка моя есть, если без ссылки, можешь ввести там мой ник при регистрации)
бонусов конечно не будет, но будет просто приглашенный пользователь)
Включаешь в программе, данные отправляются и автоматически заносятся, останется только подписать)
Профиль, мои датчики.
Профиль, журнал отладки по IP, там все видно, что приходит)
вот выбор своего цвета жутко неудобно
если без смены, то выбрать можно любой)
если хочется конкретных цветов для автосмены, то можно прописать в таблице цветов)
 
  • Лойс +1
Реакции: maksland

maksland

★★★✩✩✩✩
13 Янв 2019
513
117
Omsk
Здорово, я там давно зарегистрировался. Показания пошли ! сутки только надо ждать чтобы датчик публичным стал
 
  • Лойс +1
Реакции: ASM

Сотнег

★★★★★★★
15 Янв 2020
4,346
1,492
@maloir,
обычно (всегда) питание на ленту подаётся напрямую от источника питания (от адаптера/зарядника).
 

maloir

★✩✩✩✩✩✩
14 Сен 2019
131
39
подаётся напрямую от источника питания
когда подключаю к внешнему питанию лента живет своей жизнью.... хаотично мигает разноцветными огноньками, если подключаю к 3 вольта платы работает стабильно....
пробежался, не увидел где нельзя к 3 вольтам подключать, написано что вооюще нельз подключатс к плате