时序图参考厂家说明书:DHT11数字湿温度传感器的原理和应用范例
四个阵脚连接:VCC接3.3伏电源,Dout接GPIO口,我接的是物理12针脚,NC留空,GND接地。
波折1:电阻被错接进了VCC,于是看了无数遍时序图,改了无数遍的驱动无论怎么改都是读不出数据。
波折2:偶然看了网上的DHT11上拉电阻电路图才发现错误,于是果断去掉电阻。但为了显示传感器工作正常在电源和VCC间接了个发光二极管进去,数据倒是读出来了,但各种错误。(原因不明)
去掉了电阻,去掉了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 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程序时间代码
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 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 |