ESP8266: Светодиодные часы с метеостанцией
Светодиодные часы, которые я раньше описывал на страницах этого сайта постепенно выгорали. Светодиоды гасли один за другим и соответственно вместе с ними гасли целые сегменты цифр. Пару раз я их перепаивал, но в конце концов было решено переделать часы полностью.
Теперь часы будут работать на микроконтроллере ESP8266, иметь дисплей из матрицы светодиодов WS2812b и получать данные о температуре с беспроводного датчика Oregon. Конечно же, будет синхронизация времени с NTP-серверами через Интернет.

Для сборки нам понадобятся:
- Микроконтроллер ESP8266 (NodeMCU);
- гибкая светодиодная матрица WS2812B размером 32×8;
- RTC (часы реального времени) на микросхеме DS1307;
- радиомодуль приёмник XD-RF-5V (или MX-RM-5V) на 433 МГц;
- беспроводной датчик температуры Oregon Scientific THN132N;
- блок питания на 5 В, 1 А. Подойдёт любая зарядка от телефона.
Светодиодная матрица содержит 256 светодиодов WS2812B. Питается напряжением 5 вольт и управляется всего по одному проводу. Размер такого дисплея составляет 32×8 сантиметров:

Датчик температуры у меня остался от метеостанции. Питается от одной пальчиковой батарейки, которой хватает примерно на полтора-два года. Это с учётом 30-градусных морозов зимой.

Радиомодуль. К нему необходимо припаять антенну. Часто он продаётся уже с ней (спиральные антенны). Я же просто припаял отрезок медного провода длиной примерно 17 см.

Схема подключения следующая:
- D5 (GPIO14) — светодиодная матрица;
- D6 (GPIO12) — радиомодуль;
- D1, D2 (GPIO 5, GPIO 4) — шина I2C для подключения RTC-модуля.
На всякий случай схема соответствия GPIO и выводов NodeMCU:
ВНИМАНИЕ! Так как светодиодная матрица потребляет довольно большой ток, то ни в коем случае не подключайте собранную схему к компьютеру без подключения внешнего питания!
Обратите внимание на строки 28-38 в коде:
// ========================================================================= #define ssid "********" // Имя WiFi сети #define password "********" // Пароль WiFi #define TIMEZONE 7 // Временная зона #define ntpServerName "ntp1.stratum2.ru" // NTP сервер #define BRIGHTNESS 7 // Яркость дисплея (255 максимальная) #define MATRIX_PIN 14 // Номер GPIO подключения матрицы (14 = D5) #define SENSOR_RF_PIN 12 // Номер GPIO подключения приёмника беспроводного датчика (12 = D6) #define SDA 5 // Номер GPIO шины I2C SDA (5 = D1) #define SCL 4 // Номер GPIO шины I2C SCL (4 = D2) #define ENABLE_DEBUG_RF 0 // 1 - включает "осциллограф" - отображение данных, полученных с приёмника #define ENABLE_DEBUG_DECODER 0 // 1 - выводить в Serial сервисную информацию // =========================================================================
Здесь необходимо указать данные для подключения к Wi-Fi сети, часовую зону. При необходимости можно изменить NTP-сервер и номера выводов.
Схема не требует наладки и работает сразу же. Температура отображается в том случае, если с момента получения последних данных от датчика прошло не более 10 минут. Если данных нет, то измените параметр ENABLE_DEBUG_RF на единицу:
#define ENABLE_DEBUG_RF 1
Теперь поднесите датчик к часам, откройте монитор порта в Arduino IDE и добейтесь устойчивого приёма сигналов. Этого можно добиться изменяя положение антенны и немного подкручивая (совсем немного, мне хватило буквально 10-15 градусов) подстроечную катушку индуктивности на плате радиомодуля. Также на приём может влиять расстояние между радиомодулем и контроллером.
Затем постепенно удаляйте датчик от часов и также добивайтесь устойчивого приёма.



Видео работы:
В дальнейшем планируется добавить датчик атмосферного давления, датчик температуры DS18B20 и отправку данных по MQTT и на народный мониторинг. Целесообразность подключения датчика влажности пока под большим вопросом, так как они обычно показывают погоду на Марсе. Следите за новостями)

Скачать с GitHub: https://github.com/student-proger/esp-meteoclock-v3
Библиотеки:
Oregon_NR (https://github.com/invandy/Oregon_NR)
Adafruit_GFX v1.2.3
Adafruit_NeoMatrix v1.1.5
Adafruit_NeoPixel v1.5.0
DS1307 v1.1
Работа проверялась с Arduino IDE v1.8.13.
Библиотеки являются собственностью их авторов!
