2026-03-14 20:27:48 +08:00
```
2026-03-14 14:35:56 +08:00
2026-03-14 14:19:32 +08:00
```
2026-03-14 14:35:25 +08:00
2026-03-14 14:19:32 +08:00
2026-03-14 14:19:32 +08:00
2026-03-14 14:19:32 +08:00
2026-03-14 14:19:32 +08:00
2026-03-14 14:19:32 +08:00
2026-03-14 19:27:14 +08:00
2026-03-14 20:27:48 +08:00

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/
  • 状态 APIhttp://<设备STA_IP>:8080/api/status

说明:

  • 两个网页服务独立运行,端口不同、职责不同。
  • 状态页用于运行态观测,不承载 Wi-Fi 配网流程。

/api/status 当前主要字段:

  • temphumsoillux:传感器字符串值
  • pumplight:执行器状态(on/off
  • mode:控制模式(auto/manual
  • soil_onsoil_offlight_onlight_off:自动控制阈值
  • wifi_statusWi-Fi 状态(idle/provisioning/connecting/connected/failed/timeout
  • sta_ipSTA 当前 IP
  • mqtt_connectedMQTT 连接状态(布尔)
  • i2c_readysoil_sensor_ready:关键外设初始化状态(布尔)
  • loop_counter:主循环计数
  • uptime_ms:设备运行时长(毫秒)
  • free_heapmin_free_heaplargest_block:堆内存指标
  • app_version:固件版本字符串
  • snapshot_update_mssnapshot_update_countsnapshot_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. 配置环境变量
export IDF_PATH=/home/beihong/esp/v5.5.2/esp-idf
source $IDF_PATH/export.sh
  1. 构建
idf.py set-target esp32c3
idf.py build
  1. 烧录并监视日志
idf.py -p /dev/ttyACM0 flash monitor

MQTT 协议

ESP32 -> WEX

  1. 告警消息主题:topic/alert/esp32_iothome_001
{
  "metric": "light",
  "state": "alarm"
}

字段:

  • metricsoillight
  • statenormalalarm
  1. 状态消息主题:topic/sensor/esp32_BotanicalBuddy_001
{
  "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
}

字段:

  • pumpon/off
  • lighton/off
  • modeauto/manual
  • soil_on:土壤湿度低阈值(低于该值自动开泵)
  • soil_off:土壤湿度高阈值(高于该值自动关泵)
  • light_on:光照低阈值(低于该值自动开灯)
  • light_off:光照高阈值(高于该值自动关灯)

WEX -> ESP32

控制主题:topic/control/esp32_BotanicalBuddy_001

  1. 切换模式
{ "mode": "manual" }
{ "mode": "auto" }
  1. 手动控制(建议先切到 manual
{ "pump": "on", "light": "off" }
  1. 更新自动阈值(四个字段需同时下发)
{
  "soil_on": 35,
  "soil_off": 45,
  "light_on": 100,
  "light_off": 350
}
  1. 混合下发(同一条消息可同时包含模式、阈值、手动开关)
{
  "mode": "auto",
  "soil_on": 35,
  "soil_off": 45,
  "light_on": 100,
  "light_off": 350,
  "pump": "off",
  "light": "on"
}

兼容输入:

  • pump/light 支持 on/offtrue/false1/0
  • mode 支持 auto/manual,也兼容 true/false1/0true/1=auto

联调建议

  1. 先下发 {"mode":"manual"},验证手动泵灯控制。
  2. 再下发阈值并切 {"mode":"auto"},观察自动控制接管。
  3. 注意阈值含回差:
    • 土壤:soil_on 开泵,soil_off 关泵
    • 光照:light_on 开灯,light_off 关灯

说明

  • 当前 README 聚焦单片机固件能力与联调协议。
  • App/小程序页面与云端业务可按本协议直接对接。
Description
智能花卉系统
Readme 1,014 KiB
Languages
C 99.8%
CMake 0.2%