封装 DHT21 传感器驱动为库

将昨日的驱动改成了一个 Arduino 的库,可以更方便的使用

库为两个文件: dh21.h 和 dh21.cpp

在 E:\arduino-0022\libraries\ 下建立 DH21 目录,把这两个文件置于其中即可使用(由此可见 Arduino 的库创建和使用都很方便),重启 Arduino 开发环境后,可在 Sketch –> Import Library 下看到 DH21

使用示例如下:

#include <dh21.h>

/* the data line of DH21 is pluged in digital pin #12 */
DH21 dh21(12);

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  if(dh21.get_data() == -1)
    Serial.println("Read DH21 error");
   else
   {
     Serial.print("Temperature: ");
     Serial.print(dh21.temperature());
     Serial.print("C   ");
     Serial.print("Humidity: ");
     Serial.print(dh21.humidity());
     Serial.println("%");
   }

   /* read after 5 seconds */
   delay(5000);
}

DHT21/AM2301 数字温度传感器使用单总线串行接口,完整的湿度温度数据是 40 位;读时高位先出,每次读一位,连续读取 40bit,其中高 16 位是湿度,中间 16 位是温度,后 8 位是校验数据:

0000 0010 1000 1100 | 0000 0001 0101 1111 | 1110 1110
湿度数据 温度数据 校验和

其中校验和应为: 湿度高8位 + 湿度低8位 + 温度高8位 + 温度低8位

例如:0000 0010 + 1000 1100 + 0000 0001 + 0101 1111 = 1110 1110

上面的数值表示:湿度 = 65.2%RH 温度 = 35.1℃

当温度低于0℃时温度数据的最高位置1。

例如:-10.1℃表示为1000 0000 0110 0101

用户主机(MCU)发送一次开始信号后,DHT21从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT21发送响应信号,送出40bit的数据,并触发一次信号采集

空闲时总线为高电平,通讯开始时主机(MCU)拉低总线 1~10ms 后释放总线,延时20-40us后主机开始检测从机(DHT21)的响应信号。