0 卖盘信息
BOM询价
您现在的位置: 首页 > 技术方案 >智能家居 > 基于ONENET物联网温湿度光强烟雾空气质量监测器(原理图+程序源码+教程)

基于ONENET物联网温湿度光强烟雾空气质量监测器(原理图+程序源码+教程)

来源: 电路城
2021-11-08
类别:智能家居
eye 11
文章创建人 拍明

原标题:基于ONENET物联网温湿度光强烟雾空气质量监测器(原理图+程序源码+教程)

一、项目背景与需求分析

随着物联网技术的快速发展,环境监测设备在智能家居、工业安全、农业大棚等领域的应用需求日益增长。本设计旨在构建一套基于ONENET云平台的物联网环境监测系统,实时采集温湿度、光照强度、烟雾浓度及空气质量参数,并通过无线通信模块将数据上传至云端,实现远程监控与数据分析。

image.png

核心需求

  1. 多参数采集:支持温湿度、光照、烟雾、PM2.5等环境参数的实时监测。

  2. 无线传输:通过ESP8266或ESP32模块实现数据上传至ONENET平台。

  3. 低功耗设计:采用低功耗传感器与MCU,延长设备续航时间。

  4. 云端可视化:利用ONENET平台的数据展示与报警功能,实现远程管理。

  5. 扩展性:支持传感器模块的灵活扩展,适应不同场景需求。

二、系统架构设计

系统采用模块化设计,主要分为以下部分:

  1. 主控模块:STM32F103C8T6或STM32F407VET6(根据性能需求选择)。

  2. 传感器模块:温湿度传感器(DHT11/DHT22/SHT3X)、光照传感器(BH1750/GY-30)、烟雾传感器(MQ-2/MQ-135)、空气质量传感器(GP2Y1010AU0F粉尘传感器/SDS011 PM2.5传感器)。

  3. 通信模块:ESP8266(Wi-Fi)或ESP32(Wi-Fi+蓝牙)。

  4. 显示模块:OLED屏幕(0.96寸I2C接口)或LCD1602(可选)。

  5. 电源模块:锂电池供电(3.7V)或USB 5V输入,配合稳压电路输出3.3V。

2.1 主控模块选型与优势

推荐型号:STM32F103C8T6(基础版)或STM32F407VET6(高性能版)。
选型理由

  • STM32F103C8T6:基于ARM Cortex-M3内核,主频72MHz,支持64KB Flash和20KB RAM,外设丰富(I2C、SPI、UART、ADC等),成本低,适合资源需求较低的场景。

  • STM32F407VET6:基于ARM Cortex-M4内核,主频168MHz,支持1MB Flash和192KB RAM,集成FPU(浮点运算单元),适合需要高速数据处理或多传感器协同的场景。

关键功能

  • 通过I2C接口读取温湿度、光照传感器数据。

  • 通过ADC采集烟雾、粉尘传感器的模拟信号。

  • 控制ESP8266/ESP32模块实现Wi-Fi通信。

  • 驱动OLED屏幕显示实时数据。

三、元器件选型与功能详解

3.1 温湿度传感器

推荐型号:DHT22(数字输出)或SHT3X(I2C接口)。
选型理由

  • DHT22:测量范围广(-40℃~80℃,0%RH~100%RH),精度高(温度±0.5℃,湿度±2%RH),数字输出免校准,适合低成本方案。

  • SHT3X:I2C接口,测量范围(-40℃~125℃,0%RH~100%RH),精度更高(温度±0.3℃,湿度±1.5%RH),支持多种分辨率设置,适合高精度需求。

电路设计

  • DHT22:DATA引脚接MCU的GPIO,通过单总线协议通信。

  • SHT3X:SCL接MCU的I2C时钟线,SDA接数据线,需上拉电阻(4.7kΩ)。

3.2 光照传感器

推荐型号:BH1750(数字输出)或GY-30(模块化设计)。
选型理由

  • BH1750:I2C接口,测量范围(1~65535 lux),分辨率可达0.5 lux,低功耗(0.12mA),内置A/D转换器,直接输出数字信号。

  • GY-30:基于BH1750的模块,集成稳压电路和上拉电阻,简化硬件设计。

电路设计

  • SCL接MCU的I2C时钟线,SDA接数据线,ADDR引脚接地(默认地址0x23)。

3.3 烟雾传感器

推荐型号:MQ-2(通用型)或MQ-135(空气质量检测)。
选型理由

  • MQ-2:对烟雾、甲烷、丙烷等可燃气体敏感,输出模拟电压信号,适合火灾预警场景。

  • MQ-135:对氨气、硫化物、苯系物等有害气体敏感,适合空气质量监测。

