# encoding=utf-8
# power by : funco_小風
import rpi.gpio as gpio
import time
# 延時函式
def delay(i):
while i:
i -= 1
# 初始化dht11連線引腳
# dht11_pin - dht11連線的引腳號
def init_dht11(dht11_pin):
# 輸出模式 初始狀態給高電平
gpio.setup(dht11_pin, gpio.out)
gpio.output(dht11_pin, 1)
# 用於獲取
# dht11_pin - dht11連線的引腳號
# 返回二元組 [ 濕度 , 溫度 ]
def get_dht11(dht11_pin):
buff=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
gpio.output(dht11_pin,0)
time.sleep(0.02) # 拉低20ms
gpio.output(dht11_pin,1)
gpio.setup(dht11_pin,gpio.in) # 這裡需要拉高20-40us,但更改模式需要50us,因此不呼叫延時
while not gpio.input(dht11_pin): # 檢測返回訊號 檢測到啟示訊號的高電平結束
pass
while gpio.input(dht11_pin): # 檢測到啟示訊號的高電平則迴圈
pass
i=40
while i:
start=time.time()*1000000 # 為了嚴格時序 迴圈開始便計時
i-=1
while not gpio.input(dht11_pin):
pass
while gpio.input(dht11_pin):
pass
buff[i]=time.time()*1000000-start# 為了嚴格時序 每次測得資料後都不馬上處理 先儲存
gpio.setup(dht11_pin,gpio.out) # 讀取結束 復位引腳
gpio.output(dht11_pin,1)
# print "buff - ",buff
# 開始處理資料
for i in range(len(buff)): # 將時間轉換為 0 1
if buff[i]>100: # 上方測試時是測試整個位的時間
# 因此是與100比較 大於100為1(位週期中 低電平50us)
buff[i]=1
else:
buff[i]=0
# print "after - ",buff
i=40
hum_int=0
while i>32: # 濕度整數部分
i-=1
hum_int<<=1
hum_int+=buff[i]
# print "hum - ",hum_int
tmp_int=0
i=24
while i>16: # 溫度整數部分
i-=1
tmp_int<<=1
tmp_int+=buff[i]
# print "tmp - ",tmp_int
return [hum_int,tmp_int]
gpio.setmode(gpio.board)
init_dht11(7)
print get_dht11(7)
gpio.cleanup()
# 注意
# 若非連續測量 可以不延時 但連續測量時建議每次測量間間隔0.2s以上再呼叫get_dht11(dht11_pin)獲取資料(樹莓派不穩定)
# dht11雖然有40位 實際溫度和濕度的小數部分讀數總為0
# 如果程式無法正常讀取,可以考慮是否起始部分的延時不準確,可以參考注釋以及實際環境的測量結果調整延時
# 程式測試環境為 $樹莓派3代b+$ $python2.7.9 $raspbian gnu/linux 8$
樹莓派3b驅動dht11溫濕度感測器
touch dht11.c sudo vim dht11.c include include include include define max time 85 define dht11pin 7 define attempts 5 retry 5 times when no response i...
樹莓派 溫濕度 DH11
最近在學習python,最近也買了塊樹莓派 raspberry 3 b 講不清是為了學習python而買的pi,還是為了鼓搗pi而去學習python。昨天晚上按照教程自己搭建了乙個溫濕度測試平台,主要也是在網上找的,我沒有仔細去看dh11的原理,大概和ds18b20是乙個套路吧。先能把 跑起來,再返...
樹莓派python學習篇(一)溫濕度感測器
二 dht11 python 16 感測器輸出口接bcm模式 gpio16 data j 0 gpio.setmode gpio.bcm time.sleep 1 mcu向dct發射啟動訊號 gpio.setup channel,gpio.out gpio.output channel,gpio.l...