Files
Smart-flower-system/README.md
2026-03-14 19:27:14 +08:00

199 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# BotanicalBuddy
基于 ESP-IDF 的智能花卉系统固件项目ESP32-C3
当前结论:单片机端核心功能已完成,可直接联调 App/小程序侧。
## 固件完成度
- 环境采集:土壤湿度、空气温湿度、光照强度
- 本地显示LCD + LVGL 多页面轮播
- 设备控制:水泵、补光灯(高电平有效)
- 自动控制:阈值 + 回差控制
- 手动控制MQTT 远程开关泵/灯
- 模式切换:`auto` / `manual`
- 告警推送:超阈值边沿事件上报
- 状态上报:周期性遥测(含模式与执行器状态)
- Wi-Fi 配网SoftAP + Captive Portal
- 状态网页:独立 HTTP 状态看板与 JSON API端口 8080
## 系统架构
- `main/`业务编排、控制循环、MQTT 回调对接
- `components/wifi-connect/`:配网与路由连接
- `components/lvgl_st7789_use/`LCD 与 LVGL 端口
- `components/ui/`:界面对象与变量绑定
- `components/i2c_master_messager/`AHT30、BH1750 采集
- `components/capactive_soil_moisture_sensor_V2.0/`:土壤湿度采集
- `components/io_device_control/`:水泵/补光灯 GPIO 控制
- `components/mqtt_control/`MQTT 连接、发布、控制指令解析
- `main/auto_ctrl_thresholds.*`:阈值存取与校验
- `main/auto_alerts.*`:告警判定与回调分发
- `main/status_web.*`独立状态网页服务HTTP 8080
## 状态网页(独立于配网页)
- 配网页面:`http://192.168.4.1`(仅 SoftAP 配网阶段)
- 状态页面:`http://<设备STA_IP>:8080/`
- 状态 API`http://<设备STA_IP>:8080/api/status`
说明:
- 两个网页服务独立运行,端口不同、职责不同。
- 状态页用于运行态观测,不承载 Wi-Fi 配网流程。
`/api/status` 当前主要字段:
- `temp``hum``soil``lux`:传感器字符串值
- `pump``light`:执行器状态(`on/off`
- `mode`:控制模式(`auto/manual`
- `soil_on``soil_off``light_on``light_off`:自动控制阈值
- `wifi_status`Wi-Fi 状态(`idle/provisioning/connecting/connected/failed/timeout`
- `sta_ip`STA 当前 IP
- `mqtt_connected`MQTT 连接状态(布尔)
- `i2c_ready``soil_sensor_ready`:关键外设初始化状态(布尔)
- `loop_counter`:主循环计数
- `uptime_ms`:设备运行时长(毫秒)
- `free_heap``min_free_heap``largest_block`:堆内存指标
- `app_version`:固件版本字符串
- `snapshot_update_ms``snapshot_update_count``snapshot_age_ms`:状态快照时间与更新统计
## 运行逻辑
1. 上电初始化 Wi-Fi、LCD、传感器、IO。
2. Wi-Fi 连通后启动 MQTT 与 Console。
3. 主循环每 1s 执行:
- 采集传感器并刷新 UI 数据。
-`mode=auto`,按阈值进行泵灯自动控制。
- 进行告警边沿判定并发布告警消息。
- 每 5s 发布一次状态遥测消息。
4. 收到 MQTT 控制消息时:
- 可切模式(`auto/manual`)。
- 可更新阈值(四个阈值需同条下发)。
- 可手动控制泵灯开关。
## 开发环境
- Linux
- ESP-IDF `v5.5.2`
- 目标芯片:`esp32c3`
## 编译与烧录
1. 配置环境变量
```bash
export IDF_PATH=/home/beihong/esp/v5.5.2/esp-idf
source $IDF_PATH/export.sh
```
2. 构建
```bash
idf.py set-target esp32c3
idf.py build
```
3. 烧录并监视日志
```bash
idf.py -p /dev/ttyACM0 flash monitor
```
## MQTT 协议
### ESP32 -> WEX
1. 告警消息主题:`topic/alert/esp32_iothome_001`
```json
{
"metric": "light",
"state": "alarm"
}
```
字段:
- `metric``soil``light`
- `state``normal``alarm`
2. 状态消息主题:`topic/sensor/esp32_BotanicalBuddy_001`
```json
{
"temp": "34.3",
"hum": "30.5",
"soil": "0",
"lux": "40",
"pump": "on",
"light": "off",
"mode": "auto",
"soil_on": 35.0,
"soil_off": 45.0,
"light_on": 100.0,
"light_off": 350.0
}
```
字段:
- `pump``on/off`
- `light``on/off`
- `mode``auto/manual`
- `soil_on`:土壤湿度低阈值(低于该值自动开泵)
- `soil_off`:土壤湿度高阈值(高于该值自动关泵)
- `light_on`:光照低阈值(低于该值自动开灯)
- `light_off`:光照高阈值(高于该值自动关灯)
### WEX -> ESP32
控制主题:`topic/control/esp32_BotanicalBuddy_001`
1. 切换模式
```json
{ "mode": "manual" }
```
```json
{ "mode": "auto" }
```
2. 手动控制(建议先切到 `manual`
```json
{ "pump": "on", "light": "off" }
```
3. 更新自动阈值(四个字段需同时下发)
```json
{
"soil_on": 35,
"soil_off": 45,
"light_on": 100,
"light_off": 350
}
```
4. 混合下发(同一条消息可同时包含模式、阈值、手动开关)
```json
{
"mode": "auto",
"soil_on": 35,
"soil_off": 45,
"light_on": 100,
"light_off": 350,
"pump": "off",
"light": "on"
}
```
兼容输入:
- `pump/light` 支持 `on/off``true/false``1/0`
- `mode` 支持 `auto/manual`,也兼容 `true/false``1/0``true/1=auto`
## 联调建议
1. 先下发 `{"mode":"manual"}`,验证手动泵灯控制。
2. 再下发阈值并切 `{"mode":"auto"}`,观察自动控制接管。
3. 注意阈值含回差:
- 土壤:`soil_on` 开泵,`soil_off` 关泵
- 光照:`light_on` 开灯,`light_off` 关灯
## 说明
- 当前 README 聚焦单片机固件能力与联调协议。
- App/小程序页面与云端业务可按本协议直接对接。