DHT11简介
DHT11 与单片机之间能采用简单的单总线进行通信,仅仅需要一个 I/O 口。
传感器内部湿度和温度数据 40Bit 的数据一次性传给单片机
DHT11 的技术参数如下:
工作电压范围: 3.3V-5.5V
工作电流 :平均 0.5mA
输出:单总线数字信号
测量范围: 湿度 20~90%RH,温度 0~50℃
精度 :湿度±5%,温度±2℃
分辨率 :湿度 1%,温度 1℃
DHT11数据格式
首先主机发送开始信号,即:拉低数据线,保持 t1(至少 18ms)时间,然后拉高数据线 t2(20~40us)时间,然后读取 DHT11 的响应,正常的话, DHT11 会拉低数据线,保持 t3(40~50us)时间,作为响应信号,然后 DHT11 拉高数据线,保持 t4(40~50us)时间后,开始输出数据。
湿度= byte4 . byte3=45.0 (%RH)
温度= byte2 . byte1=28.0 ( ℃)
校验= byte4+ byte3+ byte2+ byte1=73(=湿度+温度)
DHT11发送顺序为从低位到高位,Byte是先湿度后温度,先整数后小数,最后校验和。
DHT11通信方式
首先主机发送开始信号,即:拉低数据线,保持 t1(至少 18ms)时间,然后拉高数据线 t2(20~40us)时间,然后读取 DHT11 的响应,正常的话, DHT11 会拉低数据线,保持 t3(40~50us)时间,作为响应信号,然后 DHT11 拉高数据线,保持 t4(40~50us)时间后,开始输出数据。
DHT11发送的数据不是传统的“高电平就是1,低电平就是0”,而是在每发送一个bit前,拉低电平 12 ~14us。数据是体现在拉高电平时间的长短,拉高电平26 ~28us,就为0,拉高电平116 ~118us就为1。
程序源码
dht11.c
#include "dht11.h"
#include "delay.h"
//复位 DHT11
void DHT11_Rst(void)
{
DHT11_IO_OUT(); //SET OUTPUT
DHT11_DQ_OUT=0; //拉低 DQ
delay_ms(20); //拉低至少 18ms
DHT11_DQ_OUT=1; //DQ=1
delay_us(30); //主机拉高 20~40us
}
//等待 DHT11 的回应
//返回 1:未检测到 DHT11 的存在
//返回 0:存在
u8 DHT11_Check(void