基于STM32的仓库环境检测预警系统
若该文为原创文章,转载请注明原文出处。
一. 项目背景与概述
项目背景:
现代仓储是物流与供应链的核心环节,其内部环境直接关系到存储物品的质量、安全以及工作人员的健康。传统的仓库管理依赖于人工定期巡检,存在效率低下、实时性差、无法预警等问题。特别是对于存放食品、药品、精密仪器或易燃易爆物品的仓库,温度、湿度的超标,以及由火灾、不完全燃烧产生的CO、CH₄(甲烷)等有害气体的泄漏,都可能造成巨大的经济损失和安全事故。
项目概述:
本项目旨在开发一套实时、自动、远程的仓库环境检测预警系统。系统以高性能的STM32单片机为核心,集成多类环境传感器,实时监测仓库内的温度、湿度、CO2浓度、CO浓度、甲烷浓度。系统支持自动和手动两种工作模式,可通过本地按键或手机APP设置报警阈值,并在环境参数异常时启动蜂鸣器报警和继电器(控制风扇/排风系统)。所有数据通过ESP8266 Wi-Fi模块上传至云平台,实现远程监控与管理,有效提升仓库管理的智能化水平和安全性。
二. 系统硬件组成与功能
模块类别 | 具体器件 | 功能描述 |
---|---|---|
主控芯片 | STM32F103C8T6 (核心板) | 系统的“大脑”,负责数据采集、逻辑判断、控制外设及通信协调。 |
传感器模块 | DHT11 / AM2301 | 数字温湿度传感器,测量环境温度和湿度。 |
MG-811 / MH-Z19B | CO2气体传感器,测量二氧化碳浓度。 | |
MQ-7 | 电化学CO传感器,测量一氧化碳浓度。 | |
MQ-4 | 半导体甲烷传感器,测量甲烷浓度。 | |
通信模块 | ESP-01S (ESP8266) | Wi-Fi模块,通过AT指令与STM32通信,负责将数据上传至云平台。 |
执行模块 | 有源蜂鸣器 | 在参数超标时发出警报声。 |
5V继电器模块 | 驱动大功率风扇/排风装置,用于改善环境。 | |
交互模块 | 按键 x 3 | 用于切换模式、设置阈值、确认选择等。 |
电源模块 | LM2596 / AMS1117 | 12V/5V/3.3V电源转换,为整个系统提供稳定供电。 |
三. 系统框架图
四. 软件设计
4.1 开发环境
IDE: Keil uVision 5 或 STM32CubeIDE
编程语言: C语言 (嵌入式)
关键库: HAL库/标准库、ESP8266 AT指令库、传感器驱动库
云平台: 可选阿里云物联网平台、腾讯云IoT、OneNET等(本设计以通用MQTT为例)
APP: 使用平台配套的APP或自行使用App Inventor/Android Studio开发
4.2 主程序流程图
五. 关键代码片段
5.1 主循环逻辑
int main(void) {// 硬件初始化System_Init(); // 时钟、GPIO、UART、I2C、ADC...ESP8266_Init(); // 连接Wi-Fi和云平台while(1) {if (sys_mode == AUTO_MODE) { // 自动模式read_sensors(&temp, &humi, &co2, &co, &ch4); // 读取传感器upload_to_cloud(temp, humi, co2, co, ch4); // 上传数据// 判断是否超阈值并控制执行器if (temp > temp_threshold || humi > humi_threshold || ... ) {Buzzer_On();Fan_On();} else {Buzzer_Off();Fan_Off();}} else { // 手动模式// 执行从APP或按键接收到的指令execute_manual_commands();}handle_key_events(); // 处理按键事件(模式切换、阈值设置等)receive_cloud_data(); // 接收并解析云平台下发的指令HAL_Delay(2000); // 每2秒循环一次}
}
5.2 ESP8266 MQTT连接与发布代码
// 初始化并连接MQTT服务器
void ESP8266_MQTT_Init(void) {ESP8266_SendCmd("AT+CIPSTART=\"TCP\",\"your_mqtt_broker.com\",1883", "OK", 2000); // 连接服务器端口// ... 其他配置ESP8266_SendCmd("AT+MQTTUSERCFG=0,1,\"clientID\",\"username\",\"password\",0,0,\"\"", "OK", 1000); // 配置MQTT参数ESP8266_SendCmd("AT+MQTTCONN=0,\"your_mqtt_broker.com\",1883,1", "OK", 2000); // 发起连接
}// 发布传感器数据到主题 (Topic)
void MQTT_Publish_SensorData(float temp, float humi) {char mqtt_msg[100];sprintf(mqtt_msg, "{\"temp\":%.1f,\"humi\":%.1f}", temp, humi); // 组装JSON数据char publish_cmd[150];sprintf(publish_cmd, "AT+MQTTPUB=0,\"devices/123/sensors\",\"%s\",0,0", mqtt_msg); // 发布到指定TopicESP8266_SendCmd(publish_cmd, "OK", 1000);
}
5.3 阈值判断与执行器控制
void check_thresholds(void) {uint8_t alert_flag = 0;if (sensor_data.temperature > thresholds.temp_high) alert_flag = 1;if (sensor_data.co > thresholds.co_high) alert_flag = 1;// ... 检查其他传感器if (alert_flag) {HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_SET); // 蜂鸣器响HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_SET); // 继电器吸合,风扇转} else {HAL_GPIO_WritePin(BUZZER_GPIO_Port, BUZZER_Pin, GPIO_PIN_RESET);HAL_GPIO_WritePin(RELAY_GPIO_Port, RELAY_Pin, GPIO_PIN_RESET);}
}
六. 总结
该系统具有以下特点:
多功能性:集成了温湿度、CO2、CO、甲烷等多种环境参数监测,满足综合性的仓库环境监控需求。
智能化:具备自动和手动双模式,可根据预设阈值自动报警和联动通风设备,大大减少了人工干预。
远程化:通过Wi-Fi和云平台实现了数据的远程传输与监控,用户可通过手机APP随时随地掌握仓库环境状态并进行控制,极大地提升了管理效率和响应速度。
模块化设计:硬件和软件均采用模块化设计,结构清晰,易于维护和功能扩展(例如,未来可轻松添加烟雾、光照等传感器)。
潜在改进方向:
增加LCD显示屏,用于本地实时显示所有参数和状态。
添加SD卡模块,用于本地存储历史数据,防止网络中断时数据丢失。
优化电源管理,加入锂电池备份,应对突然断电的情况。
增强安全性,如为云平台通信增加TLS/SSL加密。
如有侵权,或需要完整代码,请及时联系博主。