基于STM32单片机的温湿度臭氧二氧化碳检测OneNET物联网云平台设计
·
1 系统功能介绍
本设计为 基于 STM32 单片机的温湿度、臭氧、二氧化碳检测与 OneNET 云平台联网系统,通过传感器实时采集环境数据,借助 OLED 液晶显示模块进行本地显示,并通过 Wi-Fi 模块将数据上传至 OneNET 物联网平台,实现远程数据可视化和报警信息管理。用户不仅能够通过本地设备了解当前环境状况,还能通过云平台随时随地查看实时数据和历史记录,从而实现智能环境监测。
系统主要功能如下:
-
环境数据采集
- 采集温度、湿度、臭氧浓度、二氧化碳浓度;
- 通过 STM32 的 ADC 或 UART 接口获取传感器数据。
-
本地显示
- 使用 OLED 液晶屏显示温湿度、臭氧、二氧化碳数据;
- 实时刷新显示,提供直观数据参考。
-
数据上传与云平台交互
- 通过 ESP8266 Wi-Fi 模块与 OneNET 云平台连接;
- 定时上传环境参数至云端,云端可进行历史记录和图表分析;
- 当数据超过阈值,云端显示报警信息。
-
远程监控与报警
- 用户可通过网页或移动端登录 OneNET 平台;
- 实时查看环境参数与报警提示;
- 平台支持数据存储、趋势分析、报警通知。
2 系统电路设计
2.1 STM32F103C8T6 最小系统
本设计采用 STM32F103C8T6 单片机,作为数据采集与处理的核心:
- 主频 72MHz,Cortex-M3 内核;
- 内部集成丰富的外设接口,支持 UART、I2C、SPI、ADC 等;
- 负责传感器数据读取、OLED 显示驱动、Wi-Fi 模块通信以及逻辑控制。
2.2 温湿度传感器电路
温湿度检测模块可选用 DHT11/DHT22 或 SHT30/40:
- 数据输出为单总线或 I2C 接口;
- 实时获取温度(℃)与湿度(%RH);
- 与 STM32 直接连接,编程较为简便。
2.3 臭氧传感器电路
臭氧浓度检测采用 MQ131 气体传感器模块:
- 输出模拟电压信号;
- 由 STM32 内置 ADC 采集并换算成实际浓度;
- 适合检测空气中 10ppb~2ppm 范围的臭氧浓度。
2.4 二氧化碳传感器电路
二氧化碳检测模块采用 MH-Z19B 红外 CO₂ 传感器:
- 支持 UART 输出(浓度数据直接读取);
- 测量范围:0~5000 ppm;
- 数据精准,通信可靠,便于集成。
2.5 OLED 液晶显示电路
显示模块选用 0.96 寸 OLED 显示屏(SSD1306 驱动):
- 分辨率 128×64;
- I2C 接口与 STM32 通信;
- 显示温度、湿度、臭氧、二氧化碳浓度等数据。
2.6 Wi-Fi 模块电路
无线通信部分采用 ESP8266 模块:
- 通过 UART 与 STM32 通信;
- 负责连接 OneNET 云平台,发送 JSON 格式数据;
- 支持 TCP/IP 协议,便于云端交互。
2.7 电源电路
- 系统供电电压 5V;
- 使用 AMS1117-3.3 稳压芯片为 ESP8266、OLED 等提供 3.3V 电源;
- 传感器与主控统一接地,保证稳定运行。
3 程序设计
3.1 主程序框架
#include "stm32f10x.h"
#include "oled.h"
#include "dht11.h"
#include "adc.h"
#include "usart.h"
#include "esp8266.h"
#include "delay.h"
#include "mhz19b.h"
float Temperature, Humidity;
float Ozone, CO2;
int main(void)
{
SystemInit();
OLED_Init();
DHT11_Init();
ADC_Init();
USART1_Init(115200); // 串口调试
ESP8266_Init(115200); // Wi-Fi 模块
MHZ19B_Init();
while(1)
{
DHT11_ReadData(&Temperature, &Humidity);
Ozone = Get_Ozone();
CO2 = MHZ19B_ReadCO2();
OLED_Show_Data(Temperature, Humidity, Ozone, CO2);
ESP8266_SendToOneNet(Temperature, Humidity, Ozone, CO2);
delay_ms(3000);
}
}
3.2 温湿度采集
void DHT11_ReadData(float *temp, float *humi)
{
u8 buf[5];
if(DHT11_Read(buf) == 0)
{
*humi = buf[0] + buf[1] * 0.1;
*temp = buf[2] + buf[3] * 0.1;
}
}
3.3 臭氧传感器采集
float Get_Ozone(void)
{
u16 adc_val = ADC_GetConversionValue(ADC1);
float voltage = adc_val * 3.3 / 4096.0;
float ozone_ppm = voltage * 10; // 简化比例换算
return ozone_ppm;
}
3.4 二氧化碳传感器采集
int MHZ19B_ReadCO2(void)
{
u8 cmd[9] = {0xFF,0x01,0x86,0,0,0,0,0,0};
u8 response[9];
USART2_Send(cmd,9);
USART2_Receive(response,9);
if(response[0] == 0xFF && response[1] == 0x86)
{
int co2 = (response[2] << 8) + response[3];
return co2;
}
return -1;
}
3.5 OLED 数据显示
void OLED_Show_Data(float temp, float humi, float ozone, float co2)
{
OLED_Clear();
OLED_ShowString(0,0,"Temp: ");
OLED_ShowNum(50,0,temp,3,1);
OLED_ShowString(90,0,"C");
OLED_ShowString(0,16,"Humi: ");
OLED_ShowNum(50,16,humi,3,1);
OLED_ShowString(90,16,"%");
OLED_ShowString(0,32,"Ozone:");
OLED_ShowNum(60,32,ozone,3,1);
OLED_ShowString(100,32,"ppm");
OLED_ShowString(0,48,"CO2: ");
OLED_ShowNum(50,48,co2,4,0);
OLED_ShowString(100,48,"ppm");
}
3.6 Wi-Fi 模块与 OneNET 通信
void ESP8266_SendToOneNet(float t, float h, float o, float c)
{
char json_buf[128];
sprintf(json_buf,
"{\"datastreams\":[{\"id\":\"temperature\",\"datapoints\":[{\"value\":%.2f}]},"
"{\"id\":\"humidity\",\"datapoints\":[{\"value\":%.2f}]},"
"{\"id\":\"ozone\",\"datapoints\":[{\"value\":%.2f}]},"
"{\"id\":\"co2\",\"datapoints\":[{\"value\":%.2f}]}]}",
t,h,o,c);
ESP8266_SendData(json_buf);
}
4 总结
本设计实现了一个 基于 STM32 单片机的多参数环境检测与云平台交互系统,涵盖了温度、湿度、臭氧、二氧化碳四类数据的实时采集与显示,并借助 ESP8266 模块实现与 OneNET 云平台的数据交互。系统不仅可以在 OLED 本地显示实时数据,还能通过 远程网页平台实现数据可视化与报警监控。
主要优势:
- 功能全面:同时监测温度、湿度、臭氧、二氧化碳等环境参数;
- 本地与远程结合:OLED 屏幕+OneNET 云平台,实时性与远程性兼顾;
- 报警机制:参数超标时在云平台显示报警提示,提高安全性;
- 可扩展性强:系统预留 UART/I2C 接口,可扩展更多传感器;
- 应用前景广泛:适用于实验室、车间、智能家居、空气质量监控等领域。
该系统不仅是嵌入式与物联网结合的典型案例,也是智能环境监测设备研发的重要参考方案。
更多推荐
所有评论(0)