树莓派从 DHT11 温度湿度传感器读取数据

DHT11_Pins

时序图参考厂家说明书: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 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程序时间代码

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

转载于:https://www.cnblogs.com/Pond-ZZC/p/6680463.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值