基于STM32单片机的温湿度臭氧二氧化碳检测OneNET物联网云平台设计
基于STM32单片机的温湿度臭氧二氧化碳检测OneNET物联网云平台设计
1 功能介绍
随着社会工业化和城市化的发展,环境污染问题日益严重,空气质量成为人们日常生活和工作中极为关注的重要因素。温度、湿度、臭氧和二氧化碳浓度作为环境空气质量的重要指标,直接关系到人体健康与生活舒适度。因此,设计一套能够实时监测这些参数并实现远程数据可视化与报警的系统,具有重要的应用价值。
本系统基于STM32单片机作为核心控制器,配合多种传感器采集环境参数,并通过OLED显示屏进行现场数据显示。数据不仅能够在本地查看,还会通过Wi-Fi模块上传至OneNET物联网云平台,用户可以在网页端实时监控环境状况。当系统检测到任意一种环境参数超过设定的阈值时,会触发报警机制,并在云平台上显示相关报警信息,提醒用户及时采取措施。
系统主要功能概述如下:
- 环境参数采集:使用STM32单片机采集温度、湿度、臭氧浓度和二氧化碳浓度。
- 本地数据显示:通过OLED液晶显示屏直观显示实时检测到的数据。
- 云平台数据上传:借助ESP8266 Wi-Fi模块,将采集到的数据上传至OneNET物联网云平台,实现远程可视化。
- 超标报警:若某一环境参数超过设定阈值,系统会通过云平台发出报警信息。
- 远程访问与管理:用户可以通过网页端登录OneNET平台,查看实时数据与报警信息,便于远程环境监控与管理。
2 系统电路设计
系统电路由多个功能模块组成,每个模块相互配合,共同完成数据采集、处理、显示与传输。以下将对各模块电路逐一进行介绍。
2.1 STM32最小系统电路
STM32单片机作为系统的核心,负责协调数据采集、逻辑处理和通信。最小系统电路主要包括:
- 电源电路:采用稳压芯片AMS1117-3.3V或LM1117-3.3V,将5V电源转换为3.3V,供STM32及Wi-Fi模块使用。
- 复位电路:由按键、电容与电阻构成,保证系统上电时可靠复位。
- 时钟电路:采用8MHz外部晶振与匹配电容,确保系统运行稳定。
2.2 温湿度传感器电路
温湿度传感器常用DHT11、DHT22或SHT30等型号。本系统以DHT22为例:
- DHT22通过单总线协议与STM32通信,能够输出数字化温湿度值;
- 接口简单,仅需一个I/O口即可实现数据交互;
- 通过适当延时与时序控制即可稳定读取温湿度数据。
2.3 臭氧传感器电路
臭氧浓度的检测可采用MQ131传感器。该传感器输出为模拟电压信号,随空气中臭氧浓度变化而变化:
- 传感器需要加热电路维持工作稳定;
- 输出电压通过STM32的ADC通道采集,经过软件算法换算得到对应的臭氧浓度值;
- 为了提高稳定性,可在电路中增加电容进行滤波。
2.4 二氧化碳传感器电路
二氧化碳浓度检测可采用MH-Z19红外气体传感器:
- 支持UART串口通信,直接输出二氧化碳浓度数值;
- 其输出精度高,且不易受其他气体干扰;
- STM32通过USART接口读取数据,并进行解析与显示。
2.5 OLED显示电路
OLED液晶显示屏采用0.96英寸128×64像素模块,通信方式为I2C:
- 通过SCL和SDA两根信号线与STM32连接;
- 能够直观显示温度、湿度、臭氧和二氧化碳的实时数据;
- 显示界面可分为多行,分别显示不同参数,布局清晰。
2.6 Wi-Fi模块电路
Wi-Fi模块选用ESP8266:
- 通过USART接口与STM32通信;
- STM32将传感器数据打包后,通过AT指令控制ESP8266,连接Wi-Fi并上传数据至OneNET;
- 模块工作电压为3.3V,需要与主控共地。
2.7 电源电路
整个系统由+5V电源供电:
- 通过AMS1117-3.3V为STM32和ESP8266提供3.3V电压;
- 传感器和OLED根据实际需求使用3.3V或5V电源;
- 电路设计中加入滤波电容和保护电路,确保系统长期稳定运行。
3 程序设计
程序采用C语言在Keil环境下开发,并通过ST-LINK下载到STM32单片机。程序主要分为传感器采集模块、OLED显示模块、Wi-Fi通信模块和逻辑控制模块。以下将分别介绍。
3.1 主程序框架
主程序负责系统初始化、数据采集、显示和上传,整体流程如下:
#include "stm32f10x.h"
#include "oled.h"
#include "dht22.h"
#include "adc.h"
#include "mhz19.h"
#include "esp8266.h"float temperature, humidity;
float ozone_value;
int co2_value;int main(void) {OLED_Init();DHT22_Init();ADC_Init();MHZ19_Init();ESP8266_Init();while(1) {// 采集数据DHT22_Read(&temperature, &humidity);ozone_value = ADC_Read(ADC_Channel_1);co2_value = MHZ19_Read();// OLED显示OLED_ShowData(temperature, humidity, ozone_value, co2_value);// 上传到OneNETESP8266_SendData(temperature, humidity, ozone_value, co2_value);// 延时一段时间delay_ms(2000);}
}
3.2 温湿度采集程序
DHT22采用单总线通信,读取温湿度数据:
void DHT22_Read(float *temp, float *humi) {// 发送起始信号// 等待传感器响应// 按照时序读取40位数据// 解析温湿度并存储到temp和humi
}
3.3 臭氧传感器采集程序
通过ADC采集模拟信号:
float ADC_Read(uint8_t channel) {uint16_t value;ADC_RegularChannelConfig(ADC1, channel, 1, ADC_SampleTime_55Cycles5);ADC_SoftwareStartConvCmd(ADC1, ENABLE);while(!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC));value = ADC_GetConversionValue(ADC1);return (float)value * (3.3 / 4096); // 转换为电压
}
3.4 二氧化碳传感器采集程序
通过USART读取MH-Z19数据:
int MHZ19_Read(void) {uint8_t buf[9];int ppm = 0;// 串口发送读取命令// 接收数据并校验// 数据格式解析ppm = (buf[2] << 8) + buf[3];return ppm;
}
3.5 OLED显示程序
OLED采用I2C通信,显示界面如下:
void OLED_ShowData(float temp, float humi, float ozone, int co2) {char str[20];sprintf(str, "T:%.1fC H:%.1f%%", temp, humi);OLED_ShowString(0, 0, str);sprintf(str, "O3:%.2fV", ozone);OLED_ShowString(0, 2, str);sprintf(str, "CO2:%dppm", co2);OLED_ShowString(0, 4, str);
}
3.6 Wi-Fi与OneNET通信程序
ESP8266通过AT指令连接路由器并上传数据到OneNET:
void ESP8266_SendData(float t, float h, float o3, int co2) {char json[100];sprintf(json, "{\"temp\":%.1f,\"humi\":%.1f,\"o3\":%.2f,\"co2\":%d}", t, h, o3, co2);ESP8266_SendCmd("AT+CIPSTART=\"TCP\",\"183.230.40.33\",80");sprintf(cmd, "POST /devices/DEVICE_ID/datapoints HTTP/1.1\r\napi-key:API_KEY\r\nHost:api.heclouds.com\r\nContent-Length:%d\r\n\r\n%s", strlen(json), json);ESP8266_SendCmd(cmd);
}
3.7 报警逻辑程序
当采集值超过设定阈值时触发报警,并上传至云平台:
void Alarm_Check(float t, float h, float o3, int co2) {if(t > 40 || h > 80 || o3 > 2.0 || co2 > 1000) {ESP8266_SendCmd("报警:参数超标");}
}
4 总结
本系统通过STM32单片机、温湿度传感器、臭氧传感器、二氧化碳传感器、OLED显示模块和ESP8266 Wi-Fi模块,构建了一套完整的环境监测与远程报警系统。其主要特点在于:
- 本地与远程双重显示,既可通过OLED直观查看,又可通过OneNET云平台实时掌握环境数据。
- 系统具备阈值报警功能,能够在环境恶化时及时提醒用户。
- 硬件设计合理,模块化结构清晰,便于扩展和维护。
- 程序采用模块化设计,逻辑清晰,易于二次开发和功能升级。
该设计不仅具有较高的实用性和可靠性,还可应用于智慧家庭、实验室环境监控、工业场所空气质量管理等多个领域,体现了物联网技术在环境监测中的重要价值。