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

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

  • BMP280

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

    Голосов: 56 71.8%

  • Всего проголосовало
    78
  • Опрос закрыт .
[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,485
292
Все подключено правильно,фоторезистор и подтяжку использовал из старых часов
где-то нет контакта)
Кстати,а какой логин/пароль для ОТА?
C++:
//Настройки OTA
#define ota_name "admin"
#define ota_pass "pass"
можно где то в скетче прописать мою точку доступа
C++:
struct Wifi {
  char ssid[32] = "";
  char pass[32] = "";
или можно прописать при настройке, после запуска точки от часов)
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
где-то нет контакта)
С контактом/ми все в порядке.Заметил одну странность: светишь фонариком на фоторезистор и яркость сразу уменьшается до минимума.
Все,победил авто-яркость :)
Заменил код на:
Авто-яркость:
/////////// функция освещенности
void BrightnessCheck() {
  static uint32_t last_br = millis();
  if ((millis() - last_br) < o.brg) return;
  last_br = millis();
  if (o.auto_bright) {                                                                             // если включена адаптивная яркость
    if (millis() - bright_timer > 100) {                                                           // каждые 100 мс
      bright_timer = millis();                                                                     // сбросить таймер
      if (o.type_brg) {                                                                            // выбор типа датчика, аналог или цифра
        new_bright = map(digitalRead(BRI_PIN), 0, 1023, o.min_bright, o.max_bright);  // считать показания с фоторезистора, перевести диапазон
      } else {
        new_bright = map(analogRead(BRI_PIN), 0, 1023, o.max_bright, o.min_bright);  // считать показания с фоторезистора, перевести диапазон
      }
      LEDS.setBrightness(new_bright);
    }
  }
}

Все работает как надо :).
 
Изменено:

wulf

★✩✩✩✩✩✩
1 Дек 2022
132
11
вопрос ? минимальное количество диодов какое ? а то я чет сделал по диоду на сегмент и бред получается а где указать не вижу
IMG_20230402_020142.jpg
 

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
@wulf, по диоду на сегмент делали тут уже, нет проблем. Если правильно спаяна схема.
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
132
11
@ASM,лежат точно как на схеме в шапке

@ASM,чтоза порамерты где 2 указаныСнимок.JPG
 

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
@wulf, Не в схеме дело.Я в свое время пытался уже сделать диод на сегмент-неудобочитаемая фигня получилась.
там очень тяжело визуально определить какие цифры светят.
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
132
11
нашол где . 10 пересмотрел не видел. зач спать пора
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
132
11
@ASM,залил бету 27 точки 2 раза моргнут и секунд 10 примерно молчат
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
132
11
@ASM,ну мне покамисть без датчиков нужны ток часы стоит режим 0 и все . из за этого так себя ведут?
 

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
@wulf, секунды тоже выстави. Как часы не использовали, можно для приличия выбрать, чтобы видно было, что меняется.
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
132
11
все разобрался в принципе ее работы Снимок.JPGвс такими настройками работают как обычные часы ну есть небольшое подвисание где то секунд на 5 вроде
 

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
@wulf, можно тогда сделать 5-6 режимов с часами и секунды 2. Думаю ровно будет работать)
 

wulf

★✩✩✩✩✩✩
1 Дек 2022
132
11
есть предложение . IMG_20230330_204640.jpg получится вот так запилить цветовую как в гирлянде на окно от гайвера они постоянно меняют цвета плавно . жаль видео не залить сюда я бы показал
 

AlChel

✩✩✩✩✩✩✩
20 Апр 2022
18
1
@wulf, можно тогда сделать 5-6 режимов с часами и секунды 2. Думаю ровно будет работать)
Я экспериментировал, нужно чтоб все 6 режимов были прописаны, иначе после последнего режима идет увеличенная пауза.
@ASM, я наверное уже задолбал тебя своей яркостью :). Устанавливаю минимум в 0,но все равно меньше 1 яркость не делается, причем это явно программное потому что садил вывод А0 на землю напрямую, яркость все равно 1.
Кстати заметил, если у меня фоторезистор минусом на землю посажен, наблюдаются мерцания в промежуточных режимах яркости, если подключаю фоторезистор к плюсу, мерцаний нет. Ну это так, может кому пригодиться.
И еще, а не правильней ли будет фоторезистор на 3.3 вольта сажать, а не на 5? Все таки микроконтроллер у нас 3.3в питается и значит уровни на входах тоже должны быть макс 3.3 вольта.
 
