# 天气时钟界面说明 ## 📋 概述 已成功将Arduino版本的MiniTV天气时钟UI移植到ESP-IDF LVGL环境中。新的天气时钟界面完全替换了原来的简单时钟界面,提供更丰富的信息显示。 ## 🎨 界面布局 参考Arduino版本,新界面采用240x240分区布局: ``` ┌─────────────────────────────────┐ │ 天气信息滚动 │ 城市名称 │ 顶部 (0-34px) ├─────────────────────────────────┤ │ │ │ 时:分 秒 │ 中部 (35-165px) │ (大字体) (小字体) │ │ │ ├─────┬─────────────┬─────────────┤ │ AQI │ 湿度图标 │ 温度图标 │ 底部上 (166-200px) │空气 │ 💧XX% │ 🌡️XX℃ │ ├─────┼─────────────┼─────────────┤ │周X │ XX月XX日 │ (空白) │ 底部下 (200-240px) └─────┴─────────────┴─────────────┘ ``` ## ✨ 新增功能 ### 1. 天气数据显示 - ✅ 城市名称 - ✅ 实时温度 - ✅ 湿度百分比 - ✅ 空气质量指数(AQI)和等级 - ✅ 最高/最低温度 - ✅ 风向和风速 ### 2. 动态信息滚动 顶部滚动区域每2.5秒切换显示: - 实时天气状况 - 空气质量描述 - 风向风速信息 - 今日天气概况 - 最低/最高温度 ### 3. AQI颜色编码 空气质量指数自动显示对应颜色: - 🟢 优 (0-50): 绿色 - 🟡 良 (51-100): 黄色 - 🟠 轻度污染 (101-150): 橙色 - 🟣 中度污染 (151-200): 紫红色 - 🔴 重度污染 (200+): 深红色 ### 4. 自动更新 - ⏰ 时间:每秒更新 - 🌤️ 天气:每10分钟更新一次 ## 📁 新增文件 1. **idle_screen.h** - 天气时钟UI头文件(重写) 2. **idle_screen.cc** - 天气时钟UI实现(重写) 3. **weather_service.h** - 天气API服务头文件 4. **weather_service.cc** - 天气API服务实现 ## 🔧 修改文件 1. **genjutech-s3-1.54tft.cc** - 添加 `SpiLcdDisplayEx` 类扩展 - 集成天气服务 - 添加 `InitWeatherService()` 方法 - 自动启动天气更新任务 ## 🌐 天气API 使用中国天气网API: - 城市代码自动检测:`http://wgeo.weather.com.cn/ip/` - 天气数据获取:`http://d1.weather.com.cn/weather_index/{城市代码}.html` ### 🎯 城市代码配置(两种方式) #### 方式1:自动检测(推荐)✨ **默认已启用**,WiFi连接后会根据IP地址自动获取所在城市! 在 `genjutech-s3-1.54tft.cc` 的 `InitWeatherService()` 中: ```cpp self->weather_service_.Initialize(""); // 空字符串 = 自动检测 ``` **优点**: - ✅ 无需手动配置 - ✅ 根据实际位置显示天气 - ✅ 设备移动到其他城市会自动适应 - ✅ 失败时自动回退到北京 #### 方式2:手动指定城市代码 如果你想固定显示某个城市的天气,可以指定城市代码: ```cpp self->weather_service_.Initialize("101280601"); // 指定:深圳 ``` **常用城市代码:** - 北京:`101010100` - 上海:`101020100` - 广州:`101280101` - 深圳:`101280601` - 成都:`101270101` - 杭州:`101210101` - 武汉:`101200101` - 西安:`101110101` - 青岛:`101120201` - 南京:`101190101` - 重庆:`101040100` - 天津:`101030100` **优点**: - ✅ 可查看其他城市天气 - ✅ 不受网络IP地址影响 ## 🎯 使用说明 ### 1. 编译 ```bash idf.py build ``` ### 2. 烧录 ```bash idf.py flash monitor ``` ### 3. 配置城市 修改 `genjutech-s3-1.54tft.cc` 中的城市代码后重新编译烧录。 ## 🔄 与原有功能的集成 - ✅ 保留语音交互功能 - ✅ 保留闹钟功能 - ✅ 闹钟触发时在时钟界面上显示 - ✅ 设备空闲时自动显示天气时钟 - ✅ 语音交互时自动切换到聊天界面 ## 🐛 故障排查 ### 天气数据不显示 1. 检查WiFi连接状态 2. 检查城市代码是否正确 3. 查看串口日志中的天气API响应 ### 界面显示异常 1. 确认LVGL初始化正常 2. 检查显示锁是否正确使用 3. 查看内存使用情况 ## 📝 注意事项 1. 天气更新需要WiFi连接 2. 首次获取天气数据需等待5秒(WiFi连接时间) 3. 天气API可能受网络状况影响 4. 建议在WiFi稳定环境下使用 ## 🎨 设计理念 - **简洁实用**:一屏显示所有关键信息 - **视觉清晰**:分区明确,信息层次分明 - **动态更新**:滚动显示更多天气详情 - **色彩编码**:AQI用颜色直观表示空气质量 ## 🚀 未来扩展 可能的扩展方向: - [ ] 支持多城市切换 - [ ] 添加未来天气预报 - [ ] 自定义UI主题和颜色 - [ ] 添加天气图标/动画 - [ ] 支持更多天气数据源 --- **移植时间**: 2025-01-10 **原始参考**: Arduino MiniTV Weather Clock by DIY攻城狮 **实现版本**: ESP-IDF + LVGL