STM32水稻苗大棚环境监测系统

从六路传感器采集到自动控制、上云远程监控,手把手讲透设计全流程

STM32水稻苗大棚环境监测系统:从六路传感器采集到自动控制、上云远程监控,手把手讲透设计全流程

一、为什么水稻育苗需要一套"自动管家"?

水稻育苗期是整个种植周期里最娇贵的阶段:温度高了烧苗、低了僵苗,湿度大了沤根、小了干尖,光照不够苗体徒长,CO₂浓度和土壤 pH 跑偏又直接影响养分吸收。传统做法是人工巡棚、凭经验开关棚膜和卷帘,数据滞后、误差大,一场倒春寒就可能毁掉一棚苗。

这篇要讲的系统,就是用一块 STM32 把大棚里环境温湿度、光照、土壤温湿度、CO₂、土壤 pH 六类参数实时盯住,超阈值自动拉窗帘、补光、开风扇、启加热、浇水,还能把数据推到阿里云,手机 APP 和电脑上位机随时远程看。整体成本低、模块全是常见型号,跟着本文从选型到接线到逻辑一次走通。

二、系统功能拆解:它到底能干什么

功能 说明
数据采集 环境温湿度(DHT11)、土壤温度(DS18B20)、土壤湿度(YL-69)、光照(光敏电阻)、CO₂(JW01)、土壤 pH(PH-4502C)
实时显示 0.96 寸 OLED 轮播各路数据与阈值
阈值自动控制 超上限/下限自动驱动对应执行器,无需人工干预
定时功能 按设定时间段自动启停补光、水泵、风扇(如夜间补光)
远程监控 ESP8266 通过 MQTT 上传阿里云,手机 APP / PC 上位机远程查看与控制
本地交互 按键设置阈值、切换显示、查看模式

自动控制逻辑(论文核心策略,可直接当需求文档用):

监测量 超限条件 动作
光照 高于上限 拉窗帘遮光
光照 低于下限 开补光灯
环境温度 过高 开风扇降温
环境温度 过低 开加热器
环境湿度 过高 开风扇除湿
土壤湿度 过低 开水泵浇灌

三、器件选型:为什么选它不选它

论文里每组器件都做了双方案对比,这里浓缩成一张表,把"为什么最终选它"的理由讲清楚:

模块 选定型号 落选方案 选定理由
主控 STM32F103C8T6 ATmega328P Cortex-M3 @72MHz、64KB Flash/20KB SRAM、外设丰富,跑多路 ADC+串口+MQTT 更从容
显示 OLED12864 (SSD1306) ILI9341 TFT 静态显示功耗低、I2C 两线接线简单,适合常显数据;TFT 全彩但费电且 SPI 占用资源多
环境温湿度 DHT11 HTU21D 预算有限且精度要求不高,DHT11 ±2℃/±5%RH 够用,单总线一根线连接最简单
土壤温度 DS18B20 LM35 数字输出免 ADC、±0.5℃ 精度、1-Wire 一线可挂多点,省去模拟信号调理
土壤湿度 YL-69 FC-28 便宜、即插即用,适合入门级农业项目
土壤 pH PH-4502C SEN0161 模拟输出直接进 ADC、经济,校准流程标准
CO₂ JW01-CO2-V2.2 MH-Z19 NDIR 原理 ±50ppm、0~5000ppm 量程覆盖大棚场景,价格更友好
时钟 DS1302 M41T62 三线串口易接、带电池备份、±2ppm 对定时需求足够
云平台 阿里云物联网平台 oneNET / 纯 QT 直连 设备接入+MQTT+数据存储一体,配合 QT 上位机与 uni-app APP 双端落地

成本参考(淘宝常见价,非论文数据):主控板 10 元级、OLED 8 元、DHT11 3 元、DS18B20 3 元、YL-69 3 元、光敏模块 2 元、JW01 CO₂ 40~60 元、PH-4502C 15 元、DS1302 3 元、ESP8266-01S 8 元、继电器/SSR 若干 10 元上下------整机 100 出头即可开搭。

四、硬件接线:一张表 + 三个容易踩的坑

论文中的核心接线整理如下(注意:论文原文存在个别模板残留冲突,见文末避坑提示,实物请以随文原理图为准):

模块 引脚 接 STM32
OLED12864 (I2C) SDA / SCL PB7 / PB6
DS18B20 (1-Wire) DQ PB8(接 4.7kΩ 上拉到 3.3V)
YL-69 土壤湿度 AO ADC 输入(模拟口,接 PA1 附近通道)
光敏电阻模块 OUT ADC 输入
PH-4502C OUT ADC 输入
JW01 CO₂ TX/RX USART3(UART 通信,数据 0x2C 开头 6 字节协议)
ESP8266-01S RX/TX PA2 / PA3(3.3V 供电)
继电器/SSR 组 IN GPIO 控制 窗帘/补光/风扇/加热/水泵

