头像-121214

bluebanboom

  • 北京市
  • 单片机
  • 计算机网络

个人成就

获得 2 次赞

帮助过38人

dht11.zip

dht11是个比较常见的模块,可以获取温湿度,比ds18b20多了湿度的获取。 网络上关于dht11的资料很多,本来觉得这篇写起来会没什么干货,但是在实践的过程中发现,并不是那么回事。 资料多归多,但是真正讲清楚的少之又少,很多只是贴了代码,但是其中原理并没讲,有的讲了原理,但是有些关键的细节又没写。本来以为一个被用烂的模块很容易就搞定了,但是花了整整一天,最终还是找到datasheet把所有问题都搞明白了。之前在arduino上也用过dht11,复制一下代码就好了,但是,m1上可没现成代码复制,通过这次移植的过程,从会用到懂其中的门道,这一步迈的可不小。 有两点需要特别强调的,一是时序,二是数据格式,特别是数据格式,在大多数资料中都忽略了。牢记这两点,在移植过程中就会明白很多。另外在数据手册里提到从dht11读取的温湿度数据总是前一次的测量值,如果两次测量时间较长,请连续读取两次。 首先关于dht11是一个单总线的设备,数据读取是通过一根线来实现,所以dht11模块只有三个引脚+,-,data。dht11数据获取需要依赖高精度的延时函数,这一点非常重要,如果延时函数精度不高,那么数据基本上读不正确。来看一下读取温湿度过程的一个完整时序图。