基于STM32设计的仓库环境监测与预警系统 随着工业化和现代化的进程,尤其是在制造业、食品业、医药业等行业,仓库环境的监控和管理成为了至关重要的一环。尤其是在存储易腐品、药品、电子产品等货物时,温度、湿度、气体浓度等环境参数的异常变化可能导致物品的质量和安全性问题。为了保证仓库内物品的安全存储,及时发现环境参数异常并采取必要措施,仓库环境监测系统应运而生。
传统的环境监测方式往往依赖人工检查或简单的环境检测设备,但这些方式往往难以实现实时监控与自动预警。物联网技术的发展为仓库环境监控系统提供了更加智能、高效、实时的数据采集、传输和处理手段。本项目基于STM32微控制器设计一个环境监测与预警系统,具备温湿度监测、气体检测、墙壁水汽检测、蜂鸣器报警、通风控制等功能,支持数据上传至华为云物联网平台并通过网页实现数据可视化与控制。
本项目不仅满足了传统环境监测的需求,还通过物联网和大数据分析提升了仓库管理的效率和智能化水平,具有重要的实际应用价值。

本项目设计的仓库环境监测与预警系统的主要功能如下:
本项目所使用的硬件模块如下:
本系统由硬件和软件两部分组成,硬件部分主要包括温湿度传感器、二氧化碳传感器、可燃气体传感器、雨滴传感器、蜂鸣器、Wi-Fi模块等。系统使用STM32F103RCT6作为主控芯片,通过I2C、GPIO、PWM等接口与传感器和执行器连接。
系统通过ESP8266 Wi-Fi模块实现数据无线传输,数据通过MQTT协议上传至华为云物联网平台。云端平台负责数据存储和历史数据分析,同时提供API接口供本地服务器拉取数据。通过Web页面,用户可以查看实时环境数据并进行控制操作。
| 功能模块 | 描述 |
|---|---|
| 环境温湿度检测 | 通过SHT30传感器检测温湿度数据 |
| 二氧化碳浓度检测 | 通过SGP30传感器检测二氧化碳浓度 |
| 可燃气体检测 | 通过MQ9传感器检测一氧化碳、甲烷等气体浓度 |
| 墙壁水汽检测 | 通过雨滴传感器检测水汽情况 |
| 报警功能 | 超过设定阈值时蜂鸣器报警 |
| 风扇控制 | 通过继电器控制风扇启停 |
| 数据上传 | 通过Wi-Fi模块和MQTT协议上传数据至 |
云平台 | | Web端可视化 | 通过Web前端展示数据、报警信息及控制操作 |
本项目成功设计并实现了基于STM32的仓库环境监测与预警系统。通过结合多种传感器、Wi-Fi模块以及云平台,能够实时监测仓库内的温湿度、气体浓度、水汽等环境参数,并在出现异常时通过蜂鸣器报警提醒工作人员。同时,系统支持数据上传至云平台,提供实时数据展示和历史数据分析,帮助管理人员更好地了解仓库环境状况,做出决策。
该系统具备高效性、智能化、实时性强等特点,具有广泛的应用前景,可以为各类仓储、生产线等环境提供有效的监测和预警保障。
当前项目使用的相关软件工具、模块源码已经上传到网盘:https://ccnr8sukk85n.feishu.cn/wiki/QjY8weDYHibqRYkFP2qcA9aGnvb?from=from_copylink
以下是基于STM32的仓库环境监测与预警系统的 main.c 文件代码。主程序负责初始化各个模块,进行数据采集,并通过蜂鸣器进行报警,最后通过Wi-Fi上传数据到华为云物联网平台。
#include "stm32f1xx_hal.h"
#include "stdio.h"
#include "string.h"
// 引入各传感器模块的头文件
#include "sht30.h" // 温湿度传感器
#include "sgp30.h" // 二氧化碳传感器
#include "mq9.h" // 可燃气体传感器
#include "rain_sensor.h" // 水汽传感器
#include "esp8266.h" // WiFi模块
#include "lcd.h" // LCD显示
#include "relay.h" // 继电器控制风扇
#include "buzzer.h" // 蜂鸣器
// 定义环境监测阈值
#define TEMP_THRESHOLD_HIGH 30 // 高温阈值(单位:℃)
#define TEMP_THRESHOLD_LOW 10 // 低温阈值(单位:℃)
#define HUMIDITY_THRESHOLD_LOW 30 // 低湿度阈值(单位:%)
#define CO_THRESHOLD 10 // 一氧化碳浓度阈值(单位:ppm)
#define CO2_THRESHOLD 1000 // 二氧化碳浓度阈值(单位:ppm)
#define WATER_VAPOR_THRESHOLD 50 // 水汽浓度阈值(单位:%)
UART_HandleTypeDef huart1; // 串口1,用于调试
I2C_HandleTypeDef hi2c1; // I2C1,用于温湿度传感器、SGP30
SPI_HandleTypeDef hspi1; // SPI1,用于LCD显示
WiFi_Module wifi; // Wi-Fi模块
// 函数声明
void SystemClock_Config(void);
void MX_GPIO_Init(void);
void MX_USART1_UART_Init(void);
void MX_I2C1_Init(void);
void MX_SPI1_Init(void);
void read_environment_data(void);
void display_data_on_lcd(float temperature, float humidity, float co2, float co);
void send_data_to_cloud(float temperature, float humidity, float co2, float co);
void check_alerts(float temperature, float humidity, float co2, float co, int water_vapor);
void control_relay(int status);
void control_buzzer(int status);
int main(void)
{
// 系统初始化
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_I2C1_Init();
MX_SPI1_Init();
// 初始化传感器
SHT30_Init(&hi2c1); // 初始化温湿度传感器
SGP30_Init(&hi2c1); // 初始化二氧化碳传感器
MQ9_Init(); // 初始化可燃气体传感器
Rain_Sensor_Init(); // 初始化水汽传感器
ESP8266_Init(&huart1); // 初始化Wi-Fi模块
LCD_Init(&hspi1); // 初始化LCD显示
Buzzer_Init(); // 初始化蜂鸣器
Relay_Init(); // 初始化继电器(风扇控制)
// 系统主循环
while (1)
{
// 读取环境数据
float temperature, humidity, co2, co;
int water_vapor;
read_environment_data(&temperature, &humidity, &co2, &co, &water_vapor);
// 显示数据到LCD
display_data_on_lcd(temperature, humidity, co2, co);
// 上传数据到云平台
send_data_to_cloud(temperature, humidity, co2, co);
// 检查是否需要报警或执行控制
check_alerts(temperature, humidity, co2, co, water_vapor);
}
}
// 读取环境数据(温湿度,CO2浓度,CO浓度,水汽浓度)
void read_environment_data(float *temperature, float *humidity, float *co2, float *co, int *water_vapor)
{
// 获取温湿度数据
*temperature = SHT30_ReadTemperature();
*humidity = SHT30_ReadHumidity();
// 获取CO2浓度数据
*co2 = SGP30_ReadCO2();
// 获取CO浓度数据
*co = MQ9_ReadCO();
// 获取水汽浓度数据
*water_vapor = Rain_Sensor_Read();
}
// 将数据显示在LCD屏上
void display_data_on_lcd(float temperature, float humidity, float co2, float co)
{
char display_buffer[50];
// 显示温湿度数据
sprintf(display_buffer, "Temp: %.2fC Hum: %.2f%%", temperature, humidity);
LCD_DisplayStringLine(0, (uint8_t*)display_buffer);
// 显示CO2和CO数据
sprintf(display_buffer, "CO2: %.2fppm CO: %.2fppm", co2, co);
LCD_DisplayStringLine(1, (uint8_t*)display_buffer);
}
// 将数据上传到云平台
void send_data_to_cloud(float temperature, float humidity, float co2, float co)
{
// 将数据通过MQTT协议上传到华为云物联网平台
char payload[200];
sprintf(payload, "{"temperature": %.2f, "humidity": %.2f, "co2": %.2f, "co": %.2f}",
temperature, humidity, co2, co);
ESP8266_MQTT_Publish("warehouse/environment", payload); // 假设该主题用于上传环境数据
}
// 检查环境参数,判断是否需要报警或控制
void check_alerts(float temperature, float humidity, float co2, float co, int water_vapor)
{
// 检查温度
if (temperature > TEMP_THRESHOLD_HIGH || temperature < TEMP_THRESHOLD_LOW)
{
control_buzzer(1); // 超出温度范围,启动蜂鸣器报警
}
// 检查湿度
if (humidity < HUMIDITY_THRESHOLD_LOW)
{
control_buzzer(1); // 湿度过低,启动蜂鸣器报警
}
// 检查二氧化碳浓度
if (co2 > CO2_THRESHOLD)
{
control_buzzer(1); // 二氧化碳浓度过高,启动蜂鸣器报警
}
// 检查可燃气体浓度
if (co > CO_THRESHOLD)
{
control_buzzer(1); // 可燃气体浓度过高,启动蜂鸣器报警
}
// 检查水汽浓度
if (water_vapor > WATER_VAPOR_THRESHOLD)
{
control_buzzer(1); // 水汽浓度过高,启动蜂鸣器报警
}
// 控制风扇(继电器控制)
if (temperature > TEMP_THRESHOLD_HIGH)
{
control_relay(1); // 启动风扇
}
else if (temperature < TEMP_THRESHOLD_LOW)
{
control_relay(0); // 关闭风扇
}
}
// 控制继电器(风扇)
void control_relay(int status)
{
if (status)
{
Relay_On(); // 打开风扇
}
else
{
Relay_Off(); // 关闭风扇
}
}
// 控制蜂鸣器
void control_buzzer(int status)
{
if (status)
{
Buzzer_On(); // 启动蜂鸣器报警
}
else
{
Buzzer_Off(); // 关闭蜂鸣器
}
}
审核编辑 黄宇
全部0条评论
快来发表一下你的评论吧 !