在树莓派上读取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-树莓派pin7(gpio4))
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_retry(11, 4) print ('Temp: {0:0.1f} C Humidity: {1:0.1f} %'.format(temperature, humidity))
然后点运行就可以了
这是运行结果
代码解释:
(1)Adafruit_DHT.read_retry(11, 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} %'.format(temperature, humidity)
^
SyntaxError: invalid syntax
这句话的意思是python代码有问题,但当时的我找了好久也没有发现哪有问题。后来才发现我的python代码是这样的“print 'Temp: {0:0.1f} C Humidity: {1:0.1f} %'.format(temperature, 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
在树莓派上读取DHT11温湿度传感器-python代码实现及常见问题(全面简单易懂)的更多相关文章
- STC15系列通用-STC15F2K60S2/STCW4K32S4读取DHT11温湿度传感器数据串口输出代码实例工程免费下载
//为了方便大家调试,另附程序工程共大家下载,下载地址:https://www.90pan.com/b1908750 //************************** //程序说明:stc ...
- Arduino和C51开发DHT11温湿度传感器
技术:51单片机.Arduino.DHT11.温湿度传感器.传感器 概述 学习单片机离不开对传感器的学习,本文主要介绍DHT11温湿度传感器的使用方法,同学也可以了解更多的传感器,这对你以后开发产 ...
- DHT11温湿度传感器编程思路以及代码的实现(转载)
源自:https://blog.csdn.net/qq_34952376/article/details/81193938 在我们刚开始进入单片机的学习中,练习写传感器的时序是必不可少的,其实我比较推 ...
- 在树莓派上读取土壤湿度传感器读书-python代码实现及常见问题(全面简单易懂)
本篇文章简单介绍了如何在树莓派上配置土壤湿度传感器以读取土壤湿度(以百分比的形式出现)及代码实现. 主要包含有以下4个模块: 一.土壤湿度传感器常见类型及介绍 二.实验所需设备 三.设备连线方式与代码 ...
- 树莓派连接DHT11温湿度传感器(python)
介绍 DHT11作为一个廉价配件,同时包含了温度.湿度传感器,而且,编码使用也非常简单. 本文介绍如果在树莓派中使用 DHT11,代码是Python.如果有任何疑问,欢迎在下面留言. 接线 VCC接5 ...
- 树莓派使用DHT11温湿度传感器
一.相关介绍 DHT11介绍: DHT11是一款比较便宜的温湿度传感器模块.读取数据只需要占用一个IO口.能够同时测量温度和相对湿度. DHT11的数据手册可以看这里:http://wenku.bai ...
- DHT11温湿度传感器模块使用方法和驱动代码实现
DHT11模块简介 DHT11是一款价格便宜,易于使用的温度湿度测量二合一传感器.它具有超小体积.极低功耗的特点.它使用单根总线与单片机进行双向的串行数据传输,信号传输距离可达20米以上.非常适用于对 ...
- STM32驱动DHT11温湿度传感器
DHT11 是一款湿温度一体化的数字传感器.该传感器包括一个电阻式测湿元件和一个 NTC 测温元件,并与一个高性能 8 位单片机相连接.通过单片机等微处理器简单的电路连接就能够 实时的采集本地湿度和温 ...
- 玩转X-CTR100 l STM32F4 l DHT11温湿度传感器
我造轮子,你造车,创客一起造起来!塔克创新资讯[塔克社区 www.xtark.cn ][塔克博客 www.cnblogs.com/xtark/ ] DHT11数字温湿度传感器是一款含有已校准数字信号输 ...
随机推荐
- 面试官,别问我DNS了,也就这些!
提到网络,基本上都能把DNS给扯上去.为啥呢,今天我们来一探究竟. 1 Chrome浏览器原理 还记得面试过程中被问了千百遍的"输入URL后发生了什么"这个经典问题吗,因为这个问题 ...
- angularjs 指令传参规则
angularjs 指令传参规则 xx-,data- 驼峰
- CSS 风车(花瓣)旋转动画圆角
这是一个综合的案例,用到了transition(动画,动作在单位时间内完成),transform(旋转),border-radius(圆角),absolute(定位),linear-gradient( ...
- Yii Framework 漏洞整理
一 Yii Framework 2.0.9 - Cross Site ScriptingPublished # Exploit Title: Yii Framework 2.0.9 - Cross S ...
- Jmeter(七) - 从入门到精通 - 建立数据库测试计划实战<MySQL数据库>(详解教程)
1.简介 在实际工作中,我们经常会听到数据库的性能和稳定性等等,这些有时候也需要测试工程师去评估和测试,上一篇文章宏哥主要介绍了jmeter连接和创建数据库测试计划的过程,宏哥在文中通过示例和代码非常 ...
- Java实现 蓝桥杯 算法训练 删除数组零元素
算法训练 删除数组零元素 时间限制:1.0s 内存限制:512.0MB 提交此题 从键盘读入n个整数放入数组中,编写函数CompactIntegers,删除数组中所有值为0的元素,其后元素向数组首端移 ...
- Java实现 LeetCode 468 验证IP地址
468. 验证IP地址 编写一个函数来验证输入的字符串是否是有效的 IPv4 或 IPv6 地址. IPv4 地址由十进制数和点来表示,每个地址包含4个十进制数,其范围为 0 - 255, 用(&qu ...
- Java实现 LeetCode 467 环绕字符串中唯一的子字符串
467. 环绕字符串中唯一的子字符串 把字符串 s 看作是"abcdefghijklmnopqrstuvwxyz"的无限环绕字符串,所以 s 看起来是这样的:"-zabc ...
- Java实现 LeetCode 434 字符串中的单词数
434. 字符串中的单词数 统计字符串中的单词个数,这里的单词指的是连续的不是空格的字符. 请注意,你可以假定字符串里不包括任何不可打印的字符. 示例: 输入: "Hello, my nam ...
- Java实现 LeetCode 215. 数组中的第K个最大元素
215. 数组中的第K个最大元素 在未排序的数组中找到第 k 个最大的元素.请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素. 示例 1: 输入: [3,2,1,5,6 ...