STM32F103驱动DHT22温湿度传感器程序讲解(附加程序下载)

DHT22是一款通过数字信号输出来测量空气温湿度的传感器,可测量0~99.9%RH范围内的湿度,精度为±2%RH,分辨度为0.1 RH;可测量-40℃~80℃范围内的温度,精度为±0.5℃,分辨度为0.1℃。

该传感器是一个三针脚模块,包含VCC、DATA、GND(相对于DHT11,其中一个引脚被封装在内部)三个引脚,VCC接电压范围是3~5V,GND接地,DATA与单片机的引脚相接,并接上一个4.9k或以上阻值的上拉电阻。

DHT22采用单总线数据格式的通讯,一次传送40位的数据,按照传送的先后顺序依次是空气湿度的16位、空气温度的16位和8位的校验数据。

DHT22与单片机通讯流程为:单片机引脚拉低至少1ms→单片机引脚拉高→等待传感器拉低80us→等待传感器拉高80us→传感器开始发送数据。

STM32F103驱动DHT22温湿度传感器程序讲解(附加程序下载)_第1张图片

传感器发送数据格式:传感器拉低50us→0,传感器拉高26us;1,传感器拉高70us

STM32F103驱动DHT22温湿度传感器程序讲解(附加程序下载)_第2张图片

下面附上程序代码

dht22.c

//DHT22 起始信号
void DHT22_Rst(void)	   
{
  DHT22_DQ_OUT=0; 	//拉低
  delay_ms(10);    	
  DHT22_DQ_OUT=1; 	//拉高
	delay_us(30);     
}
//等待DHT22响应
//1:失败  0:成功
u8 DHT22_Check(void) 	   
{   
	u8 y=100;
  while ((!DHT22_DQ_IN) && y)//拉低过程
	{
		y--;
		delay_us(1);
	};	 
	if(y<1) return 1;
	else y=100;
    while (DHT22_DQ_IN && y)//拉高过程
	{
		y--;
		delay_us(1);
	};
	if(y<1) return 1;	    
	return 0;
}
//读取1位    1/0
u8 DHT22_Read_Bit(void) 			 
{
	u8 bit;
 	u8 y=100;
	while((!DHT22_DQ_IN) && y)//等待高
	{
		y--;
		delay_us(1);
	}
	y=100;	
	bit=0;
	delay_us(30);	
	if(DHT22_DQ_IN)
		bit=1;
		while(DHT22_DQ_IN && y)//等待低
	{
		y--;
		delay_us(1);
	}
	 return bit;		
}
//一个字节
u8 DHT22_Read_Byte(void)    
{        
    u8 i,byt;
    byt=0;
	for (i=0;i<8;i++) 
	{
   		byt<<=1; 
	    byt|=DHT22_Read_Bit();
    }						    
    return byt;
}
//一次数据
//temp:温度
//hum:湿度
//1成功   0失败
u8 DHT22_Read_Data(u8 *hum1,u8 *hum2,u8 *temp1,u8 *temp2)    
{        
 	u8 buf[5];
	u8 i;
	
	DHT22_Rst();
	if(DHT22_Check()==0)
	{
		for(i=0;i<5;i++)//全部读取  40个
		{
			buf[i]=DHT22_Read_Byte();
		}	
		//数据校核
		if((unsigned char)(buf[0]+buf[1]+buf[2]+buf[3])==buf[4]) //防止超出范围的强制转换
		{
			*hum1=buf[0];
			*hum2=buf[1];
			*temp1=buf[2];
			*temp2=buf[3];		
			return 1;	
		}
	}
	return 0;   
}

dht22.h 

#define	DHT22_DQ_OUT PAout(0)  
#define	DHT22_DQ_IN  PAin(0)  

u8 DHT22_Init(void);			
u8 DHT22_Read_Data(u8 *hum1,u8 *hum2,u8 *temp1,u8 *temp2);	
u8 DHT22_Read_Byte(void);		
u8 DHT22_Read_Bit(void);		
u8 DHT22_Check(void);			
void DHT22_Rst(void);	

以上程序经过测试时完全可用的,下面是测试实验图

STM32F103驱动DHT22温湿度传感器程序讲解(附加程序下载)_第3张图片

程序下载通道:

STM32F103驱动DHT22温湿度传感器、BH1750光照强度传感器-单片机文档类资源-CSDN下载

如果本文真的帮助到你的话,请动动小手点个赞吧!

你可能感兴趣的:(单片机STM32,stm32,单片机,传感器)