这一章在干嘛?
DHT11 实验:单总线协议(与 DS18B20 类似但格式不同)、40 bit 数据帧、温度+湿度一次性读取。
33.1 DHT11 及时序简介
DHT11 = 温湿度复合传感器:
- 单总线协议;
- 湿度 20~90% RH(±5%);
- 温度 0~50℃(±2℃);
- 8 位分辨率。
原书图 33.1.1:DHT11 实物
数据帧 40 bit:
| 字节 | 内容 |
|---|---|
| 0 | 湿度整数 |
| 1 | 湿度小数(常为 0) |
| 2 | 温度整数 |
| 3 | 温度小数(常为 0) |
| 4 | 校验和(前 4 字节相加末 8 位) |
原书图 33.1.2:DHT11 数据格式
33.2 硬件设计
PG11 接 DQ,外接 4.7kΩ 上拉。
原书图 33.2.1:DHT11 接线图
33.3 程序设计
33.3.1 关键代码
uint8_t dht11_read(uint8_t *temp, uint8_t *humi) {
dht11_init(); // 复位
for (int i = 0; i < 5; i++) {
dht11_buf[i] = dht11_read_byte();
}
if (dht11_buf[4] == (dht11_buf[0]+dht11_buf[1]+dht11_buf[2]+dht11_buf[3]) & 0xFF) {
*humi = dht11_buf[0];
*temp = dht11_buf[2];
return 0;
}
return 1; // 校验失败
}
33.4 下载验证
串口每秒打印温度和湿度,呼吸产生的水汽看湿度变化。
进阶:DHT22 是 DHT11 升级版,温度 -4080℃、湿度 0100%、精度更高。
DHT11 数据帧多少 bit?
40 bit。
DHT11 默认分辨率多少?
8 位。
校验和计算方式?
前 4 字节相加取低 8 位。