0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

数字温湿度传感器DHT11驱动详解

嵌入式技术 来源:嵌入式技术 作者:嵌入式技术 2022-06-06 09:26 次阅读

1.DHT11简介

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。他应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性与卓越的长期稳定性,传感器包括一个电容式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的温湿校验室中进行校正。校准系数以程序的形式存储在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,信号的传输距离可达20米以上,使其成为各类应用甚至最为苛刻的应用场合的最佳选择。

其精度湿度±5%RH, 温度±2℃,量程湿度5~95%RH, 温度-20~+60℃。

pYYBAGKWyd6AapRDAARth0iuaw8813.png

2.硬件设计

温度湿度模块采用单总线协议,一根数据即可完成温度和湿度数据采集,占用IO资源少,硬件接口如下:
DHT11_IO 与开发板PA0相连。

pYYBAGKWya-AUcKtAAAqr3meY5c152.png

3.通信协议简介

(1). 温湿度传感器使用的是单总线接口,一次通讯时间5ms左右,具体格式如说明,当前数据传输位40bit,高位先出。
数据格式:接收到40bit数据=16bit湿度数据+16bit温度数据+8bit校验和数据。
例:接到40bit数据如下:
0100 0001 0000 0010 0010 0011 0000 0001 0110 0111
湿度数据 温度数据 校验和

湿度数据高8bit(整数部分)+湿度数据低8bit(小数部分)+温度数据高8bit(整数部分)+温度数据低8位(小数部分)=末8bit=校验和
例如:0100 0001+0000 0010+0010 0011+0000 0001=0110 0111
湿度=65.2%RH 温度=35.1℃

(2). 当温度低于0℃时温度数据的最高位置1.
例如:-10.1℃表示为1000 1010 0000 0001

3.1 时序图

用户主机(MCU)发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,并触发一次信采集。信号发送如图所示。

pYYBAGKWzouAD4JfAAFDOuyF7I4958.png

注:主机从 DHT11 读取的温湿度数据总是前一次的测量值,如两次测间隔时间很长,请连续读两次以第二次获得的值为实时温湿度值。

3.2 数据获取

步骤一:
DHT11上电后(DHT11 上电后要等待 1S 以越过不稳定状态在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时 DHT11 的 DATA 数据线由上拉电阻拉高一直保持高电平;此时 DHT11 的DATA 引脚处于输入状态,时刻检测外部信号。
步骤二:(起始信号)
微处理器的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms(最大不得超过 30ms),然后微处理器的 I/O 设置为输入状态,由于上拉电阻,微处理器的 I/O 即 DHT11 的 DATA 数据线也随之变高,等待DHT11 作出回答信号,发送信号如图所示:

poYBAGKWzveAUqgdAAC6m_vxNyI009.png
void DHT11_Rst(void)	   
{                 
	DHT11_IO_OUT(); 	//配置为输出模式
	DHT11_DQ_OUT(0); 	//总线拉低
	Delay_Ms(20);    	//拉低至少18ms
	DHT11_DQ_OUT(1); 	//总线拉高
	DelayUs(30);     	//主机拉高20~40us
}

步骤三:(回响信号)
DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后 DHT11 的 DATA引脚处于输出状态,输出 83 微秒的低电平作为应答信号,紧接着输出 87 微秒的高电平通知外设准备接收数据,微处理器的 I/O 此时处于输入状态,检测到 I/O 有低电平(DHT11 回应信号)后,等待 87 微秒的高电平后的数据接收,发送信号如图所示:

pYYBAGKWzyuAV9aEAABeZzj_f5E738.png
u8 DHT11_Check(void) 	   
{   
	u8 retry=0;
	DHT11_IO_IN();//配置为输入模式	
    while (!DHT11_DQ_IN&&retry<100)//DHT11会拉低83us左右
	{
		retry++;
		DelayUs(1);
	}
	if(retry>=100)return 1;	  	
    while (DHT11_DQ_IN&&retry<100)//DHT11拉低后会再次拉高87us
	{
		retry++;
		DelayUs(1);
	}	 
	if(retry>=100)return 1;
	else retry=0;  
	return 0;
}

步骤四:(读取一位数据)
由 DHT11 的 DATA 引脚输出 40 位数据,微处理器根据 I/O 电平的变化接收 40 位数据,位数据“0”的格式为: 54 微秒的低电平和 23-27 微秒的高电平,位数据“1”的格式为: 54 微秒的低电平加 68-74微秒的高电平。位数据“0”、“1”格式信号如图所示:

poYBAGKWz2OAee-MAAEptODkGvU263.png
u8 DHT11_Read_Bit(void) 			 
{
 	u8 retry=0;
	while(DHT11_DQ_IN&&retry<100)//等待变为低电平
	{
		retry++;
		DelayUs(1);
	}
	retry=0;
	while(!DHT11_DQ_IN&&retry<100)//等待变高电平
	{
		retry++;
		DelayUs(1);
	}
	DelayUs(40);//等待40us
	if(DHT11_DQ_IN)return 1;
	else return 0;		   
}

结束信号
DHT11 的 DATA 引脚输出 40 位数据后,继续输出低电平 54 微秒后转为输入状态,由于上拉电阻随之变为高电平。但 DHT11 内部重测环境温湿度数据,并记录数据,等待外部信号的到来。

3.3 温湿度传感器相关函数
(1) DHT11初始化函数(发送信号,检测模块是否正常):

u8 DHT11_Init(void)
{	 
	/*1.开时钟*/		
	DHT11_DQ_OUT(1);//上拉	
	DHT11_Rst();  //复位DHT11
	return DHT11_Check();//等待DHT11的回应
} 

(2)读取一字节函数

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

(3)获取一次温度数据函数(数据格式:40bit数据=16bit湿度数据+16bit温度数据+8bit校验和数据)

u8 DHT11_Read_Data(u8 *temp,u8 *humi)    
{  
	u8 stat=0xff;
 	u8 buf[5]={0};
	u8 i;
	DHT11_Rst();//起始信号
	stat=DHT11_Check();
	if(stat==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];
			*humi=buf[1];
			*temp++=buf[2];
			*temp=buf[3];
		}
	}else return stat;
	return 0;	    
}

