1-Wire协议之DHT11温湿度传感器

1.DHT11传感器介绍

1.1 DHT11简介

DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测温元件,并与一个高性能8位单片机相连接。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点

1.2 DHT11工作原理

DHT11采用单总线通信。即只有一根数据线来传输数据。单总线通常需要外接一个上拉电阻,这样在总线空闲的时候,状态为高电平。
DHT11

1.3 DHT11工作时序

1.3.1 数据总时序

主机发送开始信号,主机拉高数据线,等待从机响应主机,然后传输8bit数据。
dht11时序

1.3.2.控制信号以及响应信号时序

主机拉低数据线至少18ms,然后拉高20-40us,然后切换至输入模式,读取DHT11的响应信号。DHT11先拉低数据线80us,然后再拉高80us后,开始传输数据。
响应时序
在每一bit到来时,都会先有50us的低电平信号,然后才开始传输“0”.“1”数据。

1.3.3 数字“0”表示

高电平持续时间为26us-28us即为数字“0”。
数据0

1.3.4 数字“1”表示

高电平持续时间为70us即为数字“1”。
数字1

2.DHT11代码实现

2.1 主机发送开始信号

void DHT11_Command()
{               
	//输出模式
	DHT11_OUT();
	//主机拉低至少18ms
	DHT11_L();
  	HAL_Delay(20);
  	//主机拉高20-40us
  	DHT11_H();
	delay_us(30);
}

2.2 主机等待DHT11响应

uint8_t DHT11_Check()//检查DHT11响应信号
{   
	uint8_t retry=0;
	//输入模式
	DHT11_IN();

	//高电平时期
	//等待低电平的到来 如果是高电平,就一直循环,直到低电平退出
    while (DHT11_read()&&retry<100)
	{
		retry++;
		delay_us(1);
	}
	if(retry>=100)
		return 1;
	else
		retry=0;

	//低电平时期
	//下面是等待高电平到来,低电平时间50us,并且加入了超时判断,防止死循环
    while (!DHT11_read()&&retry<100)
	{
		retry++;
		delay_us(1);
	}
    //
	if(retry>=100)
		return 1;
	//响应正确返回0 并且现在处于高电平时期
	return 0;
}

2.3 DHT11数据 bit“0”,“1”读取

uint8_t DHT11_Read_Bit()
{
	uint8_t retry=0;
	
	//高电平 等待低电平到来 开始传输数据
	while(DHT11_read()&&retry<100)
	{
		retry++;
		delay_us(1);
	}
	retry=0;

	//低电平时期 等待高电平到来
	while(!DHT11_read()&&retry<100)
	{
		retry++;
		delay_us(1);
	}
	//高电平时期 因为“0”持续26us-28us 所以延时 40us读取电平 判断“0”,“1”
	delay_us(40);
	if(DHT11_read())
		return 1;
	else
		return 0;
}

2.4 DHT11传输一个字节数据

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

2.5 DHT11传输温湿度数据

uint8_t DHT11_Read_Data(uint8_t *temp,uint8_t *humi)
{        
	uint8_t buf[5];
 	uint8_t i;
 	DHT11_Command();
	if(DHT11_Check()==0)
	{
		for(i=0;i<5;i++)
		{
			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;	    
}

3.DHT11注意事项

传感器上电后,要等待1s以越过不稳定状态在此期间无需发送任何指令。

  • 20
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值