时序图参考厂家说明书:DHT11数字湿温度传感器的原理和应用范例
四个阵脚连接:VCC接3.3伏电源,Dout接GPIO口,我接的是物理12针脚,NC留空,GND接地。
波折1:电阻被错接进了VCC,于是看了无数遍时序图,改了无数遍的驱动无论怎么改都是读不出数据。
波折2:偶然看了网上的DHT11上拉电阻电路图才发现错误,于是果断去掉电阻。但为了显示传感器工作正常在电源和VCC间接了个发光二极管进去,数据倒是读出来了,但各种错误。(原因不明)
去掉了电阻,去掉了led,优化了写的python,读数正常。再一次赞一个python。
写DHT11的驱动需要注意时序之间很紧密,python执行任何程序都要花费时间,在获取时序时需要注意所写调试用的代码也是占用时序的,在这一点上也走了一点弯路。
# -*- coding: utf-8 -*- """ Created on Sun Jan 26 14:24:43 2014 @author: pi """ import RPi.GPIO as gpio import time gpio.setwarnings(False) gpio.setmode(gpio.BOARD) time.sleep(1) data=[] def delay(i): #20*i usdelay a=0 for j in range(i): a+1 j=0 #start work gpio.setup(12,gpio.OUT) #gpio.output(12,gpio.HIGH) #delay(10) gpio.output(12,gpio.LOW) time.sleep(0.02) gpio.output(12,gpio.HIGH) i=1 i=1 #wait to response gpio.setup(12,gpio.IN) while gpio.input(12)==1: continue while gpio.input(12)==0: continue while gpio.input(12)==1: continue #get data while j<40: k=0 while gpio.input(12)==0: continue while gpio.input(12)==1: k+=1 if k>100:break if k<3: data.append(0) else: data.append(1) j+=1 print "Sensor is working" #get temperature humidity_bit=data[0:8] humidity_point_bit=data[8:16] temperature_bit=data[16:24] temperature_point_bit=data[24:32] check_bit=data[32:40] humidity=0 humidity_point=0 temperature=0 temperature_point=0 check=0 for i in range(8): humidity+=humidity_bit[i]*2**(7-i) humidity_point+=humidity_point_bit[i]*2**(7-i) temperature+=temperature_bit[i]*2**(7-i) temperature_point+=temperature_point_bit[i]*2**(7-i) check+=check_bit[i]*2**(7-i) tmp=humidity+humidity_point+temperature+temperature_point if check==tmp: print "temperature is ", temperature,"wet is ",humidity,"%" else: print "something is worong the humidity,humidity_point,temperature,temperature_point,check is",humidity,humidity_point,temperature,temperature_point,check
测试python程序时间代码
# -*- coding: utf-8 -*- """ Created on Sun Jan 26 16:01:59 2014 @author: pi """ import time def delay(i): k=0 for j in range(i): k+=1 n=5000 j=0 a=time.time() i=1 c=time.time() d=c-a print d a=time.time() for i in range(n): j+=1 c=time.time() d=c-a print d a=time.time() delay(n) c=time.time() d=c-a print d
#get data
while j100:break
if k<3:
这个地方是不是有点问题。。
已经修改好,多谢提醒
作者好,我运行该代码时,一直会报CRC不对,是不是时间的问题?我测试时间的结果如下:
root@raspberrypi:/home/pi/sensor# python testTime.py
1.69277191162e-05
0.0209360122681
0.00726008415222
我的RPi是B+,从上面的数据看执行一次i=1,大约是17us,两次就是34us应该是在主机高电平20~40us的要求内,问题大概出现在哪呢?
多谢!
没有遇到过楼上的情况。或者不用Python先,用这个文章介绍的C语言实现试试看看
http://blog.csdn.net/liang890319/article/details/8739683
C 的程序是调通了,但是每次的结果都不一样,主要是温度的误差较大,三次温度的结果分别是24,5,20,但是现在室内不可能有20°的,这款传感器的可靠吗?
很好用的程序,只要对运行时间做点测试和调整就好了,用了之后感觉必须回来赞一个
代码没注释,差评