時序圖參考廠家說明書: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
