樹莓派從 DHT11 溫度溼度傳感器讀取數據

DHT11_Pins

時序圖參考廠家說明書:DHT11數字溼溫度傳感器的原理和應用範例html

四個陣腳鏈接:VCC接3.3伏電源,Dout接GPIO口,我接的是物理12針腳,NC留空,GND接地。python

波折1:電阻被錯接進了VCC,因而看了無數遍時序圖,改了無數遍的驅動不管怎麼改都是讀不出數據。app

波折2:偶然看了網上的DHT11上拉電阻電路圖才發現錯誤,因而果斷去掉電阻。但爲了顯示傳感器工做正常在電源和VCC間接了個發光二極管進去,數據卻是讀出來了,但各類錯誤。(緣由不明)post

去掉了電阻,去掉了led,優化了寫的python,讀數正常。再一次贊一個python。測試

寫DHT11的驅動須要注意時序之間很緊密,python執行任何程序都要花費時間,在獲取時序時須要注意所寫調試用的代碼也是佔用時序的,在這一點上也走了一點彎路。優化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# -*- 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 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 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程序時間代碼spa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# -*- coding: utf-8 -*-
"""
Created on Sun Jan 26 16:01:59 2014
 
@author: pi
"""
 
import time
def delay(i):
     k = 0
     for 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 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

via調試

本文來自: 樹莓派實驗室
連接地址: http://shumeipai.nxez.com/2014/10/10/raspberry-dht11-get-temperature-data.html
相關文章
相關標籤/搜索