stm32获取DHT11模块温湿度数据原理解析
stm32单片机如何从DHT11获取到温湿度的呢?
首先可以通过DHT11手册了解一下DHT11模块,掌握该温湿度模块的通讯过程
简单分析stm32与模块建立通讯的过程:通过高低电平的持续时间和切换来控制模块开始采集和传输数据。
首先了解如何控制该模块,分析时序图:
假设连接该模块的引脚为A,那么与模块建立通讯需按照一下步骤:
1.A为输出模式并且输出低电平持续大于等于18ms(根据图中主机至少拉低18ms)
2.A输出高电平持续20-40μs(图示主机拉高20-40μs)
3.A改变为输入模式并且接收到DHT响应信号80μs(图中DHT响应信号80μs)
4.A接收到高电平持续80μs,为DHT11发送的响应信号(图中DHT拉高80μs)
与DHT11模块建立通讯完成。
接下来主要解析如何接收DHT11温湿度模块返回的温湿度数据
阅读DTH11手册得知,该模块温湿度数据传输为40bit,高位先出,传输格式如下:
8bit湿度整数数据+8bit湿度小数数据
+8bi温度整数数据+8bit温度小数数据
+8bit校验和
那么如何传输这40bit的数据呢?
建立通讯后,模块进入高速模式,并且触发一次数据采集,送出40bit的数据
40bit数据以二进制的形式通过波形传播
该模块会返回两种波形,一种波形代表数字 0 ,另一种代表数字 1 ,一共返回 40 个波形,每个波形代表一位二进制数( 0 或 1 ),每 8 个波形为一组,一共五组,每一组组成一个 8 位的二进制数分别代表湿度整数部分、小数部分 和 温度整数部分、小数部分,最后是校验和。
接下来看下返回的两种波形
图一,表示数字 0,图二表示数字 1 ,如下图所示
图一:
图二:
对原理有一定的了解之后
就可以根据温湿度模块输出的波形进行解码得到温湿度数据
初始化配置代码就不一一列出了
主要编写的是如何对模块返回的波形进行解码ÿ