项目图片:
哔哩哔哩视频链接:【基于STM32的环境监测系统(温湿度、空气质量、PM2.5、机智云)】
不是百度!不是百度!不是百度!(资料分享见文末)
一、项目介绍
1、功能介绍
1) 温湿度采集、PM2.5、空气质量数据采集;
2) 显示功能:OLED实时显示温湿度PM2.5浓度、空气质量;
3) 按键功能:按键调节温度、湿度、PM2.5、空气质量上限;
4) 自动控制:温度、湿度、PM2.5浓度、空气质量超限开继电器控制风扇通风,并且声光报警提示;
5) 远程监测与控制:通过WIFI模块将数据传输到机智云物联网平台APP显示数据,APP可以手动控制风扇通风;
6) APP可远程调节温度、湿度、PM2.5、空气质量上限值;
主要元器件:
3) OLED-IIC屏幕
4) 按键*3
5) 8550三极管
6) 继电器
7) ESP8266-01S WIFI模块
8) 粉尘传感器GP2Y1026AU0F
9) 有源蜂鸣器
10) MQ-135空气质量传感器
二、原理图设计
三、PCB图设计
PCB图
四、APP效果展示图
五、程序设计
/***********************************************代码名称:基于STM32的环境监测系统(温湿度、空气质量、PM2.5、机智云)编译环境:keil5MCU :STM32F103C8T6时钟频率 : 8MHzB站 :单片机技能设计/康微电子单片机设计/康哥单片机设计小红书 :单片机技能设计CDSN :单片机技能设计/康微电子单片机设计/康哥单片机设计***********************************************//**********************************************************************************************/#include "delay.h"#include "OLED_I2C.h"#include "led.h"#include "IIC.h"#include "usart3.h"#include "PM25.h"#include "usart.h"#include "dht11.h"#include "adc.h"#include "stdio.h"#include "key.h"#include "usart.h"#include "timer.h"#include "USART2.h"//#include "key.h"#include "gizwits_product.h"#include "common.h"//C库#include <string.h>#include <stdlib.h>#include <stdio.h>/* 用户区当前设备状态结构体*/dataPoint_t currentDataPoint;void userHandle(void);//协议初始化void Gizwits_Init(void){TIM3_Int_Init(9,7199); //1MS系统定时USART2_INIT(9600); //WIFI串口初始化userInit(); //设备状态结构体初始化gizwitsInit(); //缓冲区初始化}int main(void){char buf[16];unsigned short PM25 = 0; //PM2.5浓度float voltage = 0; //电压值unsigned char temperature = 0,humidity = 0; //温度 湿度u16 adcx = 0; //AD值u16 Air = 0; //空气质量unsigned char key_value = 0; //按键返回值unsigned int Cnt = 500;NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级delay_init(); //延时函数初始化LED_Init();USART1_Init(9600);IIC_Init(); //IIC接口初始配置OLED_Init(); //OLED初始化操作OLED_CLS(); //OLED清除屏幕DHT11_Init(); //DHT11初始化Adc_Init(); //ADC初始化KEY_Init(); //按键接口初始化USART3_Init(2400);printf("Hardware init OKrn");Gizwits_Init();LED_Init();OLED_DisplayInit();while(1){if(Cnt++>50) //计数一段时间 读取一次传感器数据 不需要连续读{Cnt = 0;//读取温湿度数据if(DHT11_Read_Data(&temperature,&humidity)==0) //读取温湿度值 读取成功?{//显示温度sprintf((char*)buf,":%02dC",temperature);OLED_ShowStr(16*2,0,(u8*)buf,2);//显示湿度sprintf((char*)buf,":%02d%%RH",humidity);OLED_ShowStr(16*2,2,(u8*)buf,2);}//AD转换 获取空气质量adcx = Get_Adc_Average(ADC_Channel_0,10); //AD转换读取voltage =(float)adcx*(3.3/4096); //ADC值转换为电压值voltage = voltage * 2; //由于硬件中 两个电阻分压了 故而*2Air = voltage * 100.0 /5.0; //传感器的电压范围0-5.0V//显示空气质量sprintf((char *)buf,(const char *)":%3d%%",Air);OLED_ShowStr(16*4,4,(unsigned char*)buf,2); //显示//读取PM2.5数据voltage = PM25_GetDATA(); //获取PM2.5传感器输出的电压voltage = voltage/1024.0 * 5;PM25 = voltage * 1000 * 2.0 /7.0; //公式来源于数据手册 单位ug/m3//显示P2.5sprintf(buf,"PM2.5:%4d ug/m3",PM25);OLED_ShowStr(0,6,(u8 *)buf,2); //显示currentDataPoint.valueTemp = temperature;currentDataPoint.valuehumi = humidity;currentDataPoint.valueAir = Air;currentDataPoint.valuePM25 = PM25;}if(currentDataPoint.valueMode==0) //自动模式下{//风扇控制 若温度 湿度 空气质量 PM2.5任意一个超标if(temperature>currentDataPoint.valueTempup||humidity>currentDataPoint.valueHumiup||Air>currentDataPoint.valueAirup||PM25>currentDataPoint.valuePM25up){//若温度 湿度 空气质量 PM2.5 超过上限 则开风扇Jd0_Set(GPIO_ON);}else{//反之则 关风扇Jd0_Set(GPIO_OFF);}OLED_ShowCN(16*6,0,9);OLED_ShowCN(16*7,0,10); //自动}else //手动模式{OLED_ShowCN(16*6,0,7);OLED_ShowCN(16*7,0,8); //手动}if(temperature>currentDataPoint.valueTempup||humidity>currentDataPoint.valueHumiup||Air>currentDataPoint.valueAirup||PM25>currentDataPoint.valuePM25up) //有数据超限了?{currentDataPoint.valueBeep = 1; //开启报警标志位}else{currentDataPoint.valueBeep = 0; //关闭报警标志位}//读取键值 检测是哪个按键按下了key_value = KEY_Scan(0); //按键单击if(key_value==1){key_value = 0;KEY_Set();userInit();Cnt = 300;}else if(key_value==2){printf("WIFI进入AirLink连接模式rn");gizwitsSetMode(WIFI_AIRLINK_MODE); //Air-link模式接入}//机智云物联网通信部分userHandle(); //用户采集gizwitsHandle((dataPoint_t *)¤tDataPoint);//协议处理}}
六、实验效果
资料分享(百度网盘)
链接: https://pan.baidu.com/s/1Sgi5zA6ql8w8OrkNJMX08Q?pwd=3w3a 提取码: 3w3a
453