读取DHT11温湿度传感器数据
仙女打工,必有苦衷。。。吉时已到,下班班来更新博客啦~
一、DHT11介绍
DHT11是一款常用的数字温湿度传感器,适合于需要测量温度和湿度的基本应用场景。其测量范围为湿度为5%到95%RH,温度范围为-20℃到60℃,湿度测量精度为±5%RH,温度测量精度为±2℃,采用单总线通信协议,通过一个数据引脚完成输入输出双向传输。
DHT11实物图
DHT11传感器有4个管脚,其中有一个管脚不用接,另外就是VCC,SIG,GND,可能大家自行买的DHT11是带了转接板的,因此需要仔细确认管脚顺序,DHT11硬件连接简单,与MCU连接如下所示,只需要在信号脚上接一个5K的上拉电阻即可。供电范围是3-5.5V,超过这个范围可能会烧毁。
DHT11的通信包数据长度为40个字节。组成如下:8bit湿度整数数据+8bit湿度小数数据+8bit温度整数数据+8bit温度小数数据+8bit校验和,湿度小数数据是0不用关注,数据传输格式为高位在前,低位在后,校验和是前4个字节相加。对于DHT11的数据传输时序非常严格,并非是低电平为0,高电平为1,和上一课WS2812类似,对于逻辑0和逻辑1,均是通过不同时间的高电平占比来表示的。具体时序逻辑如下图:
大致流程就是,主机发起开始信号(>18ms的低电平),拉高40us等待。然后DHT11会拉低80us表示响应信号,然后拉高80us表示开始传输数据。每一位数据前都有50us的低电平,紧接着如果是数据0,高电平持续时间大概在23-27us,如果是数据1,高电平大概是68us-74