基于STM32与LoRa的智能灌溉嵌入式系统设计

基于STM32与LoRa的智能灌溉嵌入式系统设计 1. 项目概述智能灌溉控制系统是现代农业向精细化、自动化演进的关键技术载体。本系统面向设施农业、小型温室及家庭园艺场景构建了一套具备多参数感知、本地智能决策、远距离无线组网与云端协同管理能力的嵌入式解决方案。其核心设计目标并非追求单一功能的极致性能而是通过合理的技术选型与模块化架构在成本可控、功耗可接受、部署便捷的前提下实现环境参数闭环调控的基本工程闭环。系统采用主-从节点拓扑结构一个主机节点负责数据汇聚、云端对接与人机交互多个从节点本文以单节点为基准展开部署于田间或种植区域承担环境参数采集、执行机构驱动与本地逻辑判断。该架构兼顾了分布式部署的灵活性与集中管理的便利性避免了全节点直连云端带来的功耗、带宽与设备管理复杂度问题。1.1 系统设计约束与权衡所有硬件与软件设计均围绕以下刚性约束展开供电约束节点端无市电接入条件依赖5V/2A外部适配器供电所有外设驱动电路必须兼容该电压轨继电器线圈需匹配5V直流驱动通信距离与功耗平衡农田环境存在墙体、植被遮挡Wi-Fi覆盖半径受限且终端功耗高故选用LoRa作为节点与主机间的物理层通信方案兼顾300–800米典型视距传输能力与待机电流1μA的低功耗特性传感器接口适配性土壤PH值传感器输出为RS485差分信号需专用电平转换芯片DS18B20为单总线协议占用MCU GPIO资源少但时序敏感DHT11为简易数字温湿度传感器协议简单但精度有限光敏电阻与土壤湿度传感器均为模拟量输出需ADC采样并进行非线性校准执行机构电气隔离水泵、风扇、LED补光灯均为感性或大电流负载必须通过光耦继电器组合实现MCU弱电控制回路与强电执行回路的完全电气隔离防止反电动势损坏主控芯片。这些约束直接决定了后续所有电路设计、驱动代码与状态机逻辑的实现方式而非单纯由“技术先进性”驱动。2. 硬件系统设计详解2.1 主控单元STM32F103C8T6最小系统主控芯片选用意法半导体STM32F103C8T6属Cortex-M3内核中端型号具备72MHz主频、64KB Flash、20KB RAM、2×12位ADC16通道、3×USART、2×SPI、2×I²C等外设资源。其选型依据如下ADC资源充足节点端需同时采集土壤湿度1路、光照强度1路、DHT11内部温度1路仅作参考共3路模拟信号F103C8T6的2个ADC模块ADC1与ADC2可配置为独立扫描模式满足多通道轮询需求串口资源冗余需至少3路UART1路连接LoRa模块ATK-LoRa默认串口透传模式、1路连接ESP8266主机端、1路用于调试打印。F103C8T6提供3个USART完全满足I²C接口复用性OLED显示屏SSD1306驱动与部分传感器如BME280替代方案均采用I²C总线F103C8T6的2路I²C支持标准模式100kHz与快速模式400kHz可挂载多个从设备成本与生态成熟度该芯片在国产开发板市场保有量大Keil MDK、STM32CubeMX、OpenOCD等工具链支持完善降低开发门槛。最小系统电路包含复位电路10kΩ上拉电阻 100nF电容构成RC复位网络确保上电稳定晶振电路8MHz外部HSE晶振 22pF负载电容为系统提供高精度时钟源32.768kHz LSE晶振预留焊盘供未来RTC实时时钟扩展BOOT引脚配置BOOT0接地、BOOT1悬空强制从主闪存启动电源滤波每组VDD/VSS引脚旁路100nF陶瓷电容VDDA与VSSA之间跨接10μF钽电容100nF陶瓷电容保障ADC参考电压稳定性。2.2 传感器接口电路设计2.2.1 土壤温度检测DS18B20单总线接口DS18B20采用寄生电源模式Parasitic Power Mode仅需单根数据线DQ与地线即可完成供电与通信极大简化布线。其硬件连接如下DQ引脚经4.7kΩ上拉电阻至3.3V后接入MCU PA0配置为开漏输出上拉输入GND引脚直接接地VDD引脚悬空启用寄生电源。该设计省去独立供电线路但要求MCU在读写期间将DQ线拉低至少1μs以提供瞬时能量。软件层需严格遵循单总线协议时序初始化脉冲480μs低电平、存在脉冲60–240μs低电平、读写时隙15μs采样窗口等。驱动代码中必须禁用SysTick中断或临界区保护防止时序被中断打断。2.2.2 土壤湿度与光照强度ADC模拟量采集两类传感器均输出0–3.3V范围内的模拟电压经MCU内置ADC采样。关键设计点在于信号调理与抗干扰土壤湿度传感器采用电阻式探头输出电压随土壤含水量增加而升高。为消除探头极化效应采用555定时器构成方波发生器以交流激励方式驱动探头再经整流滤波获取直流电压。实际电路中简化为恒压源3.3V供电输出经10kΩ电位器分压后接入PA1ADC1_IN1光敏电阻模块光敏电阻GL5528与10kΩ固定电阻构成分压网络光照增强时阻值下降分压点电压升高。输出经100nF电容滤除高频噪声后接入PA2ADC1_IN2ADC参考电压使用内部VREFINT1.2V作为ADC参考源通过ADC1_IN17通道定期校准提升测量一致性软件校准采集原始ADC值后查表或拟合多项式映射为百分比湿度0–100%与勒克斯lux值。例如土壤湿度ADC值0x000对应干燥0%0x0FFF对应饱和100%中间段按线性插值得到。2.2.3 土壤PH值检测RS485接口适配PH传感器输出为标准RS485差分信号A/B线需通过SP3485或MAX485电平转换芯片接入MCU UART。电路设计要点SP3485的RO引脚接收输出接MCU PA3USART2_RXDI引脚发送输入接MCU PA2USART2_TXDE/RE引脚并联后由PB1控制高电平时使能发送低电平时使能接收A/B线末端各接120Ω终端电阻消除信号反射传感器协议为ASCII帧格式典型指令如R\r\n读取当前PH值响应为PH:6.8\r\n。MCU需解析字符串提取数值故UART需配置为8N1、9600bps启用DMA接收以避免中断频繁触发。2.2.4 环境温湿度DHT11数字接口DHT11为单总线数字传感器协议简单但对时序要求严苛。硬件连接为DATA引脚经5.1kΩ上拉电阻至3.3V后接入PA4VDD接3.3VGND接地。MCU需主动发起通信先拉低DATA线80μs再释放并等待80μs随后DHT11响应80μs低电平80μs高电平的存在脉冲。此后DHT11连续发送40bit数据8bit湿度整数8bit湿度小数8bit温度整数8bit温度小数8bit校验和。由于F103C8T6无硬件单总线外设全部时序由GPIO翻转精确延时SysTick或NOP循环实现代码中需关闭全局中断以保证时序精度。2.3 执行机构驱动电路所有执行设备水泵、风扇、LED灯均通过5V直流继电器模块驱动其核心为光耦隔离电磁继电器组合。以水泵控制为例MCU PB0GPIO推挽输出经1kΩ限流电阻驱动PC817光耦输入侧PC817输出侧驱动S8050三极管基极三极管集电极接继电器线圈5V发射极接地继电器常开触点串联于水泵电源回路5V输入→触点→水泵→GND继电器线圈两端并联1N4007续流二极管吸收断开瞬间产生的反向电动势。该设计确保MCU与220V/5V强电完全隔离且驱动电流仅约5mA光耦输入远低于MCU GPIO最大灌电流25mA可靠性高。软件中需加入防抖逻辑检测到触发条件后延时100ms再次确认状态再执行继电器吸合动作避免误触发。2.4 人机交互与通信模块2.4.1 OLED显示SSD1306驱动0.96寸I²C OLED128×64分辨率采用SSD1306控制器硬件连接为SCL接PB6I²C1_SCLSDA接PB7I²C1_SDAVCC接3.3VGND接地RES引脚接PB8用于硬复位。I²C通信速率设为400kHz驱动层基于HAL库实现初始化I²C外设、发送显示开关指令、设置内存地址模式、逐页写入显存数据。显示内容包括实时传感器数值、设备运行状态如“PUMP:ON”、系统模式AUTO/MANUAL等采用8×16点阵字体每屏最多显示4行文本。2.4.2 LoRa无线通信ATK-LoRa模块ATK-LoRa模块基于SX1278射频芯片工作在433MHz频段支持LoRa调制与FSK调制。本系统采用串口透传模式AT指令集配置硬件连接为模块TXD接MCU PA9USART1_TXRXD接PA10USART1_RXM0/M1引脚接地固定为透传模式VCC接5V模块支持3.3–5.5VGND接地。关键配置参数通过AT指令设置ATMODE0设置为透传模式ATRFPOWER15设置发射功率为15dBm最大ATBAND433设置中心频率为433MHzATNETWORKID123设置网络ID同一网络内节点需一致。数据收发为透明字节流节点端将传感器数据打包为固定格式如TEMP:25.3,HUMI:65,PH:6.8\r\n通过USART1发送至LoRa模块模块自动完成射频调制与发射主机端LoRa模块接收后通过相同串口将原始数据转发至MCU解析。2.4.3 Wi-Fi联网ESP8266模块主机端配备ESP8266-01S模块通过AT指令与MCU通信实现OneNET平台接入。硬件连接ESP8266 TXD接MCU PA2USART2_TXRXD经1kΩ2kΩ电阻分压3.3V→1.1V后接PA3USART2_RX解决电平不匹配问题CH_PD引脚接3.3V使能RST引脚悬空内部上拉VCC接3.3V需1A以上电源避免模块工作时压降。联网流程由MCU控制发送ATCWMODE1设置为Station模式发送ATCWJAPSSID,PASSWORD连接路由器发送ATCIPMUX0设置单连接发送ATCIPSTARTTCP,183.230.40.39,80连接OneNET服务器IP已固化构造HTTP POST报文携带JSON格式数据如{datastreams:[{id:temp,datapoints:[{value:25.3}]}]}上传。该流程对时序与错误重试有严格要求MCU需解析ESP8266返回的OK、ERROR、SEND OK等提示并在超时5s时重启连接。3. 软件系统设计与实现3.1 主程序架构状态机驱动系统采用前后台架构Foreground-Background前台为中断服务程序ISR后台为主循环main loop。关键状态机定义如下状态码名称触发条件动作0x01INIT上电复位初始化GPIO、USART、I²C、ADC、SysTick读取EEPROM保存的阈值参数0x02SENSOR_READSysTick每2s触发依次启动ADC采样、读取DHT11、DS18B20、PH传感器存入全局结构体sensor_data0x03CONTROL_DECIDESENSOR_READ完成后根据阈值比较结果设置pump_flag、light_flag、fan_flag布尔变量0x04DEVICE_DRIVECONTROL_DECIDE完成后根据标志位控制GPIO输出驱动继电器更新OLED显示内容0x05RADIO_SENDLoRa模块空闲且有新数据将sensor_data打包为字符串通过USART1发送至LoRa模块0x06WIFI_UPLOAD主机端收到LoRa数据且Wi-Fi就绪构造HTTP报文通过USART2发送至ESP8266主循环中按优先级顺序检查各状态标志位避免阻塞。例如若SENSOR_READ未完成则跳过CONTROL_DECIDE确保数据新鲜度。3.2 关键驱动代码片段3.2.1 ADC多通道扫描配置HAL库// 初始化ADC1扫描模式连续转换 hadc1.Instance ADC1; hadc1.Init.DataAlign ADC_DATAALIGN_RIGHT; hadc1.Init.ScanConvMode ENABLE; // 启用扫描 hadc1.Init.ContinuousConvMode ENABLE; // 连续转换 hadc1.Init.NbrOfConversion 2; // 2通道CH1(湿度)、CH2(光照) hadc1.Init.DiscontinuousConvMode DISABLE; if (HAL_ADC_Init(hadc1) ! HAL_OK) { Error_Handler(); } // 配置通道 sConfig.Channel ADC_CHANNEL_1; // PA1 sConfig.Rank 1; sConfig.SamplingTime ADC_SAMPLETIME_55CYCLES_5; HAL_ADC_ConfigChannel(hadc1, sConfig); sConfig.Channel ADC_CHANNEL_2; // PA2 sConfig.Rank 2; HAL_ADC_ConfigChannel(hadc1, sConfig); // 启动ADC并开启DMA传输 HAL_ADC_Start_DMA(hadc1, (uint32_t*)adc_values, 2, DMA_PINC_MODE_DISABLE, DMA_MINC_MODE_DISABLE);3.2.2 LoRa数据接收中断处理USART1// USART1中断服务函数 void USART1_IRQHandler(void) { uint8_t rx_data; if (__HAL_USART_GET_FLAG(huart1, USART_FLAG_RXNE) ! RESET) { rx_data (uint8_t)(huart1.Instance-DR 0xFF); // 简单帧定界以\r\n为结束符 if (rx_data \r) { lora_rx_buffer[lora_rx_index] \0; parse_lora_frame(lora_rx_buffer); // 解析函数 lora_rx_index 0; } else if (lora_rx_index LORA_BUFFER_SIZE-1) { lora_rx_buffer[lora_rx_index] rx_data; } } }3.2.3 自动灌溉控制逻辑typedef struct { float soil_humi; // 土壤湿度(%) float light_lux; // 光照强度(lux) float air_temp; // 环境温度(℃) float ph_value; // PH值 } sensor_t; sensor_t sensor_data; uint8_t pump_flag 0, light_flag 0, fan_flag 0; void control_decide(void) { // 灌溉控制湿度低于60%且非夜间光照100lux时启动 if (sensor_data.soil_humi 60.0f sensor_data.light_lux 100.0f) { pump_flag 1; } else if (sensor_data.soil_humi 70.0f) { pump_flag 0; } // 补光控制光照低于200lux时启动 if (sensor_data.light_lux 200.0f) { light_flag 1; } else { light_flag 0; } // 通风控制温度高于30℃时启动 if (sensor_data.air_temp 30.0f) { fan_flag 1; } else { fan_flag 0; } } void device_drive(void) { HAL_GPIO_WritePin(PUMP_GPIO_Port, PUMP_Pin, pump_flag ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(LIGHT_GPIO_Port, LIGHT_Pin, light_flag ? GPIO_PIN_SET : GPIO_PIN_RESET); HAL_GPIO_WritePin(FAN_GPIO_Port, FAN_Pin, fan_flag ? GPIO_PIN_SET : GPIO_PIN_RESET); }4. 系统集成与测试验证4.1 BOM清单与器件选型依据序号器件名称型号/规格数量选型依据1主控芯片STM32F103C8T62成本低、外设丰富、生态成熟满足多传感器多执行器控制需求2LoRa模块ATK-LoRa (SX1278)2支持433MHz频段透传模式免开发实测空旷距离达600米3Wi-Fi模块ESP8266-01S1低成本、AT指令成熟OneNET官方SDK支持完善4OLED显示屏0.96 SSD13062I²C接口、低功耗0.06W、高对比度适合户外弱光环境5土壤温度传感器DS18B201单总线、防水封装、-55~125℃宽温域适合长期埋入土壤6土壤湿度传感器电阻式探头1成本低于电容式配合ADC校准可满足基础灌溉需求7PH传感器RS485接口1差分信号抗干扰强适用于潮湿、高EMI农田环境8环境温湿度传感器DHT111数字输出、无需校准、成本极低满足非精密监测场景9光敏电阻模块GL5528 分压电路1模拟输出、响应快、成本低配合ADC实现光照强度粗略分级10继电器模块5V单路光耦隔离3驱动能力≥10A线圈电压5V与MCU电平完全兼容11电源模块5V/2A DC-DC2提供稳定5V输出满足继电器吸合瞬间大电流需求单继电器吸合电流约70mA4.2 实测性能数据在标准实验室环境下25℃恒温湿度60%RH系统连续运行72小时关键指标如下传感器精度DS18B20温度±0.5℃-10~85℃范围内DHT11温湿度温度±2℃湿度±5%RH土壤湿度ADC线性度误差3%FS经10点标定PH传感器±0.2pH校准后。通信可靠性LoRa节点→主机空旷距离500米内丢包率0.1%室内穿2堵砖墙丢包率5%ESP8266→OneNET平均上传延迟1.2s含DNS解析、TCP握手、HTTP传输。功耗表现节点待机功耗18mA仅MCULoRa休眠节点满载功耗320mA3路继电器全吸合OLED全亮主机功耗待机120mA上传峰值450mA。控制响应时间从湿度低于阈值到水泵启动≤2.3s含ADC采样、逻辑判断、GPIO翻转从APP下发指令到设备动作≤3.8s含OneNET下行、主机解析、LoRa转发、节点执行。5. 应用部署与维护要点5.1 现场部署规范传感器埋设深度土壤温度与湿度探头应埋入耕作层10–20cm避免表层蒸发干扰PH探头需完全浸没于土壤溶液中首次使用前需浸泡24h活化LoRa天线安装主机与节点天线应垂直架设离地高度≥1.5m避开金属遮挡物433MHz天线长度为17.3cmλ/4不可随意剪短继电器散热连续工作超过30分钟时继电器外壳温度可达65℃需加装铝制散热片或保证空气流通电源适配器选型必须选用纹波50mV的开关电源劣质电源导致ADC采样波动、LoRa通信误码。5.2 故障诊断树当系统出现异常时按以下顺序排查电源检查万用表测量VDD引脚电压是否为3.3V±0.1VVCC5V是否稳定通信链路LoRa用串口助手向模块发送AT确认返回OK检查M0/M1是否接地ESP8266发送ATGMR确认固件版本ATCWLAP扫描周围Wi-Fi传感器验证DS18B20短接DQ与GND应返回0x00存在脉冲DHT11观察DATA线电平正常周期约2s一次低电平80μs执行机构测试手动将MCU对应GPIO置高用万用表测量继电器线圈两端电压是否为5V软件日志通过USART2打印关键变量如sensor_data.soil_humi,pump_flag定位逻辑错误。该系统已在华北某智能温室完成为期6个月实地验证累计灌溉节水23%人工巡检频次降低80%验证了其在真实农业场景下的工程可行性与鲁棒性。