这篇是本人自己总结学习DHT22的笔记,源码在最后。关于DHT22的工作原理有很多博主讲得很好了,本篇主要讲解DHT22的驱动代码(都在代码注释上)。DHT22是单总线通信的,驱动它需三根线:电源线、信号线(接到任意GPIO口就行)和地线,,如下图
具体的原理解释见该博主:温湿度模块DHT22详解一:基础篇_k1ang的博客-CSDN博客_dht22
以下的工作原理是从DHT22的使用说明中截取的时序图
数据格式: 40bit数据=16bit湿度数据+16bit温度数据+8bit校验和
例子: 接收40bit数据如下:
0000 0010 1000 1100 0000 0001 0101 1111 1110 1110
湿度数据 温度数据 校验和
湿度高8位+湿度低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)发送一次开始信号后,DHT22从低功耗模式转换到高速模式,等待主机开始信号结束后,DHT22发送响应信号,送出40bit的数据,并触发一次信号采集。(注:主机DHT22读取的温湿度数据总是前一次的测量值,如两次测量间隔时间很长,请连续读两次以获得实时的温湿度值)