【Raspberry Pi】DHT11 溫度濕度傳感器數據讀取


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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM