这一章在干嘛?

DHT11 实验:单总线协议(与 DS18B20 类似但格式不同)、40 bit 数据帧、温度+湿度一次性读取。

33.1 DHT11 及时序简介

33.2 硬件设计

33.3 程序设计

33.4 下载验证

33.1 DHT11 及时序简介

DHT11 = 温湿度复合传感器:

  • 单总线协议;
  • 湿度 20~90% RH(±5%);
  • 温度 0~50℃(±2℃);
  • 8 位分辨率。

原书图 33.1.1:DHT11 实物原书图 33.1.1:DHT11 实物

数据帧 40 bit:

字节内容
0湿度整数
1湿度小数(常为 0)
2温度整数
3温度小数(常为 0)
4校验和(前 4 字节相加末 8 位)

原书图 33.1.2:DHT11 数据格式原书图 33.1.2:DHT11 数据格式

33.2 硬件设计

PG11 接 DQ,外接 4.7kΩ 上拉。

原书图 33.2.1:DHT11 接线图原书图 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%、精度更高。