Изменено:

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
Там в коде была ошибка.
где?)
C++:
  if (o.auto_bright) {                    // если включена автояркость
    if (millis() - bright_timer > 100) {  // каждые 100 мс
      bright_timer = millis();            // сбросить таймер
      if (o.type_brg) {                   // тип датчика цифра
        if (o.min_max) {                  // проверка инверсии
          new_bright = map(digitalRead(BRI_PIN), 0, 1023, o.min_bright, o.max_bright);  // считать показания с фоторезистора, перевести диапазон прямой
        } else {
          new_bright = map(digitalRead(BRI_PIN), 0, 1023, o.max_bright, o.min_bright);  // считать показания с фоторезистора, перевести диапазон обратный
        }
      } else {                            // иначе тип датчика аналог
        if (o.min_max) {                  // проверка инверсии
          new_bright = map(analogRead(BRI_PIN), 0, 1023, o.min_bright, o.max_bright);  // считать показания с фоторезистора, перевести диапазон прямой
        } else {
          new_bright = map(analogRead(BRI_PIN), 0, 1023, o.max_bright, o.min_bright);  // считать показания с фоторезистора, перевести диапазон обратный
        }
      }
      LEDS.setBrightness(new_bright);     // устанавливаем яркость
    }
  } else LEDS.setBrightness(o.min_bright);// если автояркость выключена, то в расчете минимальная
есть предложение
C++:
leds[cursor] = (digit & mask) ? ledColor : CRGB(0, 0, 0);
вот это надо модифицировать) есть идеи?)
 
Изменено:

Leon111_09

★★★✩✩✩✩
6 Июн 2021
642
148
55
Таганрог
forum.wisecomp.ru
@ASM, Не в этом куске кода.Вы давали кусок кода на проверку пару страниц назад (там у человека тоже не работала автояркость). В том куске кода и была ошибка.А этот код у меня так и не заработал.
Я использовал этот код:
Автояркость:
*/////////// функция освещенности
void BrightnessCheck() {
  static uint32_t last_br = millis();
  if ((millis() - last_br) < o.brg) return;
  last_br = millis();
  if (o.auto_bright) {                                                                             // если включена адаптивная яркость
    if (millis() - bright_timer > 100) {                                                           // каждые 100 мс
      bright_timer = millis();                                                                     // сбросить таймер
      if (o.type_brg) {                                                                            // выбор типа датчика, аналог или цифра
        new_bright = map(digitalRead(BRI_PIN), 0, 1023, [B]o.min_bright, o.max_bright[/B]);  // считать показания с фоторезистора, перевести диапазон
      } else {
        new_bright = map(analogRead(BRI_PIN), 0, 1023, [B]o.max_bright, o.min_bright[/B]);  // считать показания с фоторезистора, перевести диапазон
      }
      LEDS.setBrightness(new_bright);
    }
  }
}

Там в выделенных строках ошибка: мин и макс одинаковые.В одной строчке поменял местами мин и макс и все заработало.
 
Изменено:

wulf

★✩✩✩✩✩✩
1 Дек 2022
132
11
C++:
leds[cursor] = (digit & mask) ? ledColor : CRGB(0, 0, 0);
вот это надо модифицировать) есть идеи?)
попробую из того скетча что кидал выковырять . хоть не селен в этом но попытка не пытка
 

ASM

★★★★✩✩✩
26 Окт 2018
1,485
292
@Leon111_09, это не ошибка) две строки, два разных датчика) у тебя просто заменены переменные местами, т к. другая распайка. Теперь такой вариант предусмотрен в настройках портала.