基于STM32单片机的温湿度臭氧二氧化碳检测OneNET物联网云平台设计
·
基于STM32单片机的温湿度臭氧二氧化碳检测OneNET物联网云平台设计
1、项目简介
1.1 系统功能
- 功能介绍:
- 1、使用stm32采集温湿度,臭氧,二氧化碳数据
- 2、使用OLED液晶显示屏显示数据
- 3、通过Wi-Fi模块连接onenet物联网云平台
- 4、每种环境参数超过报警阈值,然后再云平台显示报警信息
- 5、可以通过网页登陆云平台查看数据以及报警信息
1.2 演示视频
2、部分电路设计
2.1 STM32单片机核心板电路设计
- 基于 ARM Cortex-M3内核的STM32F1系列单片机属于主流STM32单片机,其中增强型STM32F103子系列单片机的CPU 主频高达72MHz,片内Flash容量高达1MB,芯片引脚数量多达144个,有 QFN、LQFP、CSP、BGA 等多种芯片封装形式,并具有多种片内外设、USB接口和CAN 接口。根据STM32F103单片机片内Flash容量的不同,ST 公司将其分为小容量(16-32KB)、中等容量(64-128KB)、大容量(256KB-1MB)3种。
- 电源电路:为单片机提供稳定的工作电压,通常采用3.3V电源供电。电源电路的设计要保证单片机在不同工作条件下都能获得稳定的电压输出,以确保单片机的正常工作。
- 晶振电路:提供单片机工作所需的时钟信号。晶振电路通过晶振和电容组成,为单片机提供稳定的工作脉冲,确保单片机的定时和同步需求。
- 复位电路:实现单片机的复位功能,类似于电脑的重启。复位电路通过电容和电阻的配合,实现单片机在上电启动时的自动复位,以及通过手动按键实现复位功能,保证单片机在程序跑飞或异常情况下能够重新开始执行程序。
STM32单片机是一种功能强大、易于使用、灵活且可靠的32位微控制器,基于ARM Cortex™-M内核。其主要功能特点包括:
- 高性能和低功耗:STM32系列单片机提供多种内核选择,如Cortex-M0、Cortex-M3、Cortex-M4等,满足不同应用场景对性能的需求,同时保持低功耗特性。
- 多种通信和外设接口:STM32单片机具备广泛的通信和外设接口,如I2C、SPI、USART、USB等,便于开发者实现各种复杂功能。
- 易于开发和调试:STM32单片机提供了丰富的软件和硬件工具,如HAL库、CubeMX等,帮助开发者快速创建和调试嵌入式系统。
- 高集成度和设计灵活性:STM32系列单片机全系列产品共用大部分引脚、软件和外设,优异的兼容性为开发人员带来最大的设计灵活性
单片机最小系统原理图如下图所示:
实物图:
2.2 co2 二氧化碳采集电路设计
- 二氧化碳气体传感器是一个通用智能小型传感器,利用气敏传感器对空气中存在的CO2进行探测,具有很好的选择性和无氧气依赖性,寿命长。内置温度补偿;串口输出数值。
- 工作电压:DC5V
- 输出信号:串口输出(1秒发出1次)
- 气体量程:350-2000PPM
- 检测精度:50PPM
- 预热时间:20秒左右
- 运用场合:单片机二氧化碳检测,空气质量检测等电子设计
- 外形尺寸:23x23x1mm
其具体电路原理图如下图所示:
实物图如下:
2.3 ESP8266 WIFI无线通信电路设计
- ESP8266-01s是由安信可科技开发的Wi-Fi模块,其核心处理器是ESP8266,这款处理器在较小的尺寸封装中集成了业界领先的Tensilica L106 超低功耗 32 位微型 MCU,支持 80 MHz 和 160 MHz 的主频,并带有 16 位精简模式。ESP8266-01s 支持RTOS,集成Wi-Fi MAC/BB/RF/PA/LNA,支持标准的IEEE802.11 b/g/n协议和完整的TCP/IP协议栈。这使得用户可以为现有设备添加联网功能,或者构建独立的网络控制器。
- ESP8266-01s 以其高性能和低成本的特性,为Wi-Fi功能的嵌入提供了无限可能,特别适用于物联网和智能家居等应用场景
其具体电路原理图如下图所示:
实物图如下:
2.4 OLED显示电路设计
- OLED显示屏是一款无需背景光源,自发光式的显示模块。模块采用蓝色背景,显示尺寸控制在0.96英寸,采用OLED专用驱动芯片SSD1306控制。该模块支持通过I2C接口与控制器通信,支持高传输速率,能够实现60Hz的刷新频率。
其具体电路原理图如下图所示:
实物图:
2.5 MQ131 臭氧采集电路设计
- MQ131 臭氧传感器所使用的气敏材料是在清洁空气中电导率较高的半导体金属氧化物。当传感器所处环境中存在臭氧时,传感器的电导率随空气中臭氧气体浓度的增加而减小。使用简单的电路即可将电导率的变化转换为与该气体浓度相对应的输出信号。
- MQ131 臭氧传感器对臭氧的灵敏度高,对氯气、二氧化氮等强氧化性气体也有一定的灵敏度,对有机干扰气体向与臭氧相反的方向反应。
- 传感器特点:
- 本品在较宽的浓度范围内对臭氧有良好的灵敏度,具有长寿命、低成本、驱动电路简单等优点。
- 主要应用:
- 广泛适用于家庭用臭氧浓度超标报警器、工业用臭氧浓度超标报警器以及便
携式臭氧浓度检测器 。
- 广泛适用于家庭用臭氧浓度超标报警器、工业用臭氧浓度超标报警器以及便
电路原理图:
实物图:
3、单片机代码展示
3.1 系统初始化
void HardWare_Init(void)
{
Usart1_Init(9600);
Usart2_Init(115200); //串口2,驱动ESP8266用
ConnectionNtpOneNet(); //连接onenet云平台
MQ131Init(); //初始化臭氧模块
Adc_Init(); //初始化ADC
OLED_Init(); //初始化屏幕
OLED_ColorTurn(0);//0正常显示,1 反色显示
OLED_DisplayTurn(0);//0正常显示 1 屏幕翻转显示
memset(&MyEnvironment, 0, sizeof(Environment));
//设置阈值
MyEnvironment.temp_threshold = 30;
MyEnvironment.hum_threshold = 90;
MyEnvironment.co2_threshold = 500;
MyEnvironment.ozone_threshold = 90;
//报警标志去清零
MyEnvironment.temp_warn = 0;
MyEnvironment.hum_warn = 0;
MyEnvironment.co2_warn = 0;
MyEnvironment.ozone_warn = 0;
}
3.2 dht11温湿度采集程序
/**
* @brief 读取40bit数据
* @param none.
* @retval 1 读取成功,0读取失败.
*/
int DHT11_ReadData(void)
{
unsigned int cout = 1;
unsigned int T_H, T_L, H_H, H_L, Check;
//设置为IO口输出模式
DHT_Set_Output();
//1、MCU开始起始信号
DHT_ResetBit();
delay_ms(16); //拉低至少15ms
DHT_SetBit();
delay_us(20); //拉高20~40us
//设置为IO口输入模式
DHT_Set_Input();
//2、读取DH21响应
if(DHT_ReadBit() == Bit_RESET)
{
//等待80us的低电平
cout = 1;
while(!DHT_ReadBit() && cout++);
//等待80us的高电平
cout = 1;
while(DHT_ReadBit() && cout++);
//读取8bit的湿度整数数据
H_H = DH21_ReadByte();
//读取8bit的湿度小数数据
H_L = DH21_ReadByte();
//读取8bit的温度整数数据
T_H = DH21_ReadByte();
//读取8bit的温度小数数据
T_L = DH21_ReadByte();
//读取8bit的校验和
Check = DH21_ReadByte();
if(Check == (H_H + H_L + T_H + T_L))
{
DHT11.Hum_H = H_H;
DHT11.Hum_L = H_L;
DHT11.Tem_H = T_H;
DHT11.Tem_L = T_L;
return 1;
}
else
{
return 0;
}
}
return 0;
}
/**
* @brief 获取温度
* @param none.
* @retval Temp, 温度值
*/
int DHT11_GetTem(void)
{
return (DHT11.Tem_H << 8 | DHT11.Tem_L);
}
/**
* @brief 获取湿度
* @param none.
* @retval Hum,湿度值
*/
int DHT11_GetHum(void)
{
return (DHT11.Hum_H << 8 | DHT11.Hum_L);
}
3.3 mq131臭氧采集程序
float MQ131GetData(void)
{
uint16_t value = 0;
float data = 0;
value = Get_Adc_Average(MQ131_ADC_CH1,MQ131_READ_TIMES); //读取ADC值
// data=((value*3300.0)/4096);///0.66;//数字量转换为电压值显示,12为ADC,所以除以4096;0~3.3V 线性转换为0~5V,所以除以0.66
data = (float)value * (3.3 / 4096);
/*此处可增加气体含量与模拟电压的计算公式,进行气体含量计算*/
data = 173.2*data*data*data*data-2223.1*data*data*data+10611*data*data-22446*data+17964;
/*此处可增加气体含量与模拟电压的计算公式,进行气体含量计算*/
// O3_ppm=173.2*MQ_X*MQ_X*MQ_X*MQ_X-2223.1*MQ_X*MQ_X*MQ_X+10611*MQ_X*MQ_X-22446*MQ_X+17964;
//测量范围限值
if(data<=0){data=0;}
if(data>=1000){data=1000;}
return data;
}
3.4 连接onenet物联网云平台
static void ConnectionNtpOneNet(void) {
ESP8266_Init(); //初始化ESP8266
UsartPrintf(USART_DEBUG, "Connect MQTTs Server...\r\n");
while(ESP8266_SendCmd(ESP8266_ONENET_INFO, "CONNECT"))
delay_ms(500);
UsartPrintf(USART_DEBUG, "NET_OK\r\n");
while(OneNet_DevLink()) //接入OneNET
delay_ms(500);
OneNET_Subscribe();
}
更多推荐
所有评论(0)