目录
- 1.产品概述
- 2.应用范围
- 3.产品亮点
- 4.外形尺寸
- [4 典型电路](#4 典型电路)
- 5.串行通信说明(单线双向)
-
- [5.1 示例一:接收到的 40 位数据为:](#5.1 示例一:接收到的 40 位数据为:)
- [5.2 示例二:接收到的 40 位数据为:](#5.2 示例二:接收到的 40 位数据为:)
- [5.3 ◎ 数据时序图](#5.3 ◎ 数据时序图)
- [5.4 ◎外设读取步骤](#5.4 ◎外设读取步骤)
- [5.5 单总线信号特性](#5.5 单总线信号特性)
- [6. 程序流程](#6. 程序流程)
-
- [6.1 串行通信说明(单线双向)](#6.1 串行通信说明(单线双向))
- [6.2 建立连接:](#6.2 建立连接:)
-
- [6.2.1 从机响应信号](#6.2.1 从机响应信号)
- [6.2.2 数据接收:](#6.2.2 数据接收:)
- [6.2.3 传输结束](#6.2.3 传输结束)
- [7. 数据时序](#7. 数据时序)
-
- [7.1 DHT11 工作模式说明](#7.1 DHT11 工作模式说明)
- [7.2 DHT11硬件与软件实现步骤](#7.2 DHT11硬件与软件实现步骤)
1.产品概述
DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有枀高的可靠性与卓越的长期稳定性。传感器包括一个电容式感湿元件和一个NTC 测温元件,并与一个高性能8位单片机相连接。


2.应用范围
暖通空调、除湿器、农业、冷链仓储、测试及检测设备、消费品、汽车、自动控制、数据记录器、气象站、家电、湿度调节器、医疗、其他相关湿度检测控制。
3.产品亮点
成本低、长期稳定、相对湿度和温度测量、品质卓越、超快响应、抗干扰能力强、超长的信号传输距离、数字信号输出、精确校准。
4.外形尺寸

4 典型电路

DHT11典型电路
微处理器与DHT11的连接典型应用电路如上图所示,DATA上拉后与微处理器的I/O端口相连。
1.典型应用电路中建议连接线长度短于5m时用4.7K上拉电阻,大于5m时根据实际情况降低上拉电阻的阻值。
2. 使用3.3V电压供电时连接线尽量短,接线过长会导致传感器供电不足,造成测量偏差。
3. 每次读出的温湿度数值是上一次测量的结果,欲获取实时数据,需连续读取2次,但不建议连续多次读取传感器,每次读取传感器间隔大于2秒即可获得准确的数据。
4. 电源部分如有波动,会影响到温度。如使用开关电源纹波过大,温度会出现跳动。
5.串行通信说明(单线双向)
◎单总线说明
DHT11器件采用简化的单总线通信。单总线即只有一根数据线,系统中的数据交换、控制均由单总线完成。设备(主机或从机)通过一个漏枀开路或三态端口连至该数据线,以允许设备在不发送数据时能够释放总线,而让其它设备使用总线;单总线通常要求外接一个约 4.7kΩ 的上拉电阻,这样,当总线闲置时,其状态为高电平。由于它们是主从结极,只有主机呼叫从机时,从机才能应答,因此主机访问器件都必须
严格遵循单总线序列,如果出现序列混乱,器件将不响应主机。
◎单总线传送数据位定义
DATA用于微处理器与DHT11之间的通讯和同步,采用单总线数据格式,一次传送40位数据,高位先出。
数据格式:
8bit 湿度整数数据 + 8bit湿度小数数据 + 8bit温度整数数据 + 8bit温度小数数据 + 8bit校验位。
注:其中湿度小数部分为0。
◎校验位数据定义
"8bit 湿度整数数据 + 8bit湿度小数数据 + 8bit温度整数数据 + 8bit温度小数数据"8bit校验位等于
所得结果的末8位。
| 名称 | 单总线格式定义 |
|---|---|
| 起始信号 | 微处理器把数据总线(SDA)拉低一段时间至少18ms(最大不得超过30ms),通知传感器准备数据。 |
| 响应信号 | 传感器把数据总线(SDA)拉低83μs,再接高87μs以响应主机的起始信号。 |
| 数据格式 | 收到主机起始信号后,传感器一次性从数据总线(SDA)串出40位数据,高位先出。 |
| 湿度 | 湿度高位为湿度整数部分数据,湿度低位为湿度小数部分数据 |
| 温度 | 温度高位为温度整数部分数据,温度低位为温度小数部分数据,且温度低位Bit8为1则表示负温度,否则为正温度 |
| 校验位 | 校验位 = 湿度高位 + 湿度低位 + 温度高位 + 温度低位 |
5.1 示例一:接收到的 40 位数据为:
0011 0101 0000 0000 0001 1000 0000 0100 0101 0001
湿度高8位 湿度低8位 温度高8位 温度低8位 校验位
计算:
0011 0101 + 0000 0000 + 0001 1000 + 0000 0100 = 0101 0001
接收数据正确:
- 湿度:
0011 0101(整数)=0x35=53%RH0000 0000(小数)=0x00=0.0%RH ⇒ 53%RH + 0.0%RH = 53.0%RH - 温度:
0001 1000(整数)=0x18=24℃0000 0100(小数)=0x04=0.4℃ ⇒ 24℃ + 0.4℃ = 24.4℃
◎特殊说明:
当温度低于 0 ℃ 时,温度数据的低 8 位的最高位置为 1。
示例: ‑10.1 ℃ 表示为 0000 1010 1000 0001
温度:0000 1010(整数)=0x0A=10℃,1000 0001(小数)=0x01=0.1℃ ⇒ ‑(10℃+0.1℃) = ‑10.1℃
5.2 示例二:接收到的 40 位数据为:
0011 0101 0000 0000 0001 1000 0000 0100 0100 1001
湿度高8位 湿度低8位 温度高8位 温度低8位 校验位
计算:
0011 0101 + 0000 0000 + 0001 1000 + 0000 0100 = 0101 0001
0101 0001 ≠ 0100 1001
本次接收的数据不正确,放弃,重新接收数据。
5.3 ◎ 数据时序图
用户主机(MCU)发送一次开始信号后,DHT11 从低功耗模式转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,并触发一次信采集。信号发送如图所示。
图 3数据时序图
注:主机从 DHT11 读取的温湿度数据总是前一次的测量值,如两次测间隔时间很长,请连续读两次以第二次获得的值为实时温湿度值。
5.4 ◎外设读取步骤
主机和从机之间的通信可通过如下几个步骤完成(外设(如微处理器)读取 DHT11 的数据的步骤)。
步骤一:
DHT11 上电后(DHT11 上电后要等待 1S 以越过不稳定状态,在此期间不能发送任何指令),测试环境温湿度数据,并记录数据,同时 DHT11 的 DATA 数据线由上拉电阻拉高一直保持高电平;此时 DHT11 的 DATA 引脚处于输入状态,时刻检测外部信号。
步骤二:
微处理器的 I/O 设置为输出同时输出低电平,且低电平保持时间不能小于 18ms(最大不得超过 30ms),然后微处理器的 I/O 设置为输入状态,由于上拉电阻,微处理器的 I/O 即 DHT11 的 DATA 数据线也随之变高,等待 DHT11 作出回答信号,发送信号如图所示:

步骤三:
DHT11 的 DATA 引脚检测到外部信号有低电平时,等待外部信号低电平结束,延迟后 DHT11 的 DATA 引脚处于输出状态,输出 83 微秒的低电平作为应答信号,紧接着输出 87 微秒的高电平通知外设准备接收数据,微处理器的 I/O 此时处于输入状态,检测到 I/O 有低电平(DHT11 回应信号)后,等待 87 微秒的高电平后,再进行数据接收,发送信号如图所示:

步骤四:
DHT11 的 DATA 引脚输出40位数据,单片机通过检测I/O口电平变化完成40位数据接收。
- 数据位
0波形:54μs低电平 + 23‑27μs高电平 - 数据位
1波形:54μs低电平 + 68‑74μs高电平
数据位0、1的时序波形如下图所示:

结束信号:
DHT11 的 DATA 引脚输出完40位数据后,继续输出 54μs低电平,之后DHT11把DATA引脚切换为输入状态;由于外部上拉电阻作用,引脚电平变回高电平。
此时DHT11在芯片内部重新测量环境温湿度、保存测量结果,进入待机状态,等待单片机下一次的触发信号。
5.5 单总线信号特性
| 符号 | 参数 | min | type | max | 单位 |
|---|---|---|---|---|---|
| T b e T_{be} Tbe | 主机起始信号拉低时间 | 18 | 20 | 30 | ms |
| T g o T_{go} Tgo | 主机释放总线时间 | 10 | 13 | 35 | μS |
| T r e l T_{rel} Trel | 响应低电平时间 | 78 | 83 | 88 | μS |
| T r c h T_{rch} Trch | 响应高电平时间 | 80 | 87 | 92 | μS |
| T L O W T_{LOW} TLOW | 信号"0"、"1"低电平时间 | 50 | 54 | 58 | μS |
| T H 0 T_{H0} TH0 | 信号"0"高电平时间 | 23 | 24 | 27 | μS |
| T H 1 T_{H1} TH1 | 信号"1"高电平时间 | 68 | 71 | 74 | μS |
| T e n T_{en} Ten | 传感器释放总线时间 | 52 | 54 | 56 | μS |
备注:为保证传感器的准确通讯,用户在读取信号时,请严格按照表10和对应时序图中的参数进行设计。
6. 程序流程
6.1 串行通信说明(单线双向)
单总线是一种通信方式,只使用一根数据线进行数据交换和控制,下面对其传输数据构成以及通信时序进行介绍。
- 一次传送 40 位数据 ,共 5 字节 ,高位先出
- 数据格式:
8bit 湿度整数数据 + 8bit 湿度小数数据 + 8bit 温度整数数据 + 8bit 温度小数数据 + 8bit 校验和数据
注:其中湿度小数部分为 0;当温度低于 0℃ 时,温度数据的低 8 位的最高位置为 1。
- 数据传送正确时,校验和数据等于四字节数据之和:
校验和数据 = 湿度整数数据 + 湿度小数数据 + 温度整数数据 + 温度小数数据
通信时序可分为:建立连接 、数据接收 两部分。
6.2 建立连接:
DHT11 温湿度传感器上电后要等待 1S 以越过不稳定状态,在此期间不能发送任何指令,同时数据线处于空闲状态(数据线由上拉电阻拉高一直保持高电平)。
主机发送起始信号: 主机的 I/O 设置为输出状态,拉低数据线(数据线拉低时间 > 18ms),然后主机的 I/O 设置为输入状态,释放总线,由于上拉电阻,数据线也随之变高电平。

6.2.1 从机响应信号
从机接收到主机发送的起始信号后,先拉低数据线作为应答信号,再拉高数据线,表示连接建立成功,通知主机准备接收数据。
典型时序:拉低数据线
83μs,拉高数据线87μs。

6.2.2 数据接收:
从机发送 40 位数据,每 1bit 数据都以 54μs 低电平 开始,主机通过判断低电平后的高电平时间来决定接收数据的种类。
- 位数据 "0" 的格式为:
54μs的低电平和23-27μs的高电平 - 位数据 "1" 的格式为:
54μs的低电平加68-74μs的高电平

6.2.3 传输结束
当最后 1bit 数据传送完毕后,从机拉低数据线 54μs,随后从机释放总线,总线进入空闲状态(由上拉电阻拉高变为高电平)。
7. 数据时序
7.1 DHT11 工作模式说明
用户主机(MCU)发送一次开始信号后,DHT11 从低功耗模式 转换到高速模式,待主机开始信号结束后,DHT11 发送响应信号,送出 40bit 的数据,并触发一次采集。
注意:每次采集间隔需大于 2 秒。

7.2 DHT11硬件与软件实现步骤
任意单片机可以选取任意GPIO引脚作为DHT11的DATA引脚(模块I/O引脚)。
-
硬件接线
选定GPIO引脚,将该引脚与DHT11模块的I/O引脚直接相连。
-
GPIO引脚初始化
初始化MCU对应的GPIO,配置为推挽输出模式。
需要封装两个函数,实现引脚在推挽输出模式 和上拉输入模式之间动态切换:
- 推挽输出:用于主机输出起始信号,主动拉低总线
- 上拉输入:用于读取DHT11从机返回的电平信号
-
时序通信
严格按照DHT11单总线通信时序,完成握手连接,接收40bit温湿度原始数据。
-
校验与数据输出
校验接收数据正确性:校验字节是否等于前面4个数据字节相加。
- 校验通过:数据有效,打印输出温湿度;
- 校验失败:本次读取失败,丢弃数据。