之前买了DHT11的温湿度传感器,想用在.NET MF开发板上的,但是一看说明书发现这个玩意儿对时序要求非常高,所以想要用C#来获取数据基本不可能,必须试用C,C++来底层完成托管代码封装,供上层的C#调用,鉴于本人没有任何嵌入式硬件编程经验,所以这个传感器一直没有利用起来,前阵子叶帆老大研究了一下把这个封装工作搞定了,高手出马果然不一样啊,先看看老大的博文吧
【STM32 .Net MF开发板学习-19】DHT11温湿度传感器通信(上)
【STM32 .Net MF开发板学习-23】DHT11温湿度传感器通信(下)
而我就是建立在老大这个巨人的肩膀上开始研究, 呵呵
看看貌似很简单,完全按照老大的接法,但是接上温湿度传感器,连上3.3V,接地,信号线发现输出始终为
开始排查问题,首先怀疑是传感器坏了,幸好之前买的时候一气买了四个,换上其他的三个发现还是没有输出。我再思考,看看接线是否有问题,一查说明书,果然正面背面搞反了,封装信息如下
DHT11引脚说明
Pin | 名称 | 注释 |
1 | VDD | 供电 3-5.5VDC |
2 | DATA | 串行数据,单总线 |
3 | NC | 空脚,请悬空 |
4 | GND | 接地,电源负极 |
换好正确的位置,继续测试发现还是没有输出,这下急了,不会是接错烧了吧
看到老大博文中有这么一段
T2、T3、T4、T5四个时钟的四个通道都可以连接DHT11模块,进行数据采集,其和Pin脚的对应关系如下:
| 通道1 | 通道2 | 通道3 | 通道4 |
Timer2 | PA0 | PA1 | PA2 | PA3 |
Timer3 | PA6 | PA7 | PB0 | PB1 |
Timer4 | PB6 | PB7* | PB8* | PB9 |
Timer5 | PA0 | PA1 | PA2 | PA3 |
注:以上信息,可以通过查原理图获知,其中带“*”的管脚实际测试未能成功获取数据。
继续思考,有些未能成功获取数据,那我板子上是不是也会出现这个问题?于是换Timer3的通道2,没有数据。。。换Timer2的通道1,果然有数据了,兴奋啊,上个图吧
我使用的是面包板接线,方便,呵呵
通过试验发现了三个问题:
1、这个温湿度传感器个体差异比较大,我来回换个四个发现差异还是挺大的,就算单个也不是很稳定,变化比较大的
2、把传感器拆了,输出还是维持最后一次读到的数据,这个应该是底层代码哪里的bug咯
3、老大那边有些通道能取到数据的在我这取不到,不知道是不是啥干扰造成的