基于STM32的仓库环境控制系统设计与实现温湿度粉尘监测自动通风除湿ESP8266上云一、系统功能总览二、核心模块选型2.1 主控芯片STM32F103C8T62.2 温湿度传感器DHT112.3 粉尘传感器GP2Y1010AU0F2.4 显示模块OLED128642.5 无线通信模块ESP8266-01S三、系统接线总表四、系统软件设计4.1 主程序流程4.2 温湿度采集子程序4.3 粉尘浓度采集子程序4.4 云平台通信子程序4.5 显示子程序五、系统实现与测试5.1 硬件调试5.2 软件调试5.3 数据采集与自动控制功能测试5.4 无线通信功能测试六、总结基于STM32的仓库环境控制系统设计与实现温湿度粉尘监测自动通风除湿ESP8266上云仓库里堆放的原材料、粮食、药品或电子元器件对温湿度和粉尘浓度都相当敏感温度过高会加速物料老化湿度过大容易导致受潮霉变粉尘浓度超标则存在安全隐患还会污染精密器件。传统仓库靠人工定时巡检、手持仪器点测既费人力又做不到全天候连续监测环境异常往往要等巡检时才发现错过了最佳处置时机。本文设计了一套基于 STM32 的仓库环境控制系统由 DHT11 采集温湿度、GP2Y1010AU0F 采集粉尘浓度OLED 本地实时显示温度超范围自动开风扇通风、湿度超标自动启动除湿、粉尘超标蜂鸣报警并通过 ESP8266 接入阿里云物联网平台管理人员在云平台上即可远程查看仓库环境数据并远程操控风扇与除湿设备实现仓库环境的自动调节与远程管理。一、系统功能总览系统以 STM32F103C8T6 为主控围绕实时采集—本地显示—自动联动—远程管控四条主线展开具体功能如下功能模块具体功能说明温湿度采集DHT11 实时采集仓库温度与湿度2s 周期刷新粉尘浓度采集GP2Y1010AU0F 检测仓库内粉尘浓度µg/m³ 量级换算OLED 本地显示128×64 OLED 分行显示温度、湿度、粉尘浓度与设备状态自动通风联动温度超出设定范围时自动开启风扇通风降温自动除湿联动湿度超过设定阈值时自动启动除湿设备粉尘超标报警粉尘浓度超过阈值时蜂鸣器报警提醒现场人员云平台远程监控ESP8266 通过 MQTT 协议接入阿里云上传环境数据云平台远程操控云平台下发指令远程开关风扇与除湿设备二、核心模块选型2.1 主控芯片STM32F103C8T6对比项方案一STM32F103C8T6选择方案方案二PIC32MX795F512L内核架构ARM Cortex-M332 位MIPS32 M4K32 位主频72MHz80MHz片上资源2×ADC、3×USART、2×I2C、2×SPI、4×定时器丰富含 CAN/USB生态与资料国内资料极多开发板、例程、社区支持完善国内资料相对较少价格低性价比高偏高开发难度入门友好标准库/寄存器均可工具链较封闭两颗芯片主频、资源都够用但 STM32F103C8T6 在国内的开发资料和生态远比 PIC32 完善外设ADC、USART、I2C与本系统的传感器、OLED、ESP8266 全部对口价格也更低。选择方案一STM32F103C8T6。2.2 温湿度传感器DHT11对比项方案一DHT11选择方案方案二SHT30测温范围/精度0~50℃±2℃-40~125℃±0.2℃测湿范围/精度20%~90%RH±5%RH0~100%RH±2%RH接口方式单总线一根数据线I2C响应时间约 2s约 8s湿度价格约 3~5 元约 20 元以上仓库环境监测关注的是趋势与超限报警DHT11 的精度足以判断温度是否超范围、湿度是否超标仓库面积大、可能布置多个测点时DHT11 的价格优势会被成倍放大。SHT30 精度更高但对本系统属于性能过剩。选择方案一DHT11。2.3 粉尘传感器GP2Y1010AU0F对比项方案一GP2Y1010AU0F选择方案方案二SDS011检测原理红外光散射激光散射检测对象粉尘/烟雾颗粒PM2.5/PM10输出信号模拟电压直接 ADC 读取UART 数字输出供电5V5V体积超薄小巧易于安装体积较大价格低中等偏高GP2Y1010AU0F 基于红外光散射原理颗粒物通过检测区时散射光强度与浓度成正比输出模拟电压直接送 STM32 的 ADC 采样即可接口简单、体积小巧适合嵌入仓库壁挂监测节点SDS011 虽然精度更高但体积大、价格高且 UART 输出会占用串口资源。选择方案一GP2Y1010AU0F。2.4 显示模块OLED12864对比项方案一OLED12864选择方案方案二LCD2004分辨率128×64 点阵20 字符×4 行显示内容可显示汉字、变量、图标界面灵活只能显示字符接口I2C仅 2 根线并口占用 IO 多视角/对比度自发光各角度清晰无需背光调节需调对比度电位器功耗低较高OLED12864 通过 I2C 接口只需 PB6/PB7 两根线即可驱动能同时显示温湿度、粉尘浓度数值和风扇/除湿工作状态图标界面直观LCD2004 并口占用 IO 多且只能显示字符。选择方案一OLED12864。2.5 无线通信模块ESP8266-01S对比项方案一ESP8266-01S选择方案方案二Sierra HL7800通信方式Wi-Fi接入仓库局域网4G LTE 蜂窝联网依赖依赖现场 Wi-Fi 覆盖插 SIM 卡即可无 Wi-Fi 也能用协议支持TCP/IP、MQTTTCP/IP、MQTT功耗低较高价格约 10 元数百元仓库办公区一般都有 Wi-Fi 覆盖ESP8266-01S 通过 AT 指令即可完成联网与 MQTT 收发与阿里云物联网平台对接成熟功耗低、成本极低HL7800 适合无 Wi-Fi 的野外场景对仓库环境属于过配。选择方案一ESP8266-01S。三、系统接线总表系统各模块与 STM32F103C8T6 的接线分配如下OLED 使用 I2C1ESP8266 使用 USART2传感器分别占用 GPIO 与 ADC 通道互无冲突模块/器件模块引脚STM32 引脚说明DHT11 温湿度DATAPA0单总线DATA 与 VCC 间接 10kΩ 上拉电阻GP2Y1010AU0F 粉尘VOPA4ADC1 通道 4模拟电压输出GP2Y1010AU0F 粉尘ILEDPA5内部红外 LED 驱动脉冲脚按手册时序驱动OLED12864SCL / SDAPB6 / PB7I2C1地址 0x78ESP8266-01STXD / RXDPA3 / PA2USART2115200bpsESP8266-01SRSTPA8复位控制脚PE-3530 蜂鸣器I/OPB5NPN 三极管驱动风扇继电器INPB10温度超范围自动开启通风除湿设备继电器INPB11湿度超标自动启动电源——5V 供电经 AMS1117 稳压至 3.3V粉尘传感器 datasheet 要求在 VO 输出端加 0.1µF 去噪电容保证采样稳定继电器采用 5V 供电、光耦隔离型模块由 STM32 的 3.3V IO 直接驱动控制端。四、系统软件设计4.1 主程序流程系统上电后依次完成时钟初始化8MHz 外部晶振倍频至 72MHz、GPIO、USART2、I2C、ADC、定时器初始化然后对 ESP8266 复位并发送联网 AT 指令序列连接 Wi-Fi 热点并接入阿里云 MQTT 服务器。主循环以 2s 为周期先启动 DHT11 时序读取温湿度再驱动 GP2Y1010AU0F 采样粉尘模拟电压并换算浓度随后执行联动控制逻辑——温度超范围开风扇、湿度超标启动除湿、粉尘超标蜂鸣报警再把最新数据刷新到 OLED并通过 MQTT 上传云平台最后检查云平台是否下发远程控制指令若有则覆盖执行。主程序骨架如下int main(void) { SysClock_Config(); /* 72MHz 系统时钟 */ GPIO_Config(); USART2_Config(); /* ESP8266 串口 115200 */ I2C_Config(); /* OLED I2C1 */ ADC1_Config(); /* 粉尘模拟量采样 */ Timer_Config(); /* 2s 采集定时 */ OLED_Init(); ESP8266_Reset(); /* RST 拉低 500ms */ ESP8266_ConnectWiFi(); /* ATCWJAP 入网 */ ESP8266_MQTT_Connect(); /* 接入阿里云 MQTT */ while (1) { DHT11_Read(temp, humi); /* 读温湿度 */ dust GP2Y_Read_Ug(); /* ADC 采样 */ /* --- 自动联动控制 --- */ if (temp TEMP_HIGH || temp TEMP_LOW) FAN_ON(); /* 自动通风 */ else FAN_OFF(); if (humi HUMI_TH) DEHUM_ON(); /* 自动除湿 */ else DEHUM_OFF(); if (dust DUST_TH) BEEP_ON(); /* 粉尘报警 */ else BEEP_OFF(); OLED_Show_Status(temp, humi, dust); /* 本地显示 */ MQTT_Publish(temp, humi, dust); /* 数据上云 */ Cloud_Cmd_Handle(); /* 远程指令 */ Delay_ms(2000); /* 2s 周期 */ } }4.2 温湿度采集子程序DHT11 采用单总线时序主机将数据线拉低至少 18ms 发起起始信号后释放DHT11 回应 80µs 低电平 80µs 高电平随后连续发送 40 位数据湿度整数、湿度小数、温度整数、温度小数、校验和各 1 字节。每一位以 50µs 低电平开始其后高电平持续 26~28µs 表示0、70µs 表示1程序用定时器测量高电平宽度完成解码最后按前四字节之和的低 8 位等于校验字节校验数据校验失败则丢弃本轮数据、下轮重采。4.3 粉尘浓度采集子程序GP2Y1010AU0F 的内部红外 LED 需要脉冲驱动程序按传感器手册时序在采样前给 ILED 脚输出 0.28ms 左右的驱动脉冲在脉冲窗口内触发 ADC 采样 VO 引脚电压。为抑制瞬时干扰每次连续采样多次做均值滤波后再换算。粉尘浓度与 VO 电压成线性关系程序按标定系数将电压值换算为浓度值与阈值比较判断是否报警。4.4 云平台通信子程序ESP8266 通过 AT 指令实现联网与 MQTT 通信复位后依次执行ATCWMODE1设置 Station 模式、ATCWJAP连接 Wi-Fi 热点、随后按阿里云物联网平台的三元组ProductKey/DeviceName/DeviceSecret完成 MQTT CONNECT订阅属性设置 Topic。上传时将温湿度、粉尘浓度及风扇、除湿状态打包为 JSON 报文发布到属性上报 Topic云端下发的控制指令远程开/关风扇、除湿在订阅 Topic 中接收、解析后执行实现远程操控与本地自动控制的并存。4.5 显示子程序OLED 采用 SSD1306 驱动通过 I2C 向 0x78 地址写指令与显存数据。界面按行划分第一行显示标题仓库环境监控第二、三行显示温度与湿度数值第四行显示粉尘浓度底部一行以文字图标显示风扇与除湿设备当前的工作状态每轮采集结束后整体刷新。五、系统实现与测试5.1 硬件调试硬件调试中重点确认三处DHT11 数据线的 10kΩ 上拉电阻是否焊接可靠——上拉失效会导致时序读取始终失败GP2Y1010AU0F 的 0.1µF 去噪电容是否并接在 VO 输出端否则 ADC 读数抖动明显继电器模块控制端是否接对极性。电源方面5V 与 3.3V 分别用万用表实测确认 AMS1117 输出稳定在 3.3V。调试结果如下测试项测试方法结果3.3V 电源万用表测 AMS1117 输出3.30V正常DHT11 通信示波器看单总线时序波形起始/应答/数据波形符合手册粉尘传感器输出空载测 VO 静态电压约 0.6V 基线叠加去噪电容后稳定继电器动作手动拉高/拉低控制脚风扇、除湿继电器吸合/释放正常5.2 软件调试软件采用 Keil MDK 开发先分别调通 OLED 显示、DHT11 读取、ADC 采样三个底层驱动再叠加联动控制逻辑最后接入 ESP8266 联网程序。利用串口打印中间变量定位时序问题最终各模块运行稳定。测试项测试方法结果OLED 显示烧录后观察刷新数值刷新正常无乱码花屏DHT11 读取串口打印原始字节40 位数据校验和全部通过ADC 采样打印多次采样值均值滤波后读数波动小于 1%5.3 数据采集与自动控制功能测试将设备置于测试环境分别用热风枪改变环境温度、加湿器改变湿度、在传感器附近扬起粉尘模拟浓度升高验证自动联动逻辑测试场景触发条件预期动作实测结果高温通风温度高于上限阈值风扇开启风扇继电器吸合通风启动 ✔温度回落温度回到范围内风扇关闭风扇停止 ✔湿度超标湿度高于阈值除湿启动除湿继电器吸合 ✔湿度回落湿度回到范围内除湿停止除湿设备停止 ✔粉尘报警传感器附近扬尘蜂鸣器报警报警及时粉尘回落后解除 ✔OLED 显示全程观察数值与状态同步刷新温湿度、粉尘、设备状态实时正确 ✔5.4 无线通信功能测试设备上电后 ESP8266 自动联网并接入阿里云物联网平台测试项测试方法结果Wi-Fi 连接观察联网 AT 指令返回连接热点成功获取 IP ✔MQTT 接入云平台设备状态设备在线 ✔数据上报云平台查看属性温湿度、粉尘数据周期刷新 ✔远程控制云平台下发开/关风扇指令风扇按指令动作 ✔远程除湿云平台下发除湿指令除湿设备按指令动作 ✔六、总结本文完成了基于 STM32 的仓库环境控制系统的设计与实现。系统以 STM32F103C8T6 为主控DHT11 与 GP2Y1010AU0F 分别采集温湿度和粉尘浓度OLED12864 本地实时显示温度超范围自动开风扇通风、湿度超标自动启动除湿、粉尘超标蜂鸣报警并通过 ESP8266 以 MQTT 协议接入阿里云物联网平台实现环境数据的远程查看与风扇、除湿设备的远程操控。测试结果表明系统采集数据准确、自动联动可靠、无线通信稳定达到了仓库环境自动调节与远程监控的设计目标可用于中小型仓库、储物间的环境管理场景也可作为类似环境监控类项目的参考设计。七、资料内容完整工程资料原理图、PCB、代码、元件清单八、资料获取方式