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.
Библиотеки являются собственностью их авторов!

Предупреждение!
Автор не несёт ответственности за возможную порчу оборудования. Всё, что вы делаете — вы делаете на свой страх и риск!