高精度 LED 矩阵时钟:DS3231 RTC + BME280 环境监测 + BH1750 光敏自适应亮度 + ESP-01 NTP 对时
核心元件
| Arduino Nano R3 | ×1 |
| DS3231M RTC 模块 (需拔除充电电阻防电池爆炸) | ×1 |
| BME280 大气传感器 (温湿度+气压) | ×1 |
| BH1750 光强传感器 (自动调节屏幕亮度/熄屏) | ×1 |
| MAX7219 32x8 LED 点阵模块 (4 个 8x8 级联) | ×1 |
| ESP-01 模块 (可选,用于 NTP 网络校时) | ×1 |
| LM3940IT-3.3 (3.3V LDO 供电 ESP-01) | ×1 |
| 电平转换板 (5V↔3.3V, ESP-01 必需) | ×1 |
| 10μF 电容 ×2、轻触按键 ×4 | 各若干 |
项目亮点
基于 Nick 的 Mini LED Word Clock (https://123led.wordpress.com/mini-led-clock/) 二次开发,主要增强:
- 多传感器融合:BME280 显示温湿度气压,BH1750 实现环境光自适应调光 (可设定夜间自动熄屏)
- NTP 网络校时:ESP-01 仅在需要时唤醒 WiFi 向 pool.ntp.org 请求 Unix 时间,完成后休眠省电
- 夏令时/时区自动计算:支持 DST/UTC/BST 规则,可通过菜单启用/关闭
- 丰富 UI 交互:4 键操作 (菜单/日期+/温度-/显示选项),可调字体 (6 款自制点阵字体)、滚动模式、随机字体/模式
- 配置持久化:所有设置存入 EEPROM 掉电不丢失
- 代码优化:大量字符串/字模移入 PROGMEM 节省 RAM
接线速查
I2C 总线 (A4=SDA, A5=SCL, 3.3V) : DS3231, BME280, BH1750
LED 矩阵 (SPI) : CLK=D11, CS=D10, DIN=D12, VCC=5V
按键 : D2=Menu, D3=Date/+, D4=Temp/-, D5=Display
ESP-01 (软串口) : TX→D7, RX→D6 (需电平转换), CH_PD→3.3V, RST→D8
关键可配参数 (均可通过菜单修改并存入 EEPROM)
// 显示设置
byte intensity = 2; // [200] 默认亮度 0-15
bool auto_intensity = 1; // [209] 启用光敏自动调光
byte display_mode = 5; // [202] 熄屏模式 0=常亮 1=常灭 2-5=按小时熄屏
byte hour_off_1 = 21, hour_off_2 = 22, hour_off_3 = 23; // 可选熄屏小时
// 字体设置
byte font_style = 2; // [203] 大字体风格 0-5
byte font_offset = 1; // [204] 字体偏移
byte font_cols = 6; // [205] 字体列数
// 时制与网络
bool ampm = 0; // [208] 0=24h 1=12h
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; // 每日 NTP/DST 同步时刻 (建议 2 点)
byte ntp_max_retry = 3; // NTP 重试次数
byte ntp_timeout = 45; // 超时基数 (秒) * 重试次数
// WiFi 凭据 (编译期常量, 总长 ≤72 字节)
const byte ssid_len = 8; const char ssid[] = "YourSSID";
const byte pass_len = 12; const char pass[] = "YourPassword";
运行日志示例 (串口监视器)
Arduino : Sent NTP request to ESP01
ESP01 : NTP request received from Arduino [attempt 1 of 3]
ESP01 : Connecting to SSID: TheInternets....connected
ESP01 : SSID: TheInternets, IP: 192.168.0.135, RSSI: -42 dBm
ESP01 : Sending NTP packet to 195.195.221.100 [attempt 1]
ESP01 : Sending NTP packet to 195.195.221.100 [attempt 2]
ESP01 : UNIX1562848457
ESP01 : Disabling WiFi....ok
代码仓库
完整源码 (含 Arduino 主程序、ESP-01 固件、字模数据) 托管于 GitHub:
https://github.com/Ratti3/miniclock
LEDClock32x8.ino- 主程序ProgmemData.h- 字模/字符串存 PROGMEMESP-01_NTP.ino- ESP-01 端 NTP 客户端固件LEDClock32x8_ESP01-NTP.ino- 合并版 (单 Nano 通过软串口驱动 ESP-01)
原理图

注:原理图中未画出 BH1750,其 I2C 接线与 BME280 相同 (SDA→A4, SCL→A5, 3.3V)
成品图集
(此处放置多张组装过程与成品照片,展示 PCB 布局、外壳设计、菜单界面等)
制造工艺
- 自制 Arduino 伊斯兰祷告时间实时时钟
- Arduino + HC-05 蓝牙控制 LED:MIT App Inventor 手机 App 开发全攻略
- 模拟指针风格 POV 时钟:Arduino Nano + 17 LED + 霍尔传感器
- DIY 热熔胶棒 LED 矩阵灯 — 打造多彩显示屏
- Windows 10 Cortana 蓝牙控制 Arduino LED:UWP 应用开发全流程
- Arduino 8×8 LED 矩阵翻页时钟 - DIY 实时时钟项目
- Arduino Uno驱动MAX7219级联8×8 LED矩阵:从入门到动画显示
- GPS 授时时钟:低成本高精度的 Arduino 卫星校时方案
- 蓝牙控制 8×8 LED 点阵滚动显示:Arduino Nano + MAX7219
- 用 Arduino Mega 与 MAX72XX LED 矩阵复刻经典《小行星》游戏
- 使用 Arduino 制作简易辉光管时钟——分步指南
- 用 DS1302 RTC 和 Arduino UNO 制作可靠闹钟