产品概述
1. DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制
2. 特点
·相对湿度和温度测量
·全部校准,数字输出
·长期稳定性
·超长的信号传输距离:20米
·超低能耗:休眠
·4 引脚安装:可以买封装好的完全互换 : 直接出结果,不用转化
接线
数据传送逻辑
只有一根数据线DATA,上官一号发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先出
数据格式
8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和
通讯过程时序图
3.单片机 检测模块是否存在
A : dht = 1
B :dht = 0延时30ms
C: dht = 1在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在
为什么是60us呢?
因为C点到D点是20-40us,响应DHT信号的时间是80us,所以从20us~80us(0~100us)区间的60us可以判断DHT信号被拉低为低电平。
代码实现
#include "reg52.h"
#include "intrins.h"
sbit ledOne = P3^7;
sbit dht = P3^3;
void Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Delay30ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void Delay60us() //@11.0592MHz
{
unsigned char i;
i = 25;
while (--i);
}
void check_DHT()
{
//a: dht = 1
dht = 1;
//b: dht = 0;
dht = 0;
//延迟30ms
Delay30ms();
//c: dht = 1
dht = 1;
//dht = 1在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在
Delay60us();
if(dht == 0){
ledOne = 0; //模块被拉低灯亮
}
}
void main()
{
ledOne = 1;
Delay1000ms();
Delay1000ms();
check_DHT();
while(1);
}
main()函数的bug:
由以下手册可得加延迟函数,while(1)函数如果不加,就会出现灯闪和灭的状态,因为没有while()函数,main函数会退出重新开始,导致忽闪忽灭的现象
DHT11传输0与1时序分析
DH11传输0的时序分析
DH11传输1的时序分析
通过手册我们可以知道DATA发送数据的原理
40bit = 5个 char