DHT11 温湿度传感器尽管不是使用效率最高的温湿度传感器,但价格便宜被广泛应用。之前我们介绍了用树莓派从 DHT11 温度湿度传感器读取数据的教程,其原理理解起来较为复杂,下面我们介绍另一种基于Adafruit DHT 库读取 DHT11 数据的方法。
DHT11 规格
DHT11 有四个引脚,但是其中一个没有被使用到。所有有的模块会简化成3个引脚。
- 湿度检测范围 : 20-80% (5% 精度)
- 温度检测范围 : 0-50°C (±2°C 精度)
该厂商不建议读取频率小于2秒,如果这么做数据可能会有误。
硬件连接
需要在电源和数据脚之间串联一个上拉电阻(4.7K-10K),通常情况下,购买DHT11模块的话都自带了这个电阻。不同的模块型号引脚位置略有不同,下面以图上模块为说明:
DHT Pin | Signal | Pi Pin |
1 | 3.3V | 1 |
2 | Data/Out | 11 (GPIO17) |
3 | not used | – |
4 | Ground | 6 or 9 |
数据引脚可以根据你的需要自行修改。
Python 库
DHT11 的读取需要遵循特定的信号协议完成,为了方便我们使用Adafruit DHT 库。
软件安装
开始之前需要更新软件包:
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 17
这两个参数分别表示 DHT11 和数据引脚所接的树莓派 GPIO 编号。成功的话会输出:
Temp=22.0* Humidity=68.0%
如何在其他 Python 程序中使用这个库
参照下面的方法引入 Adafruit 库,然后就可以使用 “read_retry” 方法来读取 DHT11 的数据了:
import Adafruit_DHT # Set sensor type : Options are DHT11,DHT22 or AM2302 sensor=Adafruit_DHT.DHT11 # Set GPIO sensor is connected to gpio=17 # 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!')
另外,温度传感器还有 DS18B20,这个传感器虽然没有湿度数据,但是其易用且稳定,有兴趣的朋友可以进一步阅读以下两个教程:
Adafruit的树莓派教程:DS18B20温度传感器
树莓派 SAKS 扩展板实用应用 之 数字温度计
找遍全网 终于找到用库的了 谢谢作者~~~
这个PYTHON 2.7 可以用不
读不到数据根本
我的DATA接的时BCM的17,为什么读取失败呢 显示:Failed to get reading. Try again!
请问你问题解决了嘛?我也碰到了这个错误
为什么我显示的是Failed to get reading. Try again! 我用的是树莓派4B
这个库已经停止更新了,很大概率读错、读不出来。
无法读取
这个库好像只支持到树莓派3
请问,这个传感器可以测泥土湿度吗
树莓派 4B使用这个例程 出现这个错误求大神指引
ValueError: Pin must be a valid GPIO identifier like P9_12 or GPIO1_28
请问这个问题是如何解决的,可以透露嘛
Adafruit这个有可以替代的库吗?PI4有跟新支持吗?
在sudo python setup.py install之前,把增加对BCM2711的支持,Adafruit_DHT/platform_detect.py的末尾部分:
elif match.group(1) == ‘BCM2711’:
return 3
再进行install
楼上牛的
zhb大哥真的牛