基于 ESP32-C3 Super Mini + 1.54″ ST7789 (240×240) 的桌面天气时钟,参考 BambuHelper 的架构实现:PlatformIO + Arduino + LovyanGFX + ArduinoJson。
功能
-
时间 + 日期 + 星期(NTP 同步,时区网页可选,支持夏令时)
-
当前天气:温度、体感、湿度、程序化绘制的天气图标(数据来自 和风天气 QWeather,免费版)
-
行情显示:金价 / 沪铜 / 布伦特原油 / 自定义 JSON 数据源(红涨绿跌,10 分钟刷新)
- 金价:京东金融·浙商积存金(
api.jdjygold.com) - 沪铜:东方财富日 K(换环境后东财某实时接口对期货已不放价,固件自动切 K 线端点)
- 布油:东方财富实时接口
- 最多 6 个行情槽:网页可增删、设置轮播间隔(2–60s),底部自动轮播(带动画)
- 金价:京东金融·浙商积存金(
-
5 套显示主题,网页点击即切换,即时生效、断电记忆(NVS 持久化):
主题 风格 Modern 现代极简,黑底暖白七段 Retro Pip-Boy 磷光绿辐射终端(单色 CRT) Platformer 经典横版游戏 HUD,蓝天像素场景 Wasteland 琥珀 CRT 废土工业避难所面板 Mario 马里奥特征色平台游戏:红顶栏 / Coin 黄温度 / 砖墙行情条 -
网页配置:左右双栏布局——左侧 240×240 实时预览(切主题即时换肤,与屏幕 1:1 设计语言),右侧全部设置项;支持「测试 API」用真实 Key 拉一次数据渲染预览
-
一键定位:配置页「定位」按钮自动按 IP 反查城市并填入城市 + 经纬度,也可手动填高德坐标拾取器拿到的精确坐标
-
固件在线更新(OTA):配置页一键检查 GitHub 最新版本并无线刷机,全程无需数据线;也可手动上传 bin。双 OTA 分区 + 固件校验,坏包自动拒绝不会变砖
-
断线自动重连、天气定时刷新(默认 15 分钟,可改)
本仓库已配置 GitHub Actions:每次推送代码会自动编译 ESP32-C3 固件并发布到 GitHub Pages,因此你可以只靠浏览器刷入固件:
🌐 安装页:
https://Escaper929.github.io/WeatherClock/
用法:
- 用 USB 线把 ESP32-C3 Super Mini 连到电脑(按 Ctrl 键用 Chrome/Edge/Firefox 打开安装页,不支持 Safari/iOS)。
- 点击“连接并烧录”→ 选择设备串口 → 等待烧录完成。
- 设备自动重启并弹出 WiFi 配置窗口 → 填入新环境的 WiFi 与密码 → 浏览器自动打开设备配置页,补填 API Key / 城市。
首次部署:仓库 Settings → Pages → Source 选 “GitHub Actions”,并等一次 Actions 构建通过后,安装页才生效。
只有首次(或救砖)需要电脑:设备跑起来之后,固件升级直接在配置页点「检查更新 → 下载并刷机」即可,从 GitHub(jsDelivr 镜像,国内可达)无线拉取最新固件。
送人 / 搬家换网络:不用重新配置。浏览器打开安装页点「连接设备 · 仅切换 WiFi」→ 选新 WiFi,只更新网络,已保存的天气 API Key、城市/地址、行情、主题全部保留;无电脑时按住 BOOT 上电进入热点(
WeatherClock-xx)切换亦可。
1.54″ ST7789 7 引脚模块 -> ESP32-C3 Super Mini(按丝印引脚):
| 屏模块 | ESP32-C3 | 板子丝印 |
|---|---|---|
| VCC | 3.3V | Pin 3 |
| GND | GND | Pin 2 |
| SCL (SCLK) | GPIO21 | Pin 16 |
| SDA (MOSI) | GPIO20 | Pin 15 |
| CS | GPIO6 | Pin 10 |
| DC | GPIO7 | Pin 11 |
| RST (RES) | GPIO10 | Pin 14 |
| BL (背光) | GPIO5 | Pin 9 |
注意:GPIO8 是板载 LED、GPIO9 是 BOOT 按键,都不要接屏。接线定义集中在 include/BoardPins.h,如需调整改那一处即可。
- 安装 PlatformIO(或 VS Code + PlatformIO 插件)。
- 注册 和风天气 QWeather,创建一个免费版(开发)应用,拿到 API Key。
# 构建
pio run
# 烧录
pio run -t upload
# 查看串口日志(C3 原生 USB CDC)
pio device monitor -b 115200- 首次上电(未配置)会自动进入配置门户。
- 手机/电脑连接 WiFi
WeatherClock-xx,浏览器打开http://192.168.4.1。 - 填写 WiFi、API Key、城市名(如
北京,或直接填经纬度),点“保存并重启”。 - 设备连接 WiFi、同步时间、拉取天气,进入主界面。
- 以后想改配置:直接用浏览器访问
http://<设备IP>(开机时屏幕会显示 IP,或输入http://weatherclock.local);按住 BOOT 键上电也可进入软 AP 门户。 - 自动定位:配置页城市栏点「定位」→ 按 IP 自动填城市 + 经纬度;要更精确可到 高德坐标拾取器 复制坐标填入「经纬度」。
- 行情:配置页「行情」卡增删最多 6 个行情槽、设置轮播间隔(2–60s),保存后底部按间隔轮播。
- 以后想升级固件:配置页左栏「固件更新」卡片 → 「检查更新」(显示当前版本与 GitHub 最新版本)→ 有新版时点「下载并刷机」,设备自动拉取写入并重启,无需连接电脑。
- 换环境 / 切换 WiFi:见上文「送人 / 搬家换网络」,配置全部保留。
tianqishizhong/
├── platformio.ini # 构建配置(esp32c3)
├── partitions_4mb.csv # 4MB 分区表(支持 OTA)
├── include/
│ ├── BoardPins.h # 引脚与常量
│ ├── AppConfig.h # 配置存储(NVS)
│ ├── WiFiTime.h # WiFi + NTP + 时区
│ ├── Weather.h # 和风天气客户端(含一键定位)
│ ├── Quote.h # 行情数据源(金价/沪铜/原油/自定义 JSON)
│ ├── Theme.h # 多主题接口与 UiData 数据视图
│ ├── UiTheme.h # 基础色板工具
│ └── Portal.h # 网页配置门户
└── src/
├── main.cpp # 主循环:数据层(时间/天气/行情)
├── Screen.cpp # ST7789 屏幕驱动
├── Theme.cpp # 主题分发与激活
├── Portal.cpp # 网页配置(双栏布局 + 主题换肤预览)
└── themes/ # 5 套主题实现 + ThemeShared 共享绘制原语
├── theme_modern.cpp / theme_retro.cpp / theme_pixel.cpp
├── theme_wasteland.cpp / theme_mario.cpp
└── ThemeShared.h/.cpp
- 刷新间隔、亮度:改
include/BoardPins.h - 时区:配置页下拉选择(POSIX TZ 串,支持夏令时),默认 UTC+8
- 天气定位:配置门户填“经度,纬度”即用坐标查询(比城市更细到区县);也可点「定位」按 IP 自动填城市/经纬度
- 行情:配置页「行情」卡增删槽位、改轮播间隔(2–60s);金价走京东金融、沪铜走东财日 K、布油走东财实时(数据源集中在
src/Quote.cpp) - 新增主题:在
src/themes/仿照现有主题新建theme_xxx.cpp实现xxxTick(const UiData&, bool),然后在include/Theme.h枚举加 id 并更新THEME_COUNT、在src/Theme.cpp注册分发并补themeName()/themeDesc();各主题布局与配色完全独立(脏检测模式见Theme.h头注释),网页预览皮肤在Portal.cpp的applyTheme()/CSS 加一个 class 即可