Add CYD SGP30 air quality dashboard with flashable firmware.

LVGL dual-gauge UI for eCO2/TVOC on GPIO22/27, plus archived cyd_28r bins and one-click flash scripts.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-10-18 20:56:46 +08:00
commit 334cdeeb97
16 changed files with 1111 additions and 0 deletions

83
README.md Normal file
View File

@@ -0,0 +1,83 @@
# CYD SGP30 空气质量仪表盘
ESP32 Cheap Yellow Display(ESP32-2432S028R)+ SGP30 + LVGL 空气质量仪表盘。
布局与交互参考同目录下的 [temperature](../temperature) 温湿度项目。
## 硬件
| 项目 | 说明 |
|------|------|
| 板子 | CYD ESP32-2432S028R(2.8" ILI9341) |
| 传感器 | SGP30(eCO2 / TVOC) |
| SDA | **GPIO22** |
| SCL | **GPIO27** |
| 供电 | USB 5V;传感器接 **3.3V** |
接线:`VCC→3.3V`,`GND→GND`,`SDA→GPIO22`,`SCL→GPIO27`。
## 功能
- 横屏网格布局:双圆弧仪表(eCO2 ppm / TVOC ppb)+ 底部左空气质量 / 右趋势图(分区不重叠)
- EMA 平滑、min/max、综合空气质量条与分级(GOOD / FAIR / POOR / BAD)
- 上电约 15s 预热提示(`WARM`);圆弧与质量条缓动动画;趋势折线 SHIFT 更新
- 短按切换背光(4 档,顶部提示);长按 ≥0.7s 重置 min/max
- 连续读失败容错(连续失败才报错)
- 常亮运行(无自动熄屏 / 休眠)
## 构建与烧录
依赖 [PlatformIO](https://platformio.org/)。
```bash
pio run -e cyd_28r -t upload
pio device monitor -b 115200
```
### 预编译固件(随时刷,不必编译)
已归档到 [`firmware/cyd_28r/`](firmware/cyd_28r/)(含 bootloader / partitions / app):
```powershell
cd firmware\cyd_28r
.\flash.ps1
# 或 .\flash.ps1 -Port COM3
```
说明见 [`firmware/README.md`](firmware/README.md)。源码更新后重新打包:`.\firmware\export_from_build.ps1`。
### 环境选择
| 环境 | 适用 |
|------|------|
| `cyd_28r` | 标准 ILI9341 CYD(默认) |
| `cyd_28r_inv` | 颜色反相 / 发白 |
| `cyd_28_st7789` | USB-C 双口 / ST7789 变体 |
## 项目结构
```
platformio.ini # 板级与库依赖
include/lv_conf.h # LVGL 配置
src/main.cpp # 仪表盘主程序
scripts/exclude_lvgl_asm.py # 排除 ESP32 不兼容的 LVGL ASM
firmware/ # 预编译固件(可离线刷写)
.cursor/rules/ # Cursor 协作规则
README.md # 本文档
```
## 变更约定
每次功能或行为改动须:
1. 更新本 README(及必要时的注释)
2. `git add` + `git commit` 提交
详见 `.cursor/rules/git-and-docs.mdc`。
## 变更记录
| 日期 | 说明 |
|------|------|
| 2026-10-18 | 初版:LVGL 空气质量仪表盘 + SGP30(SDA=GPIO22 / SCL=GPIO27),eCO2/TVOC 双表盘、质量条、趋势图、背光与 min/max |
| 2026-10-18 | 初始化 Git;归档预编译固件到 `firmware/cyd_28r/`,附一键刷写脚本 |