随着城市化进程的推进,工地建设和拆迁作业逐渐增多,工地环境的空气污染、噪声污染等问题越来越严重。为了改善工地周边居民的生活环境和施工人员的工作环境,工地环境实时监测与控制系统应运而生。该系统通过实时监测空气中的PM2.5、噪声、温湿度等环境参数,将数据上传至云端平台进行存储和分析,从而实现对环境的实时监控和智能控制。
此外,本项目通过控制加湿系统降低空气中的粉尘浓度,确保工地作业环境符合安全和健康标准。通过将监测数据上传至云端服务器,项目还能够提供全面的环境可视化展示,便于施工方和管理方进行数据分析与决策。
系统通过使用夏普PM2.5传感器检测空气中的PM2.5浓度,并实时反馈到本地LCD显示屏,同时上传到云平台进行进一步分析。
通过噪声检测传感器检测周围环境的噪声水平,转换为电压信号,经过处理后得到噪声值,实时显示在LCD屏幕上并上传至云端。
采用1.44寸LCD显示屏,实时显示PM2.5浓度、噪声级别、温湿度值等环境数据,方便现场人员实时查看。
系统通过WIFI连接到华为云物联网服务器,实时上传采集到的环境数据。然后通过搭建自有的后端服务器,使用Python的socket模块从华为云获取数据,并通过Flask框架构建Web应用,展示环境监测数据的可视化大屏。
设备端(STM32)通过ESP8266模块连接WiFi,并使用MQTT协议将监测数据传输到华为云物联网平台。MQTT协议轻量且高效,非常适合物联网环境下的数据传输。
当PM2.5浓度超过设定范围时,系统自动控制加湿器工作,通过继电器驱动喷洒水雾,降低空气中的粉尘浓度。
系统通过SHT30传感器实时监测环境的温度和湿度,数据通过STM32处理后显示在LCD上,并上传至云端平台。
功能模块 | 具体内容 |
---|---|
环境监测 | 检测PM2.5、噪声、温湿度等环境数据 |
本地显示 | LCD显示屏实时显示各项监测数据 |
数据上传 | 通过WiFi将数据上传至华为云物联网平台 |
数据展示 | 使用Flask框架搭建Web应用,展示实时环境数据 |
MQTT协议 | 设备端与云平台使用MQTT协议进行数据传输 |
加湿器控制 | 根据PM2.5浓度自动控制加湿器,降低空气中的粉尘浓度 |
后端服务器 | 使用Python和Flask框架搭建后端服务器,支持数据获取与展示 |
可视化大屏 | 提供前端大屏显示,实时显示环境数据 |
本项目设计了一个基于STM32的工地环境实时监测与控制系统,涵盖了空气质量、噪声、温湿度的检测与展示,数据上云并可视化展示,通过控制加湿器自动调节空气质量。系统结合硬件和软件的设计,实现了环境监测与控制的智能化与自动化,提升了工地环境的安全性和舒适度,具有较高的实用价值。
其他子模块(如PM2.5传感器、噪声传感器、SHT30温湿度传感器、LCD显示、WiFi模块ESP8266等)的驱动和功能已经写好,只需要在main.c
中整合这些模块,实现系统的整体功能。为了简化代码,重点展示如何初始化和使用这些模块。
#include "stm32f1xx_hal.h"
#include "lcd.h"
#include "pm25.h"
#include "noise_sensor.h"
#include "sht30.h"
#include "wifi.h"
#include "mqtt.h"
#include "relay.h"
// 定义外部传感器和硬件接口
extern PM25_TypeDef pm25_sensor; // PM2.5传感器实例
extern NoiseSensor_TypeDef noise_sensor; // 噪声传感器实例
extern SHT30_TypeDef sht30_sensor; // 温湿度传感器实例
extern Relay_TypeDef relay; // 继电器控制实例
extern WifiModule_TypeDef wifi_module; // ESP8266 WiFi模块
extern MQTT_Client_TypeDef mqtt_client; // MQTT客户端
// 定义全局变量
float pm25_value = 0.0; // 存储PM2.5浓度值
float noise_value = 0.0; // 存储噪声值
float temperature = 0.0; // 存储温度值
float humidity = 0.0; // 存储湿度值
// 功能声明
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);
// 主程序
int main(void)
{
// 初始化硬件
HAL_Init();
SystemClock_Config();
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_I2C1_Init();
MX_SPI1_Init();
// 初始化外设
LCD_Init(); // 初始化LCD显示屏
PM25_Init(&pm25_sensor); // 初始化PM2.5传感器
NoiseSensor_Init(&noise_sensor); // 初始化噪声传感器
SHT30_Init(&sht30_sensor); // 初始化SHT30温湿度传感器
Relay_Init(&relay); // 初始化继电器
Wifi_Init(&wifi_module); // 初始化WiFi模块
MQTT_Init(&mqtt_client); // 初始化MQTT客户端
// 连接WiFi网络
if (Wifi_Connect(&wifi_module)) {
printf("WiFi Connected.\n");
} else {
printf("WiFi Connection Failed!\n");
}
// 连接MQTT服务器
if (MQTT_Connect(&mqtt_client)) {
printf("MQTT Connected.\n");
} else {
printf("MQTT Connection Failed!\n");
}
// 主循环
while (1)
{
// 1. 获取环境数据
pm25_value = PM25_Read(&pm25_sensor); // 读取PM2.5浓度
noise_value = NoiseSensor_Read(&noise_sensor); // 读取噪声值
SHT30_Read(&sht30_sensor, &temperature, &humidity); // 读取温湿度
// 2. 显示数据到LCD
LCD_Clear();
LCD_DisplayString("PM2.5: %.2f µg/m³", pm25_value);
LCD_DisplayString("Noise: %.2f dB", noise_value);
LCD_DisplayString("Temp: %.2f C", temperature);
LCD_DisplayString("Humidity: %.2f %%", humidity);
// 3. 控制加湿器(如果PM2.5超标)
if (pm25_value > 100.0) { // 如果PM2.5浓度超过100 µg/m³,启动加湿器
Relay_SetState(&relay, RELAY_ON); // 打开加湿器
} else {
Relay_SetState(&relay, RELAY_OFF); // 关闭加湿器
}
// 4. 上传数据到云端
char payload[256];
snprintf(payload, sizeof(payload),
"{\"pm25\": %.2f, \"noise\": %.2f, \"temperature\": %.2f, \"humidity\": %.2f}",
pm25_value, noise_value, temperature, humidity);
// 发布数据到MQTT服务器
MQTT_Publish(&mqtt_client, "environment/data", payload);
}
}
main()
函数的开头,通过HAL_Init()
初始化HAL库,然后调用各个硬件初始化函数初始化GPIO、串口、I2C和SPI接口。PM25_Read()
、NoiseSensor_Read()
、SHT30_Read()
)从相应的传感器获取PM2.5浓度、噪声值、温湿度值。Relay_SetState()
函数控制继电器开关。MQTT_Publish()
将数据发布到指定的MQTT主题上。以上代码展示了如何将各个子模块(传感器、WiFi、MQTT、继电器等)整合在一个STM32项目中,完成实时环境监测、数据展示、数据上传和控制加湿器的功能。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。