在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)

最近由于自己的课题需要,想要用在树莓派上使用DHT11温湿度传感器来读取空气中温湿度,遇到了几个问题,解决之后也对之前的知识进行了回顾,总结,特整理如下,希望能给也在学习树莓派的小伙伴们带来一些帮助。总的来说操作很简单,但很容易出现细节方面的问题,我也把我遇到的问题进行了简单整理,如果有其他问题可以直接在评论区提出,我看到了就会回答。文章有什么用词不当或表述不清的问题(由于研究生在海外读,所以用英语较多,很多硬件的术语可能并不专业,抱歉啦~),期待大家在评论区为我批评指正。本篇文章纯手打,如需转载,请注明出处,感谢。

本篇文章主要对DHT11进行了简单梳理,主要分为四大模块,分别为:

一、DHT11温湿度传感器

二、实验所需设备与连线方式

三、Python代码实现

四、常见问题

对哪个模块感兴趣也直接翻到相应部分阅读即可。

一、DHT11温湿度传感器

DHT11温湿度传感器是一个性能很棒的模块,它提供温度和湿度读数。价格低廉,精准度高使用简单,并且有python库可以直接导入使用,应用也很广泛,在远程气象站、土壤监测器和家庭自动化系统都可以看见它的身影。 

在日常工作学习中,我们接触到的DHT11主要有两种形式。一种是三引脚的焊有PCB的模块,另一款是是四引脚的独立模块。如下图所示:

第一种传感器从左到右分别是信号引脚,VCC引脚(连接电源正极),ground接地引脚(连接电源负极)。需要注意的是,关于三引脚传感器,不同厂商的传感器引脚的顺序可能不同,大家在连接之前需要看准传感器上标的符号来进行判断,比如我的传感器就是这样的,从左到右的第一个引脚(+)是连接电源正极的。

二、实验所需设备与连线方式

(一)实验所需设备

1. DHT11 温室度传感器

2. 树莓派 3 B+/树莓派 4 B

3. 三根杜邦线(母对母)

(二)DHT11与树莓派连线方式

根据DHT11传感器两种形式不同,连线不太相同,却也大同小异。你有哪一种都可以,按照

此处的连线与后面的代码相关,第一次直接按照图示方式连接即可。

1.三针引脚DHT11温湿度传感器与树莓派的连接方式(我也把树莓派的引脚功能图放到下方了,不熟悉树莓派引脚功能的同学可以直接在本页面进行比对查看。)

2.四针引脚DHT11温湿度传感器与树莓派的连接方式

 

注意:

1.一定要看好传感器引脚的顺序再进行连接。(vcc-树莓派pin2,ground-树莓派pin6,signal-树莓派pin7gpio4))

2.关于传感器引脚的连接是很随意的,vcc只要连接的是树莓派上标有“5v”标识的引脚(pin2或pin4),ground连接树莓派上标有“GND”标识的引脚(pin6,pin9,pin14,pin25,pin30,pin39),signal连接任意标有“GPIO”的引脚,但最后连接pin7,这样后面的代码直接复制粘贴的即可,建议第一次连接的同学直接按照我的方式连接即可,避免后期不必要的错误。

三、Python代码实现

就我而言,在树莓派的编程中我使用Python较多,代码简单,易懂,也有很多现成的库可供使用,拿本次的DHT11来说,可以直接导入Adafruit DHT11库,最后写出的代码也就只有几行。在写代码之前,先把python和Adafruit DHT11库下载下来。

sudo apt-get install git-core

git clone https://github.com/adafruit/Adafruit_Python_DHT.git

cd Adafruit_Python_DHT

sudo apt-get install build-essential python-dev

sudo python3 setup.py install

1.sudo apt-get install git-core

(注意:如果下载失败,则先运行sudo apt-get update并且再试一遍,其实不管下载什么,都可以先update到最新) 

2.安装Adafruit DHT11库

(1)下载库: git clone https://github.com/adafruit/Adafruit_Python_DHT.git

(2)使用cd命令进到 Adafruit_Python_DHT文件夹: cd Adafruit_Python_DHT

(3)sudo apt-get install build-essential python-dev

(4)下载python3:sudo python3 setup.py install

新建py文件

#!/usr/bin/python
import sys
import Adafruit_DHT

while True:

humidity,temperature = Adafruit_DHT.read_retry11, 4)

print 'Temp: {0:0.1f} C Humidity: {1:0.1f} %'.formattemperature, humidity))

然后点运行就可以了

这是运行结果

代码解释:

(1)Adafruit_DHT.read_retry11, 4)中的“11”代表你使用的是DHT11传感器,如果你使用的是DHT22传感器,则把数字改成“22”即可。数字“4”代表你的信号引脚连接的是gpio4所在的引脚,而不是“pin4”哦,这点要注意,如果你不想使用这个引脚,在连线方式改变的同时,改变这个数字接口。

(2)输出的温度以摄氏度为单位,相对湿度是以百分比的形式呈现。

(3)在shell框中会连续不断的输出温度和相对湿度,暂停点击右上角的stop即可。

四、 常见问题:

其实整个过程下来,连线方式或者代码的编写都是没有多大难度的,但是细节的问题一旦忽视,就会报错。结合其他网友的经验和我自己的问题总结如下。

(一)报错:

TypeError: unsupported format string passed to NoneType.__format__(这种情况一般是先没有读数,等一会后出现这个错误。这个是我一直以来最常见的报错,一开始出现的时候根本没有头脑,后来才发现是因为造成这个报错的原因比较多)

1. 杜邦线与树莓派的连线问题。连线没有插紧、线序有问题、线有损坏、代码对应信号引脚的数字有问题、没有查到树莓派5v电 源引脚上(树莓派与传感器的连接方式最好使用树莓派5v,电源,存在使用3.3v电源最后得到到数值的情况)

2. 传感器有问题(我上次的那个传感器有问题竟然也报错了,具体什么错我也记不清楚了,费半天劲一直查看代码排错,结果发现换了个传感器就好了,哭晕)

3. 电源问题(我这里是指树莓派引脚,在使用5V引脚和接地引脚给传感器供电时)

明明引脚分配没问题,也插在了树莓派5v电源引脚上还是报错,可能是你的树莓派上插了其他设备影响到供电了(我上次是插了一个用来控制水泵的继电器)。解决方法是接一个外接电源,保证电源电压的稳定。

(二)报错:

Traceback most recent call last):
File “/home/pi/Desktop/temp.py”, line 9
print ‘Temp: {0:0.1f} C Humidity: {1:0.1f} %’.formattemperature, humidity)
^
SyntaxError: invalid syntax

这句话的意思是python代码有问题,但当时的我找了好久也没有发现哪有问题。后来才发现我的python代码是这样的“print ‘Temp: {0:0.1f} C Humidity: {1:0.1f} %’.formattemperature, humidity)”,这在python3中是错误的语句格式,必须加上括号, 找了好久才发现是这个问题。

(三)报错:ModuleNotFoundError: No module named ‘Adafruit_DHT

“import Adafruit_DHT ”语句错误,提示找不到Adafruit_DHT模块,但是在terminal里输入“import Adafruit_DHT”不报错,并且已经下载了相关库。可能是你的python版本有问题,可以是python2,但使用的是python3。是否是之前的命令行“sudo python3 setup.py install”写错了,写成“sudo python setup.py install”从而下载的是python2了

部分图片来源于网络,侵删。

最后祝大家都玩派顺利~~

2020-06-09 12:46:38

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注