基于智能家居项目 解析DHT11温湿度传感器
一、模块简介
DHT11 是一款数字式温湿度传感器,内部集成了温度传感元件、湿度传感元件以及一个 8 位单片机芯片,用于采集数据和通信。。
-
测量范围:湿度 20%~90% RH,温度 0~50℃
-
精度:湿度 ±5% RH,温度 ±2℃
-
通信方式:单总线数字信号
-
接口:VCC、GND、DATA(单根数据线)
二、硬件连接原理(MCU 与模块的连接)
DHT11 模块有 3 个引脚(有些版本为 4 个引脚,1 个为无连接):
引脚编号 | 名称 | 功能说明 |
---|---|---|
1 | VCC | 电源输入(3.3V 或 5V) |
2 | DATA | 数据线(双向) |
3 | GND | 地线 |
注意事项:
-
DATA 线需要通过一个 上拉电阻(通常为 5.1kΩ~10kΩ)接到 VCC。
-
MCU 的 IO 口必须具备 GPIO 输入输出能力,配置为开漏输出。
三、通信协议详解(单总线通信协议)
DHT11 使用一种简化的 单总线协议(非标准 One-Wire 协议),只有一根数据线负责所有通信。通信流程包括:
1. 起始信号(由 MCU 发起)
-
MCU 拉低 DATA 线 不少于 18ms(确保 DHT11 能检测到启动信号)
-
MCU 释放 DATA 线并切换为输入状态
-
DHT11 会在 20~40μs 内拉低 DATA 线回应 80μs,然后拉高 80μs 表示准备发送数据
2. 数据传输
DHT11 发送 40 位数据(8位湿度整数 + 8位湿度小数 + 8位温度整数 + 8位温度小数 + 8位校验和):
字节序 | 内容 |
---|---|
Byte 1 | 湿度整数 |
Byte 2 | 湿度小数(一般为 0) |
Byte 3 | 温度整数 |
Byte 4 | 温度小数(一般为 0) |
Byte 5 | 校验和 = Byte1 + Byte2 + Byte3 + Byte4 |
3. 数据位定义与时序
每一个数据位由如下结构组成:
-
DHT11 先拉低 50μs,作为开始标志
-
再根据位值决定高电平持续时间:
-
逻辑 0:高电平持续约 26~28μs
-
逻辑 1:高电平持续约 70μs
-
MCU 只需要根据高电平持续时间判断是 0 还是 1。
四、一根数据线如何完成通信?
DHT11 的单总线通过双向通信(MCU输出+输入模式切换)实现:
-
MCU 先发起起始信号(输出模式)
-
DHT11 接收后,开始发送数据(MCU切为输入模式)
-
通过 时间脉宽编码(低高电平持续时间差异)表示“0”与“1”
-
整个过程中,DATA 引脚既充当输出也充当输入
问题解疑
常见问题解析 (FAQ)
❓ 为什么需要上拉电阻?
数据线是开放式结构,DHT11 或 MCU 都可以驱动它。为了避免悬空状态,使用上拉电阻确保默认是高电平。
上拉电阻配合 IO 的输入/输出切换,实现“写低电平+读高低电平”组合,完成数据传输。
❓ DHT11 和 DHT22 有什么区别?
对比项 | DHT11 | DHT22 |
---|---|---|
精度 | 一般(±5% RH) | 高(±2% RH) |
温度范围 | 0~50°C | -40~80°C |
价格 | 便宜 | 略贵 |
下一章讲MCU如何配置温湿度传感