Точные часы на LED-матрице 32x8 с DS3231, BME280, BH1750 и ESP-01 (NTP)
Компоненты и материалы
| Arduino Nano R3 | × | 1 |
| Модуль DS3231 (Maxim Integrated) — дешёвый с eBay, резистор зарядки аккумулятора удалён | × | 1 |
| BME280 (давление, влажность, температура) — дешёвый с eBay | × | 1 |
| BH1750 (датчик освещённости) — с eBay | × | 1 |
| LED-матрица MAX7219 32x8 | × | 1 |
| Конденсатор 10 мкФ | × | 2 |
| ESP8266 ESP-01 (опционально, для NTP) | × | 1 |
| LM3940IT-3.3 (3.3 В LDO для ESP-01) | × | 1 |
| Logic Level Shifter (SparkFun) — нужен для ESP-01 | × | 1 |
О проекте
Вдохновлено проектом Nick's LED Word Clock. Код сильно модифицирован: добавлены датчики, кнопки, ESP-01 для NTP. BH1750 автоматически регулирует яркость и может выключать дисплей ночью. BME280 показывает температуру, влажность, давление. ESP-01 получает время с pool.ntp.org, спит (WiFi выкл.) когда не нужен, просыпается по Serial. SSID и пароль передаются из кода Arduino.
Добавлены 6 новых шрифтов (созданы на dotmatrixtool.com). Часть кода перенесена в PROGMEM для экономии RAM. Настройки сохраняются в EEPROM.
Оригинал Nick: 123led.wordpress.com
Мой код: GitHub
Файлы на GitHub:
Arduino LEDClock32x8.ino
ProgmemData.h
Arduino ESP-01_NTP.ino
LEDClock32x8_ESP01-NTP.ino
ProgmemData.h
Пример обмена с ESP-01 в Serial-мониторе:
Arduino : Sent NTP request to ESP01
ESP01 : NTP request received from Arduino [attempt 1 of 3]
Connecting to SSID: TheInternets....connected
SSID: TheInternets, IP Address: 192.168.0.135
Signal Strength (RSSI): -42 dBm
Sending NTP packet to: 195.195.221.100 [attempt 1]
Sending NTP packet to: 195.195.221.100 [attempt 2]
UNIX1562848457
Disabling WiFi....ok
Глобальные настройки (меняются через меню, сохраняются в EEPROM)
// Настройки часов
byte intensity = 2; // [200] Яркость 0-15
byte clock_mode = 0; // [201] Режим отображения (0=basic)
bool random_mode = 0; // [206] Случайная смена режима
bool random_font_mode = 0; // [207] Случайная смена шрифта
bool ampm = 0; // [208] 0=24ч, 1=12ч
// Настройки света
byte display_mode = 5; // [202] Режим дисплея по датчику света
bool auto_intensity = 1; // [209] Авто-яркость
byte hour_off_1 = 21; // Часы возможного авто-выключения
byte hour_off_2 = 22;
byte hour_off_3 = 23;
// Настройки шрифтов (меню)
byte font_style = 2; // [203] Стиль большого шрифта
byte font_offset = 1; // [204] Смещение шрифта
byte font_cols = 6; // [205] Колонки шрифта
// DST, NTP, UTC
bool dst_mode = 1; // [210] Летнее время
bool ntp_mode = 1; // [211] NTP синхронизация
byte ntp_adjust = 1; // Коррекция секунд NTP
int8_t utc_offset = 0; // [213] Смещение UTC (часы)
byte ntp_dst_hour = 2; // Час ежедневной синхронизации
byte ntp_max_retry = 3; // Попыток NTP (1-9)
byte ntp_timeout = 45; // Таймаут попытки (сек)
// WiFi (передаются в ESP-01 через SoftwareSerial)
// Длина SSID + пароль ≤ 72 символа
const byte ssid_len = 8;
const char ssid[] = "YourSSID";
const byte pass_len = 12;
const char pass[] = "YourPassword";
Код
Полный исходный код на GitHub: https://github.com/Ratti3/miniclock
Схемы
BH1750 подключается так же как BME280 (I2C: SDA=A4, SCL=A5).

Распиновка
DS3231, BH1750, BME280: SCL=A5, SDA=A4, VCC=3.3V
LED Matrix MAX7219: CLK=D11, CS=D10, DIN=D12, VCC=5V
Кнопки: D2=Menu, D3=Date/+, D4=Temp/-, D5=Display options
ESP-01 (опционально): D7=TX ESP, D6=RX ESP
Производственный процесс
- Часы реального времени на Arduino с расчётом времени намаза
- Управление светодиодом по Bluetooth с Arduino: простой DIY-гид
- Аналоговые POV-часы на Arduino Nano: персистенция зрения с 17 светодиодами
- DIY лампа-матрица на светодиодах WS2812B и клеевых стержнях
- Управление светодиодом Arduino через Cortana по Bluetooth в Windows 10
- Arduino Flip Clock на матрице 8×8 LED — DIY проект реального времени
- Мастерство 8×8 LED-матрицы с Arduino Uno: Пошаговое руководство
- Точные GPS-часы на Arduino: доступная точность и надёжность
- Bluetooth-матрица 8×8 с бегущей строкой на Arduino
- Надёжные будильник на DS1302 RTC и Arduino UNO — сборка и код