概述
文章目录
- 一、简介
- 二、硬件准备
- 1、DHT11温湿度传感器
- 2、树莓派4B
- 三、软件准备
- Thonny
- 四、程序设计
- 1、使用 Adafruit 读取 DHT11 温湿度传感器
- ①、软件安装
- ②、使用示例程序
- ③、使用Adafruit 库的自定义Python程序
- ④、实现实时循环显示温湿度的自定义python程序
- 2、使用GPIO读取 DHT11 温湿度传感器
- 3、遇到的问题
- ①、树莓派4B使用Adafruit_DHT不能正确显示温度
一、简介
为了熟悉树莓派的GPIO操作,而找的一个小案例,出现了一些问题,最近才解决,故记录之。
二、硬件准备
1、DHT11温湿度传感器
现在市面是卖的DHT11引脚有三脚、四脚之分,因为有一脚是空脚,所以其实都是一样用的,我购买的就是三脚。
2、树莓派4B
扩展接口:
引脚接线:(当前接线是随意的,只要记住DATA的位置还有正负极别插反就可以了)
- VCC - Pin1
- DATA - Pin3
- GND - Pin6
三、软件准备
Thonny
使用的是系统自带的Python IDE
四、程序设计
1、使用 Adafruit 读取 DHT11 温湿度传感器
①、软件安装
开始之前需要更新软件包:
sudo apt-get update
sudo apt-get install build-essential python-dev
从 GitHub 获取 Adafruit 库:
sudo git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
给 Python 2 和 Python 3 安装该库:
sudo python setup.py install
sudo python3 setup.py install
②、使用示例程序
示例程序
Adafruit 提供了示例程序,运行下面的命令测试。
cd ~
cd Adafruit_Python_DHT
cd examples
python AdafruitDHT.py 11 2
③、使用Adafruit 库的自定义Python程序
当然也可以在自己创建的 Python 程序中使用这个库来实现调用
import Adafruit_DHT
# Set sensor type : Options are DHT11,DHT22 or AM2302
sensor=Adafruit_DHT.DHT11
# Set GPIO sensor is connected to
gpio=2
# Use read_retry method. This will retry up to 15 times to
# get a sensor reading (waiting 2 seconds between each retry).
humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)
# Reading the DHT11 is very sensitive to timings and occasionally
# the Pi might fail to get a valid reading. So check if readings are valid.
if humidity is not None and temperature is not None:
print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temperature, humidity))
else:
print('Failed to get reading. Try again!')
④、实现实时循环显示温湿度的自定义python程序
#!/usr/bin/python
# *-*- coding:utf-8 -*-*
import Adafruit_DHT
class DHT11:
def DHT11_Read(self):
sensor = Adafruit_DHT.DHT11
gpio = 2
humidity, temperature = Adafruit_DHT.read_retry(sensor, gpio)
return humidity,temperature
if __name__ == '__main__':
float humid,temp
dht11 = DHT11()
while True:
humid,temp=dht11.DHT11_Read()
if humid is not None and temp is not None:
print('Temp={0:0.1f}*C Humidity={1:0.1f}%'.format(temp, humid))
else:
print('Failed to get reading. Try again!')
2、使用GPIO读取 DHT11 温湿度传感器
import RPi.GPIO as GPIO
import time
channel =2 # 上文提到的GPIO编号
data = []
j = 0
GPIO.setmode(GPIO.BCM)
time.sleep(1)
GPIO.setup(channel, GPIO.OUT)
GPIO.output(channel, GPIO.LOW)
time.sleep(0.02)
GPIO.output(channel, GPIO.HIGH)
GPIO.setup(channel, GPIO.IN)
while GPIO.input(channel) == GPIO.LOW:
continue
while GPIO.input(channel) == GPIO.HIGH:
continue
while j < 40:
k = 0
while GPIO.input(channel) == GPIO.LOW:
continue
while GPIO.input(channel) == GPIO.HIGH:
k += 1
if k > 100:
break
if k < 8:
data.append(0)
else:
data.append(1)
j += 1
print ("sensor is working.")
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, "%")
res='{value:%f}'% temperature
import json
with open('/home/pi/Desktop/data.txt', 'a') as outfile:
json.dump(res, outfile)
outest=open('/home/pi/Desktop/data.txt','a')
outest.write(res)
outest.close
print(res)
else:
print ("wrong")
GPIO.cleanup()
按理说应该是没什么问题,但是始终显示不了结果,温湿度均显示255,数据位没有派上用场,欢迎懂行的朋友给予解答。
3、遇到的问题
①、树莓派4B使用Adafruit_DHT不能正确显示温度
这是因为下载的Adafruit_DHT驱动未支持4b处理器BCM2711,我们需要自己手动打开/home/pi/Adafruit_Python_DHT/Adafruit_DHT/platform_detect.py
,并在红圈位置添加以下代码。
elif match.group(1) == 'BCM2711':
# Pi 4b
return 3
然后退回到Adafruit_Python_DHT
目录,重新安装Adafruit Python DHT Sensor函数库,再次运行示例程序即可显示正确温湿度。
cd Adafruit_Python_DHT/
sudo python setup.py install
最后
以上就是畅快白开水为你收集整理的树莓派与DHT11温度传感器的那些事儿一、简介二、硬件准备三、软件准备四、程序设计的全部内容,希望文章能够帮你解决树莓派与DHT11温度传感器的那些事儿一、简介二、硬件准备三、软件准备四、程序设计所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复