电路设计

  • VCC接5V,GND接地,DOUT接MCU的ADC通道(如PA0),通过分压电阻(如10kΩ)将输出电压调整至MCU的ADC输入范围(0~3.3V)。

3.4 空气质量传感器

推荐型号:GP2Y1010AU0F(粉尘传感器)或SDS011(PM2.5激光传感器)。
选型理由

  • GP2Y1010AU0F:基于红外散射原理,测量范围(0~700μg/m³),成本低,适合粉尘浓度监测。

  • SDS011:激光散射原理,测量范围(0~999μg/m³),精度高(±10%),支持串口通信,适合专业级空气质量监测。

电路设计

  • GP2Y1010AU0F:VCC接5V,GND接地,VO接MCU的ADC通道,需配合5V转3.3V电路(如电阻分压或运放电路)。

  • SDS011:TX接MCU的UART_RX,RX接UART_TX,VCC接5V,GND接地。

3.5 通信模块

推荐型号:ESP8266-01S(基础版)或ESP32-DEVKITC(高性能版)。
选型理由

  • ESP8266-01S:集成TCP/IP协议栈,支持STA/AP模式,成本低,适合简单Wi-Fi通信需求。

  • ESP32-DEVKITC:双核32位MCU,支持Wi-Fi+蓝牙,内存更大(520KB SRAM),适合复杂应用。

电路设计

  • ESP8266:TX接MCU的UART_RX,RX接UART_TX,VCC接3.3V,GND接地,CH_PD接高电平(使能)。

  • ESP32:直接通过USB供电,UART接口与MCU通信。

3.6 显示模块

推荐型号:0.96寸OLED(I2C接口)或LCD1602(并行接口)。
选型理由

  • OLED:自发光、高对比度、低功耗(约20mA),适合显示多参数数据。

  • LCD1602:成本低,但需较多GPIO引脚(8位数据总线+3位控制线),适合简单显示需求。

电路设计

  • OLED:SCL接I2C时钟线,SDA接数据线,RES接高电平(复位),DC接高电平(数据/命令选择)。

  • LCD1602:VSS接地,VDD接5V,VO接电位器(对比度调节),RS接GPIO(数据/命令选择),RW接地(只写模式),E接GPIO(使能信号),D0~D7接MCU的GPIO。

3.7 电源模块

推荐方案

  • 锂电池供电:3.7V锂电池+AMS1117-3.3稳压芯片(输出3.3V)。

  • USB供电:5V输入+AMS1117-3.3稳压芯片。

电路设计

  • 锂电池正极接AMS1117的Vin,负极接地,Vout输出3.3V,需并联电容(10μF+0.1μF)滤波。

四、原理图设计

4.1 主控电路

STM32F103C8T6最小系统包括:

  • 8MHz晶振(HSE) + 32.768kHz晶振(LSE)。

  • 复位电路(按键复位)。

  • BOOT0接GND(正常启动模式)。

4.2 传感器接口电路

  • DHT22:DATA引脚接MCU的GPIO,通过上拉电阻(4.7kΩ)确保信号稳定。

  • BH1750:SCL接PB6,SDA接PB7,ADDR接地(地址0x23)。

  • MQ-2:VO接PA0(ADC通道0),通过分压电阻(10kΩ+22kΩ)将输出电压调整至0~3.3V。

  • ESP8266:TX接PA9(UART1_TX),RX接PA10(UART1_RX),CH_PD接3.3V。

4.3 OLED显示电路

SCL接PB6,SDA接PB7,RES接3.3V,DC接PB8。

五、程序源码与实现

5.1 开发环境配置

  • IDE:Keil MDK-ARM或STM32CubeIDE。

  • 库文件:STM32标准外设库或HAL库。

  • ONENET平台配置

    1. 注册ONENET账号,创建设备(产品类型选择“普通产品”)。

    2. 获取设备ID、APIKey、MasterKey。

    3. 配置数据流(如“Temperature”、“Humidity”、“Light”、“Smoke”、“PM25”)。

5.2 核心代码实现

5.2.1 传感器数据采集

// DHT22温湿度读取(基于单总线协议)
#include "dht22.h"
float temperature, humidity;

void DHT22_Read(void) {
   uint8_t buf[5] = {0};
   DHT22_Start(); // 发送起始信号
   if (DHT22_Check_Response()) { // 检查响应
       for (int i = 0; i < 5; i++) {
           buf[i] = DHT22_Read_Byte(); // 读取5字节数据
       }
   }
   // 校验数据
   if (buf[0] + buf[1] + buf[2] + buf[3] == buf[4]) {
       temperature = (buf[2] << 8) | buf[3]; // 温度(整数部分在小端序的buf[3])
       humidity = (buf[0] << 8) | buf[1];    // 湿度
       temperature /= 10; // 转换为实际温度(DHT22输出为整数倍0.1℃)
   }
}

