Bootstrap

STM32单片机+DHT11温湿度传感器+OLED屏幕+蜂鸣器报警+温湿度数据发送到串口调试助手+源代码

目录

一、DHT11模块参数

二、DHT11模块接线说明

三、测试说明 

四、DTT11传感器模块代码 

五、串口调试助手把采集的温湿度数据发送出来  

六、源代码 

七、DHT11温湿度传感器原理图资料

八、串口调试助手软件


一、DHT11模块参数

1 可以检测周围环境的湿度和温度

2 传感器采用DHT11

3 湿度测量范围:20%-95%(0 度-50 度范围)湿度测量误差:+-5%

4 温度测量范围:0 度-50 度温度测量误差:+-2 度 4 工作电压3.3V-5V

5 输出形式:数字输出

6 设有固定螺栓孔,方便安装

7 小板PCB 尺寸:3.2cm * 1.4cm

8 电源指示灯(红色)

二、DHT11模块接线说明

1 VCC 外接3.3V-5V

2 GND 外接GND

3 DATA 小板开关数字量输出接口接单片机IO 口

4 蜂鸣器VCC 外接3.3V,GND外接GND,I/O接PA7

三、测试说明 

编译环境:keil5

测试单片机: STM32F103C8T6

DHT11 模块与单片机连接: VCC-VCC  GND-GND  DATA-PA11

温湿度超过设定的阈值就会触发蜂鸣器报警!!!

FMQ.c文件编写蜂鸣器驱动代码如下:

#include "FMQ.h"
#include "stm32f10x.h"   
void mfq_Init(void)	
{
	GPIO_InitTypeDef  GPIO_InitStructure; 
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
	
	GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_0;
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
	GPIO_Init(GPIOB, &GPIO_InitStructure);
	
}

void fmq(float temp,float humi)
{
		if(temp>15 || humi>95)//温度大于15度 或者 湿度大于95度 蜂鸣器报警
		{
			GPIO_ResetBits(GPIOB, GPIO_Pin_0);
    }
		else
		{
			GPIO_SetBits(GPIOB, GPIO_Pin_0);
		}
}

四、DTT11传感器模块代码 

 DHT11.c文件,对温湿度传感器驱动经行了封装

#include "dht11.h"
#include "Delay.h"

void DHT11_Rst(void)	   
{                 
	DHT11_IO_OUT(); 	
    DHT11_DQ_OUT=0; 	
    Delay_ms(20);    	
    DHT11_DQ_OUT=1; 	
	Delay_us(30);     	
}

u8 DHT11_Check(void) 	   
{   
	u8 retry=0;
	DHT11_IO_IN();//SET INPUT	 
    while (DHT11_DQ_IN&&retry<100)
	{
		retry++;
		Delay_us(1);
	};	 
	if(retry>=100)return 1;
	else retry=0;
    while (!DHT11_DQ_IN&&retry<100)
	{
		retry++;
		Delay_us(1);
	};
	if(retry>=100)return 1;	    
	return 0;
}

u8 DHT11_Read_Bit(void) 			 
{
 	u8 retry=0;
	while(DHT11_DQ_IN&&retry<100)
	{
		retry++;
		Delay_us(1);
	}
	retry=0;
	while(!DHT11_DQ_IN&&retry<100)
	{
		retry++;
		Delay_us(1);
	}
	Delay_us(40);//µÈ´ý40us
	if(DHT11_DQ_IN)return 1;
	else return 0;		   
}

u8 DHT11_Read_Byte(void)    
{        
    u8 i,dat;
    dat=0;
	for (i=0;i<8;i++) 
	{
   		dat<<=1; 
	    dat|=DHT11_Read_Bit();
    }						    
    return dat;
}

u8 DHT11_Read_Data(u8 *temp,u8 *humi)    
{        
 	u8 buf[5];
	u8 i;
	DHT11_Rst();
	if(DHT11_Check()==0)
	{
		for(i=0;i<5;i++)//¶ÁÈ¡40λÊý¾Ý
		{
			buf[i]=DHT11_Read_Byte();
		}
		if((buf[0]+buf[1]+buf[2]+buf[3])==buf[4])
		{
			*humi=buf[0];
			*temp=buf[2];
		}
	}else return 1;
	return 0;	    
}
	 
u8 DHT11_Init(void)
{	 
 	GPIO_InitTypeDef  GPIO_InitStructure;
 	
 	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);	 //ʹÄÜPG¶Ë¿ÚʱÖÓ
	
 	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;				 
 	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; 		
 	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
 	GPIO_Init(GPIOA, &GPIO_InitStructure);				 
 	GPIO_SetBits(GPIOA,GPIO_Pin_11);						 
			     
	DHT11_Rst();  
	return DHT11_Check();
} 








 

 DHT11.h文件,对温湿度传感器驱动函数经行了声明

#ifndef __DHT11_H
#define __DHT11_H 
#include "sys.h"   

#define DHT11_IO_IN()  {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=8<<12;}
#define DHT11_IO_OUT() {GPIOA->CRH&=0XFFFF0FFF;GPIOA->CRH|=3<<12;}
IO²Ù×÷º¯Êý											   
#define	DHT11_DQ_OUT PAout(11) //Êý¾Ý¶Ë¿Ú	PA0 
#define	DHT11_DQ_IN  PAin(11)  //Êý¾Ý¶Ë¿Ú	PA0 


u8 DHT11_Init(void);
u8 DHT11_Read_Data(u8 *temp,u8 *humi);
u8 DHT11_Read_Byte(void);
u8 DHT11_Read_Bit(void);
u8 DHT11_Check(void);
void DHT11_Rst(void);
#endif

五、串口调试助手把采集的温湿度数据发送出来  

printf("temp=%d humi=%d\r\n",temp,humi);

六、源代码 

《STM32单片机+DHT11温湿度传感器+OLED屏幕+蜂鸣器报警+温湿度数据发送到串口调试助手》源代码资源-CSDN文库

七、DHT11温湿度传感器原理图资料

DHT11温湿度传感器原理图、模块资料资源-CSDN文库

八、串口调试助手软件

串口调试助手-keil5调试工具资源-CSDN文库

;