扫码加入

  • 正文
  • 相关推荐
申请入驻 产业图谱

开源!基于STM32的环境监测系统(温湿度、空气质量、PM2.5、机智云)

03/06 09:53
453
加入交流群
扫码加入
获取工程师必备礼包
参与热点资讯讨论

项目图片:

哔哩哔哩视频链接:【基于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、空气质量上限值;

主要元器件:

1) STM32F103C8T6单片机

2) DHT11温湿度传感器

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;                             //由于硬件中 两个电阻分压了 故而*2            Air = 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.5            sprintf(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 *)&currentDataPoint);//协议处理	
	}	}

六、实验效果

资料分享(百度网盘)

链接: https://pan.baidu.com/s/1Sgi5zA6ql8w8OrkNJMX08Q?pwd=3w3a 提取码: 3w3a

相关推荐

登录即可解锁
  • 海量技术文章
  • 设计资源下载
  • 产业链客户资源
  • 写文章/发需求
立即登录