// BH1750光照读取(I2C接口)
#include "bh1750.h"
#define BH1750_ADDR 0x23

float Light_Intensity = 0;

void BH1750_Read(void) {
   uint8_t data[2] = {0};
   I2C_Start();
   I2C_Send_Byte(BH1750_ADDR << 1 | 0x00); // 发送器件地址+写命令
   I2C_Send_Byte(0x10); // 发送连续高分辨率模式命令
   I2C_Stop();
   Delay_ms(180); // 等待测量完成
   I2C_Start();
   I2C_Send_Byte(BH1750_ADDR << 1 | 0x01); // 发送器件地址+读命令
   data[0] = I2C_Read_Byte(1); // 读取高字节(ACK)
   data[1] = I2C_Read_Byte(0); // 读取低字节(NACK)
   I2C_Stop();
   Light_Intensity = (data[0] << 8 | data[1]) / 1.2; // 转换为实际光照强度(lux)
}

// MQ-2烟雾读取(ADC通道0)
#include "adc.h"
#define ADC_CHANNEL 0

float Smoke_Concentration = 0;

void MQ2_Read(void) {
   uint16_t adc_val = ADC_Get_Value(ADC_CHANNEL);
   float voltage = adc_val * 3.3 / 4095.0; // 转换为电压值
   Smoke_Concentration = voltage * 1000 / 5.0; // 假设灵敏度为5V/1000ppm(需根据实际标定调整)
}

5.2.2 ESP8266通信与ONENET上传

// ESP8266初始化(AT指令模式)
#include "esp8266.h"
#define SSID "your_WiFi_SSID"
#define PASSWORD "your_WiFi_password"
#define DEVICE_ID "your_device_id"
#define API_KEY "your_api_key"

void ESP8266_Init(void) {
   UART_Send_String("AT "); // 测试模块
   Delay_ms(1000);
   UART_Send_String("AT+CWMODE=1 "); // 设置为STA模式
   Delay_ms(1000);
   UART_Send_String("AT+CWJAP=""SSID"",""PASSWORD"" "); // 连接Wi-Fi
   Delay_ms(5000);
}

