0. 前言
本文基于 M5Stack Tab5 硬件平台与 ESP‑IDF 开发环境,完整复现时钟应用从架构设计、核心模块实现、网络天气同步到编译烧录的全流程。项目沿用 Tab5 四层架构与 Panel 组件化思想,兼容 LVGL9、RTC 硬件时钟、SNTP 网络授时、IP 自动定位与天气获取,可直接用于中大型 GUI 项目的时间模块参考。

1. 项目概述
1.1 硬件平台
• 主控:ESP32‑P4(RISC‑V)
• 屏幕:5.0 寸 1280×720 MIPI DSI LCD
• 触摸:GT911 电容触摸
• RTC:RX8130CE
• 传感器:BMI270(IMU + 温度)
• 电源:INA226 电量监测
• 存储:SD 卡、NVS 闪存
1.2 软件环境
• ESP‑IDF:v5.4.1+
• LVGL:v9.3.0
• 架构:应用层 → 框架层 → HAL 抽象层 → 平台驱动层
• 生命周期:Mooncake 框架(Created → Opening → Running → Sleeping → Destroyed)
1.3 核心功能
• 公历 / 农历 / 星期 / 秒表实时显示
• RTC 硬件计时 + SNTP 网络自动同步
• 多时区切换(POSIX 时区字符串)
• 电池电量、温度、WiFi 状态显示
• IP 自动定位 + 实时天气获取
• 屏幕截图保存到 SD 卡
• 触摸交互、设置入口集成

2. 整体架构设计
┌─────────────────────────────────────────┐ |
2.1 数据流
1. 1s 定时器触发 → 读取 RTC / 系统时间
2. 时间解析 → 更新公历 / 农历 / 星期 UI
3. 网络就绪 → 后台任务请求天气 → 解析 JSON → 异步刷新 UI
4. 电量 / 温度 / 网络状态实时轮询更新
3. 核心模块实现
3.1 时间获取与 RTC 驱动
// 读取 RX8130 硬件时钟 struct tm timeinfo; |
3.2 时区管理(POSIX 标准)
typedef struct { |
3.3 农历计算(简化工程版)
// 天干地支 |
3.4 SNTP 网络授时
esp_sntp_config_t sntp_cfg = ESP_NETIF_SNTP_DEFAULT_CONFIG("pool.ntp.org"); |
3.5 天气 + IP 定位(双 API)
1. 高德 IP 定位 → 获取城市 adcode
2. sojson 天气 API → 获取天气 / 温度 / 风向
3. 缓存 1 小时避免频繁请求
// 天气获取后台任务 |
3.6 LVGL UI 面板组件化
class ClockPanel : public PanelBase { |
优点:解耦、可复用、易维护、支持热插拔。
4. 项目文件结构
|
5. 编译与烧录
bash |
6. 功能使用说明
1. 主菜单 → 时钟 → 进入表盘界面
2. 显示:时间、日期、农历、电量、温度、天气
3. 触摸刷新:重新获取天气与定位
4. 设置 → 系统时钟:手动同步 NTP、切换时区

7. 总结
本时钟 App 完整落地ESP‑IDF + LVGL9在 M5Stack Tab5 上的工程化开发,覆盖 RTC硬件计时、SNTP网络授时、农历天干地支计算、多时区适配、网络天气同步、触摸交互、组件化架构等核心实战要点,是一套轻量化、高可用的嵌入式时间系统解决方案。整体代码结构清晰、资源占用极低,可直接移植到各类ESP32系列硬件项目中,能够作为嵌入式GUI开发、物联网时间与天气应用搭建的标准化参考模板,同时也为后续功能迭代优化预留了充足的拓展空间。 最后还把宠物应用也插入到了 时钟应用里面。
项目地址,欢迎复现,走过路过,不要错过。
https://gitee.com/genvex/m5stack_-osystem
我要赚赏金