三个高频坑(来自论文调试部分 + 工程常识):

  1. ESP8266 要独立稳压:01S 模块 WiFi 发射瞬间电流可达 300mA+,和主控共用 3.3V LDO 容易复位重启。建议单独一路 AMS1117-3.3 供电,串口可加电平匹配。
  2. 1-Wire 必须有上拉:DS18B20 的 DQ 线不加 4.7kΩ 上拉电阻,会偶发性读不到温度------这是"代码没问题但数据时好时坏"最常见的元凶。
  3. 模拟量共地:YL-69、光敏、pH 三路模拟信号的地必须和 STM32 共地,否则 ADC 读数漂移得离谱。

五、软件设计:主循环 + 六路阈值控制怎么落

开发环境:Keil MDK5,标准外设库。主程序思路非常清晰:

  1. 初始化:中断分组 → 延时 → USART1(115200 调试) → 定时器 → OLED → 蜂鸣器 → 各路传感器(DHT11/DS18B20/3 路 ADC/DS1302)→ WiFi/MQTT 缓冲;
  2. 上电自检:OLED 显示欢迎信息,蜂鸣器/继电器复位到初始态;
  3. 主循环 :反复调用显示控制函数 OLED_Display_Cotrol(),内部按"工作模式"分流:
    • 模式 0:按传感器实时值与阈值比对,驱动对应继电器/LED;
    • 模式 1:按 DS1302 时间点定时启停设备(水泵、风扇、补光);
  4. 显示切换:OLED 三屏------实时数据 / 阈值参数 / 日期时间+模式;
  5. 数据上云:按时间片定期打包数据进发送缓冲,走 MQTT 报文处理(连接确认、订阅确认、心跳、云端推送的阈值修改指令)。

5.1 DHT11 读取时序(最容易写错的地方)

论文里把 DHT11 时序写得非常具体,直接照着实现:

复制代码
主机拉低 DATA 20ms 复位 → 拉高 30µs
→ 切输入模式,等 DHT11 拉低 40~80µs(存在应答)
→ 再拉高 40~80µs(应答完成)
→ 连续读 40 位数据:每 bit 先低 50µs,高 26~28µs=0、高 70µs=1
→ 校验:(buf[0]+buf[1]+buf[2]+buf[3]) == buf[4] 才有效
→ 湿度=buf[0],温度=buf[2]

校验和不通过直接丢弃本次数据,这是 DHT11 数据偶尔跳变的保底手段。

5.2 土壤温度 DS18B20 流程

复位 → 检测存在应答 → 发跳过 ROM(0xCC) → 发启动转换(0x44) → 读低字节 LSB → 读高字节 MSB → 拼接成温度值。转换需要时间,连续读之间记得加延时。

5.3 三路 ADC 采集(土壤湿度/光强/pH)

统一套路:ADC 初始化(独立模式、单通道、12 位右对齐)→ 软件触发 → 等 EOC 标志 → 多次采样取平均(每次间隔 5ms)→ 换算:

  • 电压 = ADC值 × 参考电压 / 4096;
  • 光强 = 电压 × 100(论文里直接线性放大到百分比量纲,够大棚控制用);
  • pH 由电压按电极校准线换算(PH-4502C 需两点校准)。

5.4 阈值控制核心逻辑(伪代码)

复制代码
// 浇水量控制:以土壤湿度为标准
if (soilHum < hum_low) {
    soilHumLowFlag = 1;
}
if (soilHumLowFlag) {
    GPIO_SetBits(RELAY_WATER_PORT, RELAY_WATER_PIN); // 开水泵
}

// 补光:光强低于下限 → 开灯(PC13 拉低/拉高按电路)
if (light < light_low) {
    lightLowFlag = 1;
}
if (lightLowFlag) {
    // 点亮补光灯
}

// 降温:环境温度超上限 → 开风扇
// 加热:环境温度低于下限 → 开加热器
// 除湿:环境湿度超上限 → 开风扇
// 遮光:光强超上限 → 拉窗帘

每个异常都用一个独立标志位,控制函数只查标志位,逻辑解耦后调试非常方便------这是这篇论文代码结构里值得抄的地方。

六、上云:ESP8266 + MQTT 连阿里云

单片机侧用标准 AT 指令链把 ESP8266 拉起来:

复制代码
AT          → OK
AT+CWMODE=1 → STA 模式
AT+CWJAP="SSID","密码" → OK(连 WiFi)
AT+CIPMUX=0 → 单连接
AT+CIPSTART="TCP","服务器IP",端口 → CONNECT
AT+CIPMODE=1 → 透传模式