// 数据上传至ONENET(HTTP协议)
void ONENET_Upload(float temp, float humi, float light, float smoke) {
   char cmd[256] = {0};
   sprintf(cmd, "AT+HTTPINIT ");
   UART_Send_String(cmd);
   Delay_ms(1000);
   sprintf(cmd, "AT+HTTPPARA="URL","http://api.onenet.com/devices/%s/datapoints?api_key=%s" ", DEVICE_ID, API_KEY);
   UART_Send_String(cmd);
   Delay_ms(1000);
   sprintf(cmd, "AT+HTTPPARA="CONTENT-TYPE","application/json" ");
   UART_Send_String(cmd);
   Delay_ms(1000);
   char data[128] = {0};
   sprintf(data, "{"Temperature":%.2f,"Humidity":%.2f,"Light":%.2f,"Smoke":%.2f}", temp, humi, light, smoke);
   sprintf(cmd, "AT+HTTPDATA=%d,10000 ", strlen(data));
   UART_Send_String(cmd);
   Delay_ms(1000);
   UART_Send_String(data); // 发送数据体
   Delay_ms(1000);
   UART_Send_String("AT+HTTPACTION=1 "); // POST请求
   Delay_ms(5000);
   UART_Send_String("AT+HTTPTERM "); // 关闭HTTP连接
   Delay_ms(1000);
}

5.2.3 主循环逻辑

int main(void) {
   System_Init(); // 系统初始化(时钟、GPIO、ADC、I2C、UART等)
   DHT22_Init();
   BH1750_Init();
   ESP8266_Init();
   OLED_Init();
   
   while (1) {
       DHT22_Read(); // 读取温湿度
       BH1750_Read(); // 读取光照
       MQ2_Read(); // 读取烟雾
       
       // 显示数据到OLED
       OLED_Show_String(0, 0, "Temp: %.1f C", temperature);
       OLED_Show_String(0, 1, "Humi: %.1f %%", humidity);
       OLED_Show_String(0, 2, "Light: %.0f lux", Light_Intensity);
       OLED_Show_String(0, 3, "Smoke: %.1f ppm", Smoke_Concentration);
       
       // 上传数据至ONENET(每5秒一次)
       static uint32_t last_upload_time = 0;
       if (Get_System_Time() - last_upload_time > 5000) {
           ONENET_Upload(temperature, humidity, Light_Intensity, Smoke_Concentration);
           last_upload_time = Get_System_Time();
       }
       
       Delay_ms(100); // 主循环延时
   }
}

六、元器件采购与替代方案

6.1 采购平台推荐

拍明芯城https://www.iczoom.com/)提供以下服务:

  • 型号查询:输入元器件型号(如“STM32F103C8T6”),快速获取品牌、价格、库存信息。

  • 国产替代:推荐国产兼容型号(如“GD32F103C8T6”替代STM32F103C8T6)。

  • 供应商查询:列出授权代理商(如“Arrow”、“Digi-Key”)及价格对比。

  • 数据手册下载:提供英文/中文PDF资料(如“STM32F103C8T6数据手册”)。

6.2 关键元器件替代方案

元器件推荐型号替代型号替代理由
主控MCUSTM32F103C8T6GD32F103C8T6国产兼容,性能相同,价格更低
温湿度传感器DHT22SHT31I2C接口,精度更高(±0.3℃),支持多种分辨率
光照传感器BH1750GY-302(基于BH1750)模块化设计,集成稳压电路,简化硬件设计
烟雾传感器MQ-2MQ-7(CO专用)若需专门检测CO,可选择MQ-7;若需通用型,MQ-2更合适
通信模块ESP8266-01SESP32-WROOM-32ESP32支持蓝牙,内存更大,适合复杂应用
显示模块0.96寸OLED(I2C)LCD1602(并行)若GPIO资源紧张,可选择OLED;若成本敏感,LCD1602更便宜

七、调试与优化

7.1 硬件调试

  1. 电源检查:用万用表测量各模块电压(如3.3V、5V),确保无短路或过压。

  2. 传感器校准

    • DHT22:与精准温湿度计对比,记录偏差并修正代码。

    • MQ-2:在纯净空气中读取基准值,在已知浓度气体中测试灵敏度。

  3. 通信测试

    • ESP8266:通过串口助手发送“AT”命令,检查是否返回“OK”。

    • ONENET上传:用Postman模拟HTTP请求,验证API接口是否正常。

7.2 软件优化

  1. 低功耗设计

    • 在主循环中增加休眠模式(如STM32的STOP模式),通过定时器唤醒。

    • 关闭未使用的外设时钟(如SPI、I2C若未使用)。

  2. 数据滤波

    • 对ADC采集的烟雾、粉尘数据采用移动平均滤波(如取最近5次采样的平均值)。

    • 对温湿度数据采用中值滤波(如取最近3次采样的中间值)。

  3. 报警阈值动态调整

    • 根据历史数据自动调整烟雾、温度报警阈值(如夏季温度阈值提高5℃)。

八、总结与展望

本设计实现了一套基于ONENET的物联网环境监测系统,通过STM32主控采集温湿度、光照、烟雾等参数,并通过ESP8266上传至云端,支持远程监控与报警。系统具有以下优势:

  1. 模块化设计:传感器与通信模块独立,便于扩展与维护。

  2. 低成本:选用性价比高的元器件(如STM32F103C8T6、DHT22),适合批量部署。

  3. 高可靠性:通过硬件滤波与软件冗余设计,确保数据准确性。

未来改进方向

  1. 支持更多传感器:集成PM2.5、CO2、TVOC等传感器,实现更全面的环境监测。

  2. 边缘计算:在MCU端实现简单数据分析(如异常检测),减少云端负载。

  3. 多平台兼容:支持阿里云、腾讯云等主流物联网平台,提升灵活性。

通过本设计,读者可快速掌握物联网环境监测系统的开发流程,为智能家居、工业安全等领域的应用提供参考。

责任编辑:David

【免责声明】

1、本文内容、数据、图表等来源于网络引用或其他公开资料,版权归属原作者、原发表出处。若版权所有方对本文的引用持有异议,请联系拍明芯城(marketing@iczoom.com),本方将及时处理。

2、本文的引用仅供读者交流学习使用,不涉及商业目的。

3、本文内容仅代表作者观点,拍明芯城不对内容的准确性、可靠性或完整性提供明示或暗示的保证。读者阅读本文后做出的决定或行为,是基于自主意愿和独立判断做出的,请读者明确相关结果。

4、如需转载本方拥有版权的文章,请联系拍明芯城(marketing@iczoom.com)注明“转载原因”。未经允许私自转载拍明芯城将保留追究其法律责任的权利。

拍明芯城拥有对此声明的最终解释权。

上一篇: 已是第一篇

相关资讯

拍明芯城微信图标

各大手机应用商城搜索“拍明芯城”

下载客户端,随时随地买卖元器件!

拍明芯城公众号
拍明芯城抖音
拍明芯城b站
拍明芯城头条
拍明芯城微博
拍明芯城视频号
拍明
广告
恒捷广告
广告
深亚广告
广告
原厂直供
广告