一起玩儿物联网人工智能小车(ESP32)——29. 温湿度测量芯片DHT11的使用方法

摘要:本文介绍如何使用DHT11进行温度和湿度的测量

前面介绍了如何使用DS18B20芯片进行温度的测量。本文将介绍另一款含有已校准数字信号输出的温湿度复合传感器——DHT11。

DHT11使用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高的可靠性和卓越的长期稳定性。DHT11包含了一个电阻式感湿元件、一个NTC测温元件和一个高性能的8位单片机。因此该产品具有品质卓越、超快响应、抗干扰能力强、性价比极高等优点。每个DHT11传感器都在极为精确的湿度校验室中进行校准。校准系数以程序的形式存在OTP内存中,传感器内部在检测信号的处理过程中要调用这些校准系数。同前边介绍的DS18B20一样,DHT11也采用了单线制串行接口,使系统集成变得简易快捷。超小的体积、极低的功耗,使其成为该类应用中,在苛刻应用场合的最佳选择。产品为4针单排引脚封装,连接方便。

DHT11的样子如下图所示:

一起玩儿物联网人工智能小车(ESP32)——29. 温湿度测量芯片DHT11的使用方法_第1张图片

DHT11的引脚说明如下:

pin

名称

注释

1

VDD

供电 3-5.5VDC

2

DATA

串行数据,单总线

3

NC

空脚

4

GND

接地,电源负极

DHT11与单片机的连接方法与DS18B20是一样的,除了VDD接电源正极、GND接电源地、DATA直接与GPIO相连之外,还需要在DATA数据线上连接一个上拉电阻,如下图所示:

一起玩儿物联网人工智能小车(ESP32)——29. 温湿度测量芯片DHT11的使用方法_第2张图片

DHT11的性能参数如下所示:

供电电压: 3.3~5.5V DC

输出: 单总线数字信号

测量范围: 湿度5~95%RH,温度-20~+60℃

测量精度: 湿度±5%RH,温度±2℃

分辨率: 湿度1%RH, 温度0.1℃

DHT11同DS18B20一样,也是采用单总线数据传输,也就是只利用一根总线完成数据和指令的发送和接收工作。

读取DHT11的测量数据包括以下三个步骤:

1. 主机发送开始信号

DHT11的单总线在平时也是保持高电平状态,当主机需要获得DHT11的测量数据时,需要首先发送开始信号。主机需要先拉低数据线,并保持至少18ms的时间,然后再拉高数据线20-40us的时间。

2. DHT11回复响应信号

当DHT11收到主机发来的开始信号后,DHT11需要做出响应,回复响应信号。DHT11需要先拉低数据线,保持80us的时间,作为响应信号,然后再拉高数据线,保持80us的时间。

3. DHT11发送测量数据

DHT11回复主机的响应之后,就可以发送数据了。在这里需要注意的是,DHT11的单总线通信发送数据的方法与之前的不同,并不是约定了固定的传输速率,然后按照高电平代表1、低电平代表0的方式串行发送数据的。而是使用宽度不同的脉冲来分别代表0和1进行发送数据的。每个脉冲前有一个50us的低电平,来表示一位数据的开始。而后的高电平持续的不同时间,则表示了不同的含义,当高电平持续的时间是26-28us时,表示这一位的数据是“0”,当高电平持续的时间是大于70us时,表示这一位的数据是“1”。

DHT11每次返回的数据是5个字节(40位),包括:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和。其中的校验和为前面4个字节相加。下面来看一个返回数据的示例:

假如接收到的40位数据为:

0011 0110

0000 0000

0001 1001

0000 0000

0100 1111

湿度高8位

湿度低8位

温度高8位

温度低8位

校验字节

湿度整数部分

湿度小数部分

温度整数部分

温度小数部分

校验和的计算:

0011 0110 + 0000 0000 + 0001 1001 + 0000 0000 = 0100 1111

前4个字节之和与第5个校验字节相同,表示接收数据的校验和正确,数据传输无误。

湿度:0011 0110.0000 0000=54.0%RH

温度:0001 1001.0000 0000=25.0℃

好了,关于DHT11的基本知识就介绍到这里了。下面来看一下如何在Mixly中用程序读取DHT11的测量数据。

在这里,使用的是DHT11温湿度模块,而不是原始器件,好处就是不用我们自己再外接上拉电阻了,而且还有了电源指示LED,可以直观的判断出电源的连接是否正确。如下图所示:

一起玩儿物联网人工智能小车(ESP32)——29. 温湿度测量芯片DHT11的使用方法_第3张图片

接线就是VCC接+5V电源,DATA接GPIO,GND接电源地。在这里,我将DHT11连接到了ESP32开发板的33引脚。下面就打开Mixly软件,选择“Arduino ESP32”开发板,然后利用串口输出DHT11模块的温度和湿度。DHT11采集功能在“传感器”功能模块中。完成后如下图所示:

一起玩儿物联网人工智能小车(ESP32)——29. 温湿度测量芯片DHT11的使用方法_第4张图片

编译、上传就可以在COM端口看到DHT11的测量结果了,如下图所示:

一起玩儿物联网人工智能小车(ESP32)——29. 温湿度测量芯片DHT11的使用方法_第5张图片

下面来看一下Mixly生成程序的源代码,如下所示:

#include

DHT dht33(33, 11);

void setup(){

  Serial.begin(115200);

   dht33.begin();

}

void loop(){

  Serial.println(String("温度:") + String(dht33.readTemperature()));

  Serial.println(String("湿度:") + String(dht33.readHumidity()));

  delay(1000);

}

在源代码中,完全看不到复杂的协议过程,这是因为已经有人把整个协议进行了封装。用DHT类包含了全部与DHT11有关的操作。其中主要的处理如下:

dht33(33, 11):生成DHT对象的实例,这个对象使用的GPIO引脚是33,温湿度芯片是DHT11。

begin():完成DHT11对象的初始化工作,准备读取检测数据。

readTemperature():读取温度。

readHumidity():读取湿度。

好了,DHT11芯片的基本功能就介绍到这里了。对于不是从事底层驱动开发的人来说,了解其基本原理、可以用程序正确的获得测量数据就可以了。

你可能感兴趣的:(硬件功能模块,ESP32,物联网,人工智能,单片机,嵌入式硬件)