feat:新增MQTT控制组件和自动告警系统
- 实现MQTT控制功能,处理水泵和灯光控制指令 - 新增土壤湿度和光照强度自动告警系统,阈值可配置 - 新建MQTT控制、自动告警和阈值管理相关文件 - 更新主应用,集成MQTT和自动控制功能 - 新增传感器数据与控制状态遥测上报 - 引入NVS和应用存储分区配置
This commit is contained in:
217
README.md
217
README.md
@@ -1,92 +1,163 @@
|
||||
# BotanicalBuddy
|
||||
|
||||
需求:
|
||||
智能盆栽管理系统
|
||||
1. 环境全维度监测:实时、同步监测土壤湿度、环境温湿度、光照强度。
|
||||
2. 智能预警通知:当任何监测数据超出用户设定的阈值时,系统自动向手机App推送报警信息。
|
||||
3. 双向远程控制:
|
||||
· 手动控制:用户通过手机App远程手动控制水泵浇水、补光灯开关。
|
||||
· 自动控制:系统根据预设阈值(如土壤过干)自动执行浇水或补光。
|
||||
4. 双模式人机交互:
|
||||
· 远程交互:通过手机App查看实时数据、历史曲线和进行控制。
|
||||
· 本地交互:通过LCD屏幕现场查看系统状态与关键数据。
|
||||
基于 ESP-IDF 的智能盆栽系统固件项目(ESP32-C3)。
|
||||
|
||||
基于 ESP-IDF 的植物助手项目,当前已集成:
|
||||
当前结论:单片机端核心功能已完成,可直接联调 App/小程序侧。
|
||||
|
||||
- **Wi-Fi 配网组件(wifi-connect)**:手机连接设备热点后通过网页完成路由器配置
|
||||
- **LCD 显示组件(lvgl_st7735s_use)**:基于 LVGL 驱动 ST77xx SPI 屏并显示界面
|
||||
- **I2C 传感器组件(i2c_master_messager)**:统一读取 BH1750 / AHT30 数据
|
||||
- **IO 外设控制组件(io_device_control)**:控制水泵与光照开关(高电平有效)
|
||||
## 固件完成度
|
||||
|
||||
## 功能特性
|
||||
- 环境采集:土壤湿度、空气温湿度、光照强度
|
||||
- 本地显示:LCD + LVGL 多页面轮播
|
||||
- 设备控制:水泵、补光灯(高电平有效)
|
||||
- 自动控制:阈值 + 回差控制
|
||||
- 手动控制:MQTT 远程开关泵/灯
|
||||
- 模式切换:`auto` / `manual`
|
||||
- 告警推送:超阈值边沿事件上报
|
||||
- 状态上报:周期性遥测(含模式与执行器状态)
|
||||
- Wi-Fi 配网:SoftAP + Captive Portal
|
||||
|
||||
- 长按按键进入配网模式
|
||||
- 支持两种配网策略:按键触发 / 常驻配网
|
||||
- 设备开启 SoftAP(`ESP32-xxxxxx`)+ Captive Portal
|
||||
- 手机访问 `http://192.168.4.1` 完成 Wi-Fi 配置
|
||||
- 支持清除已保存 Wi-Fi 参数并重新配网
|
||||
- 串口中文状态日志,便于调试和现场维护
|
||||
- 支持 ST77xx SPI LCD 显示(LVGL)
|
||||
- 支持方向/偏移参数化配置,便于后续适配不同屏幕
|
||||
- 支持水泵(GPIO1)与光照(GPIO10)控制接口
|
||||
## 系统架构
|
||||
|
||||
## 目录结构
|
||||
- `main/`:业务编排、控制循环、MQTT 回调对接
|
||||
- `components/wifi-connect/`:配网与路由连接
|
||||
- `components/lvgl_st7735s_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/`:应用入口(`app_main`)
|
||||
- `components/wifi-connect/`:配网组件实现与文档
|
||||
- `README.md`:组件说明
|
||||
- `USER_GUIDE.md`:用户操作手册
|
||||
- `QUICK_POSTER.md`:张贴版快速指引
|
||||
- `BLOG.md`:博客草稿
|
||||
- `components/lvgl_st7735s_use/`:LCD 显示组件(LVGL + ST77xx)
|
||||
- `README.md`:组件说明与调参指南
|
||||
- `components/i2c_master_messager/`:I2C 传感器管理组件
|
||||
- `README.md`:传感器采集与配置说明
|
||||
- `components/io_device_control/`:IO 外设控制组件
|
||||
- `README.md`:水泵/光照控制接口说明
|
||||
## 运行逻辑
|
||||
|
||||
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`(建议)
|
||||
- Python 与 ESP-IDF 工具链按官方方式安装
|
||||
- ESP-IDF `v5.5.2`
|
||||
- 目标芯片:`esp32c3`
|
||||
|
||||
## 快速开始
|
||||
## 编译与烧录
|
||||
|
||||
1. 配置并编译
|
||||
- `idf.py set-target esp32`
|
||||
- `idf.py build`
|
||||
2. 烧录并查看日志
|
||||
- `idf.py -p /dev/ttyUSB0 flash monitor`
|
||||
3. 显示初始化
|
||||
- 在 `app_main` 中调用:`ESP_ERROR_CHECK(start_lvgl_demo());`
|
||||
- 可选:`ESP_ERROR_CHECK(lvgl_st7735s_set_center_text("BotanicalBuddy"));`
|
||||
4. 配网
|
||||
- 按键触发模式:长按设备按键进入配网模式
|
||||
- 常驻配网模式:上电自动进入配网模式
|
||||
- 手机连接 `ESP32-xxxxxx`
|
||||
- 打开 `http://192.168.4.1`
|
||||
- 选择路由器并输入密码提交
|
||||
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
|
||||
```
|
||||
|
||||
- 若出现“按键未按下却进入配网”,通常是按键引脚与 LCD/外设复用导致电平抖动。
|
||||
- 可在 `WiFi Connect` 配置中调大:
|
||||
- `WIFI_CONNECT_BUTTON_STARTUP_GUARD_MS`(建议 8000~10000)
|
||||
- `WIFI_CONNECT_BUTTON_RELEASE_ARM_MS`(建议 300~500)
|
||||
- 若硬件允许,优先给配网按键使用独立 GPIO,避免与屏幕复位脚复用。
|
||||
- 若使用常驻配网模式,可不依赖按键触发(适合按键与 LCD 复位脚复用场景)。
|
||||
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"
|
||||
}
|
||||
```
|
||||
|
||||
字段:
|
||||
- `pump`:`on/off`
|
||||
- `light`:`on/off`
|
||||
- `mode`:`auto/manual`
|
||||
|
||||
### 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/小程序页面与云端业务可按本协议直接对接。
|
||||
|
||||
并完成 LCD 显示链路:
|
||||
- SPI 屏初始化
|
||||
- LVGL 显示注册
|
||||
- 方向/偏移可配置
|
||||
Reference in New Issue
Block a user