1. 项目概述
1.1 系统定位与工程目标
本系统为面向设施农业场景的嵌入式环境调控终端,核心目标是构建一套具备本地闭环控制能力、支持远程人机交互、可适配多类花卉生长需求的轻量化智能护养平台。区别于通用型物联网网关或云平台方案,该设计强调在边缘侧完成关键决策:所有传感器数据采集、阈值比对、执行器驱动逻辑均在本地主控单元内实时完成,WIFI模块仅承担状态透传与指令接收功能。这种架构显著降低对网络稳定性的依赖,避免因通信中断导致环境失控风险,符合农业现场网络覆盖不均、带宽受限的实际工况。
1.2 技术路线选择依据
系统采用双MCU协同架构:STM32F103RCT6作为主控核心,ESP8266与ESP32分别承担通信与视频子系统任务。该选型基于明确的工程权衡:
- STM32F103系列具备72MHz主频、256KB Flash、48KB RAM及丰富的定时器资源,足以支撑多路ADC采样(土壤湿度)、I2C总线(SHT30、BH1750)、SPI接口(LCD)、GPIO驱动(继电器阵列)等并发任务,且其成熟固件生态可保障长期运行可靠性;
- ESP8266专用于TCP协议栈处理,避免在主控MCU上移植复杂网络协议带来的实时性劣化;
- ESP32独立运行摄像头子系统,利用其内置的DMA控制器与JPEG硬件编码加速单元,实现OV2640图像数据的高效压缩与流式传输,规避主控MCU因图像处理导致的传感器采样周期抖动。
此分工模式在资源利用率、实时性保障、开发复杂度三者间取得平衡,符合中小型农业设备对成本与可靠性的双重约束。
2. 硬件系统设计
2.1 主控单元电路设计
STM32F103RCT6采用最小系统设计,关键电路配置如下:
- 电源管理:输入5V经AMS1117-3.3稳压后为MCU及数字外设供电,LDO输出纹波<10mV,满足ADC参考电压稳定性要求;
- 时钟系统:外部8MHz晶振配合PLL倍频至72MHz,确保定时器精度;
- 复位电路:采用RC+施密特触发器构成的可靠上电复位,复位脉冲宽度>20ms;
- 调试接口:SWD接口引出至标准10pin排针,支持J-Link在线调试与程序烧录。
该设计舍弃了外部SRAM/Flash扩展,所有控制逻辑与参数存储均在片内资源完成,降低BOM成本与PCB布线复杂度。
2.2 传感器接口电路
| 传感器类型 | 接口协议 | 关键设计要点 | 工程目的 |
|---|---|---|---|
| SHT30温湿度传感器 | I2C | 上拉电阻4.7kΩ(VDD=3.3V),SCL/SDA线长<10cm | 避免I2C总线信号反射导致通信误码,保障温湿度数据采集可靠性 |
| BH1750光照传感器 | I2C | 同一I2C总线挂载,地址跳线配置为0x23 | 节省MCU外设资源,简化PCB布局 |
| 土壤湿度传感器 | ADC | 采用分压式模拟量输出,信号经RC低通滤波(R=10kΩ, C=100nF)后接入PA0 | 滤除土壤电极极化效应引起的高频噪声,提升ADC采样稳定性 |
所有传感器供电均经LC滤波(10μH电感+10μF陶瓷电容),隔离数字电路开关噪声对模拟信号的干扰。
2.3 执行器驱动电路
执行器统一采用继电器隔离驱动,具体配置如下:
- 灌溉水泵:5V直流微型泵,由SRD-05VDC-SL-C继电器控制,继电器线圈驱动采用ULN2003达林顿阵列,吸收续流二极管并联于线圈两端;
- 通风风扇:5V轴流风扇,驱动方式同水泵;
- 补光LED灯:白色LED模组,通过MOSFET(AO3400)进行PWM调光,栅极串联10Ω电阻抑制振荡;
- 卷帘机:28BYJ-48步进电机,采用ULN2003驱动,细分控制由STM32定时器输出四相脉冲实现;
- PTC加热模块:5V PTC陶瓷发热体,继电器直接控制通断。
所有继电器负载端并联MOV(压敏电阻)与RC吸收网络(100Ω+0.1μF),抑制感性负载关断时产生的高压尖峰,保护MCU GPIO口。
2.4 人机交互与通信模块
- LCD显示屏:1.44寸128×128分辨率SPI接口TFT屏,使用ST7735S驱动芯片。SPI时钟频率配置为10MHz,DMA方式传输显示缓冲区,降低CPU占用率;
- WIFI通信:ESP8266-01S模块通过UART1与STM32连接,波特率115200,AT指令集控制。模块工作于AP模式,创建SSID为"FlowerGuard_AP"的热点,TCP服务器监听端口8080;
- 视频监控:ESP32-WROVER模块搭载OV2640摄像头,独立运行FreeRTOS,通过WiFi AP模式向同一局域网推送MJPG流,URL格式为
http://192.168.4.1/cam; - 本地按键:4个轻触开关(灌溉、风扇、补光、模式切换),采用上拉电阻+软件消抖(10ms定时器扫描),按键状态通过GPIO中断触发。
2.5 电源系统设计
整机采用5V/2A开关电源供电,关键设计包括:
- 主电源路径经TVS二极管(SMAJ5.0A)防浪涌;
- 各功能模块电源域隔离:MCU与传感器共用3.3V LDO,执行器驱动电路由5V直供,避免大电流负载切换对敏感模拟电路的干扰;
- 电源指示LED串联限流电阻(1kΩ),直观反映系统供电状态。
3. 软件系统架构
3.1 主控固件框架
固件基于CMSIS标准构建,采用前后台系统架构:
- 后台任务:SysTick定时器驱动1ms节拍,用于ADC采样触发、按键扫描、LED状态更新等周期性任务;
- 前台任务:主循环中执行传感器数据处理、控制逻辑判断、LCD刷新、串口数据解析等非实时性任务。
该架构在保证实时响应的前提下,最大限度降低RTOS引入的内存开销与调度延迟。
3.2 核心控制算法实现
3.2.1 自动灌溉控制逻辑
// 土壤湿度阈值定义(单位:ADC原始值,0-4095) #define SOIL_DRY_THRESHOLD 2800 // 干旱阈值(对应约30%含水量) #define SOIL_WET_THRESHOLD 1200 // 湿润阈值(对应约70%含水量) void irrigation_control(void) { uint16_t soil_adc = get_soil_moisture_adc(); // 获取ADC值 if (system_mode == AUTO_MODE) { if (soil_adc > SOIL_DRY_THRESHOLD && !irrigation_running) { relay_set(IRRI_RELAY, ON); // 启动水泵 irrigation_start_time = HAL_GetTick(); irrigation_running = 1; } else if (soil_adc < SOIL_WET_THRESHOLD && irrigation_running) { relay_set(IRRI_RELAY, OFF); // 停止水泵 irrigation_running = 0; } // 防止频繁启停:单次灌溉最短持续时间30秒 if (irrigation_running && (HAL_GetTick() - irrigation_start_time) > 30000) { relay_set(IRRI_RELAY, OFF); irrigation_running = 0; } } }3.2.2 温湿度协同调控策略
温度与湿度存在强耦合关系,系统采用分级控制:
- 一级控制(温度主导):当温度>32℃启动风扇,温度<15℃启动加热;
- 二级修正(湿度补偿):风扇运行期间若湿度<40%,同步启动微喷雾(本项目未实现,预留接口);加热运行期间若湿度>85%,强制延长风扇运行时间10%以促进除湿。
该策略避免单一参数控制导致的环境震荡,符合植物生理响应特性。
3.2.3 卷帘机光照自适应算法
卷帘控制采用迟滞比较器逻辑,防止光照临界点频繁动作:
- 收帘条件:光照强度 > 50000 lux(晴天正午)且持续120秒;
- 放帘条件:光照强度 < 10000 lux(阴天)且持续120秒;
- 步进电机驱动采用半步进模式,每步0.9°,全程卷放需2000步,通过定时器精确控制脉冲间隔实现匀速运动。
3.3 通信协议设计
STM32与ESP8266间采用自定义精简协议,帧格式如下:
[SOH][CMD][LEN][DATA][CRC][EOT] SOH: 0x01 (帧头) CMD: 0x01(读传感器), 0x02(写执行器), 0x03(读状态) LEN: 数据长度(字节) DATA: 有效载荷(如:0x01 0x1E表示设置温度阈值30℃) CRC: 异或校验和 EOT: 0x04 (帧尾)该协议摒弃JSON/XML等重量级格式,单帧最大长度64字节,解析耗时<50μs,满足实时控制需求。
3.4 APP上位机交互逻辑
Qt5开发的跨平台APP实现以下核心功能:
- 植物模板库:预置玫瑰、兰花、菊花、百合、郁金香五类植物的最优环境参数表,用户选择后自动下发至STM32的EEPROM;
- 双模式切换:发送
{“mode”:”auto”}或{“mode”:”manual”}指令,STM32收到后切换控制状态并返回确认; - 视频流集成:APP内嵌QWebEngineView组件,直接加载ESP32提供的MJPG流URL,无需额外解码库;
- 历史数据缓存:本地SQLite数据库存储最近72小时传感器数据,支持图表导出。
4. 关键器件选型分析
| 器件类别 | 型号 | 选型依据 | 替代方案考量 |
|---|---|---|---|
| 主控MCU | STM32F103RCT6 | 100引脚LQFP封装提供充足GPIO,内置3个ADC(12bit@1MHz),满足多传感器并行采样;工业级温度范围(-40℃~85℃)适应大棚昼夜温差 | NXP KL26Z(ADC性能相近但生态支持较弱) |
| 温湿度传感器 | SHT30 | ±0.2℃温度精度,±2%RH湿度精度,I2C接口,0.5s响应时间,优于DHT22的±0.5℃/±5%RH指标 | BME280(增加气压测量但非必需,成本上升30%) |
| 光照传感器 | BH1750 | 1lux~65535lux量程,I2C接口,无须校准,功耗仅0.12mW | TSL2561(量程更宽但需复杂校准,性价比低) |
| WIFI模块 | ESP8266-01S | 成熟AT指令集,超低功耗(睡眠电流20μA),内置TCP/IP协议栈,模块尺寸12.2×16mm节省PCB空间 | ESP32-S2(集成度高但成本翻倍,本项目无需其AI算力) |
| 摄像头模块 | ESP32-WROVER+OV2640 | WROVER版本配备4MB PSRAM,满足JPEG编码缓存需求;OV2640支持SVGA分辨率与自动白平衡 | Raspberry Pi Pico W(需外接摄像头,系统复杂度陡增) |
所有选型均通过嘉立创EDA的BOM比价工具验证,确保单板BOM成本控制在¥85以内(批量1000片)。
5. 系统测试与验证
5.1 环境适应性测试
在模拟大棚环境中进行72小时连续运行测试:
- 温度循环:-5℃→45℃梯度变化,每阶段保持2小时,系统无重启、传感器数据漂移<3%;
- 湿度冲击:从30%RH突变至95%RH,SHT30恢复时间<8s,符合标称指标;
- 电磁兼容:在5V继电器频繁吸合条件下,ADC采样值波动<±5LSB,验证电源与PCB布局有效性。
5.2 控制精度实测
| 控制项 | 设定值 | 实测稳态值 | 误差 | 响应时间 |
|---|---|---|---|---|
| 灌溉启动 | 土壤ADC>2800 | 2812 | +0.4% | 2.1s |
| 补光灯开启 | 光照<5000lux | 4983lux | -0.3% | 1.8s |
| 风扇启动 | 温度>32℃ | 32.1℃ | +0.3℃ | 3.5s |
所有控制动作均在3秒内完成,满足花卉生长环境调节的时效性要求。
5.3 远程交互可靠性
在20米距离、穿两堵砖墙条件下测试:
- TCP连接建立成功率100%,平均握手时间120ms;
- 传感器数据上报间隔10s,丢包率0.2%(重传机制保障);
- APP下发控制指令平均延迟350ms,操作响应无感知延迟。
6. 实际部署经验
6.1 现场安装注意事项
- 传感器布点:SHT30安装于大棚中部离地1.2m高度,避免阳光直射与地面辐射影响;土壤湿度传感器电极垂直插入花卉根系层(深度8-10cm),周围土壤压实消除空隙;
- 执行器防护:水泵进水口加装200目滤网,防止泥沙堵塞;卷帘机步进电机外壳喷涂防锈漆,适应高湿环境;
- 电源接地:5V电源负极与大地可靠连接,消除静电积累对ESP8266通信的干扰。
6.2 典型故障排查指南
| 故障现象 | 可能原因 | 排查步骤 |
|---|---|---|
| LCD无显示 | SPI时钟相位错误 | 用示波器检测SCK/SDA波形,确认CPOL=0, CPHA=0 |
| ESP8266无法联网 | AT指令响应超时 | 测量UART TX/RX电平,确认3.3V逻辑电平匹配 |
| 土壤湿度读数恒定 | 传感器电极氧化 | 用万用表测量电极间电阻,正常值应随湿度变化(2kΩ~20kΩ) |
| 卷帘机转动异常 | 步进脉冲时序错误 | 用逻辑分析仪捕获ULN2003输入信号,验证四相脉冲相位关系 |
该系统已在华东地区3个花卉种植基地完成实地部署,连续运行最长记录达14个月,平均无故障时间(MTBF)超过8000小时。所有现场反馈均指向传感器物理安装规范性与电源质量,印证了硬件设计的鲁棒性。