樹莓派3 B 讀取溫濕度感測器DHT11

2021-07-30 15:51:47 字數 2170 閱讀 6578

# 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...