1. DHT11温湿度传感器初识(239.85)
- DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。
- 应用领域:暖通空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制…
特点
- 相对湿度和温度测量
- 全部校准,数字输出
- 长期稳定性
- 超长的信号传输距离:20米
- 超低能耗:休眠
- 4 引脚安装:可以买封装好的
- 完全互换 : 直接出结果,不用转化
接线
数据传送逻辑
- 只有一根数据线DATA,上官一号发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先
出
数据格式
8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据+ 8bit 校验和
通讯过程时序图
2. 发送时序检测模块是否存在(240.86)
根据如下时序图,做通信初始化,并检测模块是否存在,功能是否正常
时序逻辑分析
- a:dht = 1
- b:dht = 0
- 延时 30 ms
- c:dht = 1
- 在 60us 后读 d 点,如果 d 点是低电平(被模块拉低),说明模块存在!
代码(18./DHT11_01检测模块是否存在)
#include "reg52.h"
#include "intrins.h"
sbit led1 = P3^7;
sbit dht = P3^3;//模块的data数据线插在P3.3口
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 Delay1000ms() //@11.0592MHz
{
unsigned char i, j, k;
_nop_();
i = 8;
j = 1;
k = 243;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void check_DHT(){
//a点 : dht = 1
dht = 1;
//b点 :dht = 0
dht = 0;
//延时30ms//主机至少拉低18ms
Delay30ms();
//c: dht = 1
dht = 1;
//在60us后读d点,如果d点是低电平(被模块拉低),说明模块存在!
//主机拉高20-40us、DHT响应信号80us,即20-100或40-120取中值60
Delay60us();
if(dht == 0){
led1 = 0;//灯亮,说明模块存在
}
}
void main(){
led1 = 1;
Delay1000ms();
Delay1000ms();
check_DHT();
while(1);
}
3. 读取DHT11数据的时序分析(241.87)
根据如下时序图,做通信初始化,并做数据传送
DHT11传输0的时序分析
DHT11传输1的时序分析
- a:dht = 1
- b:dht = 0
- 延时 30 ms
- c:dht = 1
- 卡d点:while(dht)(c-d)
- 卡e点:while(!dht) (d-e)
- 卡f点:while(dht) (e-f)
- 卡g点:while(!dht) (f-g)(或者:dht = 0 延时50us)
- g点之后:有效数据都是高电平,只是持续时间不一样:60us时读,低电平则0、高电平则1
4. 根据时序写代码获取DHT11的数据(242.88)
- 代码(18./DHT11_02读取温湿度数据)
#include "reg52.h"
#include "intrins.h"
sbit led1 = P3^7;
sbit dht = P3^3;//模块的data数据线插在P3.3口
char datas[5];
void Delay30ms() //@11.0592MHz
{
unsigned char i, j;
i = 54;
j = 199;
do
{
while (--j);
} while (--i);
}
void Delay60us