树莓Pi如何控制温湿度传感器DHT11?针对这个问题,本文详细介绍了相应的分析和解决方法,希望能帮助更多想要解决这个问题的朋友找到更简单易行的方法。
小在几次断电前都没有关闭系统,导致系统总是起不来。我不得不重写SD卡。安装后,前天晚上,一个温湿度传感器(DHT11)连接到小上,数据顺利读出。废话少说,言归正传:
首先简单介绍一下DHT11:
DHT11是一款温湿度传感器,分为三个接口:VCC、数据、GND。
引脚编号名称类型描述1VCC电源电平,输入3V-5.5V2DATA数据输出引脚3GND接地引脚带图片的DHT11:
DHT11手册200808修订版。可移植文档格式文件的扩展名(portable document format的缩写)
根据在线读数,需要在DHT11VCC和DATA之间增加一个电阻,测试后完全没有必要。
引脚连接:
关于第二代树莓派的图钉,请阅读之前的Blog:树莓派控制主动蜂鸣器。
将VCC连接到3V3,您可以选择1个端口或17个端口。
DATA连接到GPIO端口,我选择了GPIO4,端口7。
GND连接到接地端口。我选择了第14个港口。
用Python获取温度和湿度:
一个
2
三
四
五
六
七
八
九
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
四十二
43
四十四
45
46
47
48
四十九
50
51
五十二
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
六十八
69 #!/usr/bin/python
importRPi。GPIOasGPIO
进口时间
通道=4//GPIO4
数据=[]
j=0
GPIO.setmode(GPIO。BCM)
睡眠时间(1)
GPIO.setup(通道,GPIO。输出)
GPIO.output(通道,GPIO。低)
睡眠时间(0.02)
GPIO.output(通道,GPIO。高)
GPIO.setup(通道,GPIO。输入)
whileGPIO.input(通道)=GPIO。LOW:
继续
whileGPIO.input(通道)=GPIO。HIGH:
继续
whilej40:
k=0
whileGPIO.input(通道)=GPIO。LOW:
继续
whileGPIO.input(通道)=GPIO。HIGH:
k=1
ifnb
sp;k > 100:
break
if k < 8:
data.append(0)
else:
data.append(1)
j += 1
print "sensor is working."
print data
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 :", temperature, "*C, humidity :", humidity, "%"
else:
print "wrong"
print "temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp
GPIO.cleanup()
展示结果:
1 2 3 4 |
root@raspberrypi:/data/basedata# python/dht11.py sensor is working. [0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0] temperature : 20 *C, humidity : 38 % |
为了测试结果是否准确,我把手指放到传感器上,测试的数据为:
1 2 3 4 5 |
root@raspberrypi:/data/basedata/python# python dht11.py sensor is working. [0, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 1, 1, 1] wrong temperature : 36 *C, humidity : 38 % |
确认正确~
备注: 如果你用的是DS18B20
,需要做以下动作:
1 2 3 4 5 6 7 |
root@raspberrypi:/# apt-get update root@raspberrypi:/# apt-get upgrade #更新内核 root@raspberrypi:/# reboot root@raspberrypi:/# vi /boot/config.txt #在最后一行手动添加:dtoverlay=w1-gpio-pullup,gpiopin=4 来支持新系统读取w1总线设备 root@raspberrypi:/# modprobe w1-gpio #确认设备是否生效 root@raspberrypi:/# modprobe w1-therm root@raspberrypi:/# cd /sys/bus/w1/devices/ |
关于树莓派如何控制温湿度传感器DHT11问题的解答就分享到这里了,希望
内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/105880.html