(4)温湿度数据转换

Delay_Ms(1);
time++;
if(time>=100)
{
time=0;
stat=DHT11_Read_Data(temperature,humidity);	//读取温湿度值
if(!stat)
{
printf("温度:%d.%d℃  湿度:%d.%d\r\n",
temperature[0],temperature[1],humidity[0],temperature[1]);
	  sprintf((char *)buff,"%d.%1d",temperature[0],temperature[1]);
	  OLED_Display_str(60,0,8,16,buff);
	  sprintf((char *)buff,"%d.%1d",humidity[0],temperature[1]);
	  OLED_Display_str(60,2,8,16,buff);
	}
}
pYYBAGKW0EyAB7oOAABy-42vQ2w130.png
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • STM32
    +关注

    关注

    2270

    文章

    10890

    浏览量

    355635
  • 单总线
    +关注

    关注

    1

    文章

    36

    浏览量

    12399
  • DHT11
    +关注

    关注

    19

    文章

    277

    浏览量

    57577
  • 数字温湿度传感器

    关注

    0

    文章

    31

    浏览量

    11145
收藏 人收藏

    评论

    相关推荐

    基于arduino的dht11温湿度传感器的使用

    本文介绍了DHT11温湿度传感器电气特性、DHT11封装形式及接口说明与典型应用电路,其次介绍了DHT11
    发表于 01-22 15:50 4.5w次阅读
    基于arduino的<b class='flag-5'>dht11</b><b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b>的使用

    DHT11数字温湿度传感器的应用性研究

    基于DHT11温湿度传感器具有测量精度高、响应速度快、抗干扰能力强等优点。通过介绍DHT11数字温湿度
    发表于 11-06 16:28

    DHT11温湿度传感器介绍

    DHT11温湿度传感器介绍,1.实物原理图2.模块说明2.1 DHT11产品概述DHT11数字
    发表于 07-21 09:04

    DHT11数字温湿度传感器的相关资料推荐

    main.clcd1602.clcd1602.hdelay.cdelay.h项目展示DHT11温湿度相关介绍DHT11产品概述DHT11数字
    发表于 11-19 07:33

    dht11温湿度传感器有什么特点?怎么使用?

    dht11温湿度传感器特点及使用介绍前言一、dht11温湿度传感器外观二、原理图三、相关参数讲解
    发表于 01-10 06:27

    DHT11数字温湿度传感器的数据通讯过程是怎样的

    DHT11数字温湿度传感器是什么?有何优点呢?DHT11数字
    发表于 01-18 06:07

    DHT11温湿度传感器简介

    DHT11温湿度传感器1、DHT11简介DHT11数字温湿度
    发表于 02-16 06:55

    DHT11数字温湿度传感器的相关资料推荐

    STM32采集DHT11温湿度关于DHT11相关参数代码篇接线和实验结果总结关于DHT11DHT11是一款数字
    发表于 02-21 07:34

    DHT11数字温湿度传感器产品介绍

    DHT11数字温湿度传感器产品介绍 DHT11数字温湿度
    发表于 02-26 17:19 256次下载

    DHT11数字温湿度传感器的应用性研究

    基于DHT11温湿度传感器具有测量精度高、响应速度快、抗干扰能力强等优点。通过介绍DHT11数字温湿度
    发表于 07-25 17:03 216次下载
    <b class='flag-5'>DHT11</b><b class='flag-5'>数字</b>式<b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b>的应用性研究

    数字温湿度传感器 DHT11

    数字温湿度传感器 DHT11 ►相对湿度和温度测量 ►全部校准,数字输出 ►卓越的长期稳定性 ►
    发表于 12-02 11:06 4次下载

    温湿度传感器DHT11驱动程序

    本文开始介绍了驱动程序的定义与驱动程序的作用,其次介绍了DHT11温湿度传感器特性、引脚说明与封装详情,最后介绍了
    发表于 01-22 16:52 5.3w次阅读
    <b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b><b class='flag-5'>DHT11</b><b class='flag-5'>驱动</b>程序

    温湿度传感器DHT11的STM32驱动实现

    温湿度传感器DHT11的STM32驱动实现
    发表于 11-25 20:36 76次下载
    <b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b><b class='flag-5'>DHT11</b>的STM32<b class='flag-5'>驱动</b>实现

    数字温湿度传感器DHT11产品手册

    数字温湿度传感器DHT11产品手册
    发表于 02-14 11:17 80次下载

    使用ESP8266驱动DHT11温湿度传感器

    DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度综合
    的头像 发表于 05-19 14:20 6355次阅读
    使用ESP8266<b class='flag-5'>驱动</b><b class='flag-5'>DHT11</b><b class='flag-5'>温湿度</b><b class='flag-5'>传感器</b>