进入透传后,数据包按 MQTT 报文格式组织:连接报文 → 订阅报文 → 定时发布传感器数据 → 处理 CONNACK/SUBACK/PINGRESP/云端下发指令(比如远程改阈值),收尾用 isSubstring() 匹配指令内容。

七、上位机双端:QT 桌面端 + uni-app 手机 APP

  • QT 上位机:QTableWidget 实时数据面板 + QSlider/QSpinBox 设阈值 + QPushButton 发指令 + QTimer 定时拉数据刷新,MQTT 走 QMQTT 库;
  • 手机 APP:HBuilderX + uni-app 开发,封装 startConnect / endConnect / reConnect / publish 四个方法对接 MQTT,注册登录 → 主页实时数据 → 图表趋势(ECharts)→ 超阈值推送告警;
  • 数据层:uniCloud 连接阿里云数据库,设计用户表/设备表/消息表。

八、调试与测试结果

论文从四个层面做了验证:

  1. 硬件调试:逐模块供电/共地检查,用模块官方例程单独验证每颗传感器;
  2. 软件调试:Keil 编译 → ST-Link 烧录 → 断点 + Watch 窗口盯寄存器,逐步调通各采集函数;
  3. 云平台测试:设备注册、数据流规则、JSON 数据格式验证,MQTT 上下行链路正常;
  4. 双端测试:QT/APP 注册登录、数据实时刷新、阈值修改下发、告警推送均按预期工作。

结论:系统各项功能均按预期实现,响应速度与控制精度在可接受范围内。

九、毕设论文里常见的坑(做实物前务必看)

这篇论文本身暴露了该类毕业设计的通病,你抄作业/做实物时注意绕开:

  1. 引脚描述有模板残留 :论文多处把不同模拟传感器都写"接 PA1"、DS18B20 与某继电器都标 PB8------实际应以你手里原理图(.SchDoc)实际网络标号为准,别照文字接,会打架;
  2. CO₂ 传感器前后不一致 :电路章写 MQ-135(模拟输出),选型与软件章写 JW01(UART3),代码里是 CO2_Uart3_Init()------以代码和 UART3 协议为准
  3. WiFi 模块供电:ESP8266 与主控共 3.3V 是复位重启重灾区,独立供电最稳;
  4. OLED 与传感器共 I2C/单总线:若扩展多设备注意地址与总线时序冲突。

十、总结

这套系统本质是一个"六路采集 + 阈值控制 + 定时 + 上云"的通用农业物联网框架:STM32F103C8T6 做主控、DHT11/DS18B20/YL-69/光敏/JW01/PH-4502C 六类传感器、OLED 本地显示、ESP8266 走 MQTT 上阿里云、QT+uni-app 双端远程。换掉传感器和阈值,它可以直接变成温室大棚、菌菇房、养殖舍的监控系统------框架是通用的,改的只是"监测什么、超限干什么"。

如果你想做实物,建议先按最小闭环跑通:DHT11 + OLED + 一路继电器控制风扇,确认采集与阈值逻辑没问题,再逐步加土壤、CO₂、pH 和上云,每加一路单独验证一路,能少踩一半坑。

六、资料内容完整工程资料(原理图、PCB、代码、元件清单)

七、资料获取方式

相关推荐
star learning white2 小时前
STM32入门学习3
stm32·单片机·学习
jianqiang.xue3 小时前
审查技能库(上):内存安全四件套
stm32·单片机·物联网·架构·esp32
XiHongShi20163 小时前
cpuz分享,建议保存
单片机·学习
恒锐丰科技林技术员3 小时前
EG2226 全桥驱动芯片:高压电机逆变驱动的高性价比方案
经验分享·嵌入式硬件·硬件工程
糖糖单片机设计4 小时前
STM32 老人跌倒监测报警系统
stm32·单片机·嵌入式硬件
智闲电子设计5 小时前
STM32 硬件 CRC 与 UID 实战:固件校验防变砖,UID 防抄板,这两个外设白用太可惜
stm32·单片机·嵌入式硬件
嵌入式阿蔡5 小时前
CoAP / LwM2M 轻量协议:受限设备为什么不用 MQTT
单片机·物联网·嵌入式
wuyk5556 小时前
107.FreeRTOS 链表深度解析:从原理到面试满分答案
c语言·开发语言·数据结构·stm32·单片机·链表·面试
hongmai6668886 小时前
ESP32-WROVER-IE-N4R8:外接天线+8MB内存,专治信号焦虑
笔记·单片机·嵌入式硬件·microsoft·risc-v