如何将DHT11与树莓派连接在16x2 LCD屏幕上显示温度和湿度的值

描述

温度和湿度是在任何环境中被监控的最常见参数。有大量的传感器可供选择来测量温度和湿度,但最常用的是DHT11,因为它具有不错的测量范围和精度。它还可以与单引脚通信配合使用,因此非常容易与微控制器或微处理器连接。在本教程中,我们将学习如何将流行的DHT11传感器与Raspberry Pi连接,并在16x2 LCD屏幕上显示温度和湿度的值。

DHT11传感器概述:

DHT11传感器可以测量具有以下规格的相对湿度和温度

Temperature Range: 0-50°C

Temperature Accuracy: ±2 °C

Humidity Range: 20-90% RH

Humidity Accuracy: ±5 %

DHT11

DHT11传感器有模块形式或传感器形式。在本教程中,我们使用传感器的模块形式,两者之间的唯一区别是,在模块形式中,传感器有一个滤波电容器和一个连接到传感器输出引脚的上拉电阻。因此,如果您单独使用传感器,请确保添加这两个组件。

DHT11传感器的工作原理:

DHT11传感器配有蓝色或白色外壳。在这个外壳内,我们有两个重要的组件,可以帮助我们感知相对湿度和温度。第一个组件是一对电极;这两个电极之间的电阻由保湿基板决定。因此,测得的电阻与环境的相对湿度成反比。相对湿度越高,电阻值越低,反之亦然。另请注意,相对湿度与实际湿度不同。相对湿度测量空气中的含水量相对于空气中的温度。

另一个元件是表面贴装的NTC热敏电阻。术语NTC代表负温度系数,温度升高时电阻值将减小

先决条件:

假设您的树莓派已经使用操作系统刷新并能够连接到互联网。如果没有,请先按照树莓派入门教程进行操作,然后再继续。

还假设您可以通过终端窗口或其他应用程序访问您的 pi,通过这些应用程序您可以编写和执行 python 程序并使用终端窗口。

在Raspberry Pi上安装Adafruit LCD库:

温度和湿度值将显示在16 * 2 LCD显示屏上。Adafruit 为我们提供了一个库,可以在 4 位模式下轻松操作此 LCD,因此让我们通过打开终端窗口 Pi 并按照以下步骤将其添加到我们的树莓派中。

第 1 步:使用以下行在树莓派上安装 git。Git允许您克隆 Github 上的任何项目文件,并在 Raspberry pi 上使用它。我们的库在 Github 上,所以我们必须安装 git 才能将该库下载到 pi 中。

apt-get install git

第 2 步:以下行链接到存在库的 GitHub 页面,只需执行该行即可克隆 Pi 主目录上的项目文件

git clone git://github.com/adafruit/Adafruit_Python_CharLCD

第 3 步:使用以下命令更改目录行,进入我们刚刚下载的项目文件。命令行如下

cd Adafruit_Python_CharLCD

第 4 步:目录中会有一个名为 setup.py 的文件,我们必须安装它,以安装库。使用以下代码安装库

sudo python setup.py install

也就是说,库应该已成功安装。现在同样,让我们继续安装同样来自Adafruit的DHT库。

在Raspberry Pi上安装Adafruit DHT11库:

DHT11传感器采用单线制原理。温度和湿度值由传感器检测,然后作为串行数据传输通过输出引脚传输。然后,我们可以通过使用MCU/MPU上的I/O引脚来读取这些数据。要了解如何读取这些值,您必须通读DHT11传感器的数据表,但现在为了简单起见,我们将使用一个库与DHT11传感器进行通信。

Adafruit 提供的 DHT11 库也可用于DHT11、DHT22和其他单线温度传感器。安装 DHT11 库的过程也类似于安装 LCD 库的步骤。

cd Adafruit_Python_DHTsudo apt-get install build-essential python-devsudo python setup.py install 

完成后,您将在我们的树莓派上成功安装这两个库。现在我们可以继续进行硬件连接。

电路图:

下面给出了将DH11与Raspberry Pi连接的完整电路图,它是使用Fritzing构建的。遵循连接并建立电路

DHT11

LCD和DHT11传感器均采用+5V电源供电,因此我们使用Raspberry Pi上的5V引脚为两者供电。DHT11传感器的输出引脚上使用值为1k的上拉电阻,如果您使用的是模块,则可以避免使用此电阻。

在LCD的Vee引脚上增加了一个10k的微调器电位器,以控制LCD的对比度水平。除此之外,所有连接都非常简单。但是记下您使用哪些 GPIO 引脚来连接引脚,因为我们的程序将需要。下面的图表应该允许您计算出 GPIO 引脚编号。

DHT11

使用图表并根据电路图进行连接。我使用面包板和跳线进行连接。由于我使用了DHT11模块,因此我将其直接连接到Raspberry Pi。我的硬件如下所示

DHT11

DHT11传感器的Python编程:

我们必须编写一个程序来从DHT11传感器读取温度和湿度值,然后在LCD上显示相同的值。由于我们已经下载了LCD和DHT11传感器的库,因此代码应该非常简单。python 完整程序可以在本页末尾找到,但您可以进一步阅读以了解该程序的工作原理。

我们必须将LCD库和DHT11库导入我们的程序才能使用与之相关的功能。由于我们已经将它们下载并安装在我们的 Pi 上,因此我们可以简单地使用以下行来导入它们。我们还导入时间库以使用延迟功能。

import time #import time for creating delay

import Adafruit_CharLCD as LCD #Import LCD library

import Adafruit_DHT #Import DHT Library for sensor

接下来,我们必须指定传感器连接到哪些引脚以及使用哪种类型的温度传感器。变量sensor_name分配给Adafruit_DHT。DHT11,因为我们在这里使用 DHT11 传感器。传感器的输出引脚连接到树莓派的 GPIO 17,因此我们将 17 分配给sensor_pin变量,如下所示。

sensor_name = Adafruit_DHT.DHT11 #we are using the DHT11 sensor

sensor_pin = 17 #The sensor is connected to GPIO17 on Pi

同样,我们还必须定义LCD连接到哪些GPIO引脚。在这里,我们在4 位模式下使用 LCD,因此我们将有四个数据引脚和两个控制引脚连接到 pi 的 GPIO 引脚。此外,如果我们也希望控制背光,您可以将背光引脚连接到 GPIO 引脚。但是现在我不使用它,所以我为它分配了 0。

lcd_rs        = 7  #RS of LCD is connected to GPIO 7 on PI

lcd_en        = 8  #EN of LCD is connected to GPIO 8 on PI

lcd_d4        = 25 #D4 of LCD is connected to GPIO 25 on PI

lcd_d5        = 24 #D5 of LCD is connected to GPIO 24 on PI

lcd_d6        = 23 #D6 of LCD is connected to GPIO 23 on PI

lcd_d7        = 18 #D7 of LCD is connected to GPIO 18 on PI

lcd_backlight =  0  #LED is not connected so we assign to 0

我们从 Adafruit 下载的 LCD 库可用于所有类型的特色 LCD 显示器。在我们的项目中,我们使用 16*2 LCD 显示屏,因此我们在变量中提到了行数和列数,如下所示。

lcd_columns = 16 #for 16*2 LCD

lcd_rows    = 2 #for 16*2 LCD

现在,我们已经声明了LCD引脚以及LCD的行数和列数,我们可以使用以下行初始化LCD显示,该行将所有必需的信息发送到库。

lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7,

lcd_columns, lcd_rows, lcd_backlight)   #Send all the pin details to library

为了启动程序,我们使用 lcd.message() 函数显示一条小的介绍消息,然后延迟 2 秒以使消息可读。用于在 2 上打印德·行命令 n 可以使用如下所示

lcd.message('DHT11 with Pi n -CircuitDigest') #Give a intro message

time.sleep(2) #wait for 2 secs

最后,在我们的while循环中,我们应该从传感器读取温度和湿度的值,并每2秒在LCD屏幕上显示一次。while循环中的完整程序如下所示

while 1: #Infinite Loop

湿度, 温度 = Adafruit_DHT.read_retry(sensor_name, sensor_pin) 从传感器#read并将各自的值保存在温度和湿度变量中

lcd.clear() #Clear the LCD screen

lcd.message ('Temp = %.1f C' % temperature) # Display the value of temperature

lcd.message ('nHum = %.1f %%' % humidity)  #Display the value of Humidity

time.sleep(2) #Wait for 2 sec then update the values

我们可以使用下面的这一行轻松地从传感器获取温度和湿度值。如您所见,它返回两个存储在可变湿度和温度中的值。sensor_name和sensor_pin详细信息作为参数传递;这些值在程序开始时更新

湿度,温度 = Adafruit_DHT.read_retry(sensor_name, sensor_pin)

要在LCD屏幕上显示变量名称,我们可以使用&d,%c等标识符。在这里,由于我们显示的浮点数在小数点后只有一个数字,我们使用标识符 %.1f 来显示可变温度和湿度中的值

lcd.message ('Temp = %.1f C' % temperature)

lcd.message ('nHum = %.1f %%' % humidity)

使用树莓派测量湿度和温度:

按照电路图进行连接并安装所需的库。然后启动本页末尾给出的 python 程序。您的LCD应显示介绍消息,然后显示当前温度和湿度值,如下图所示。

DHT11

如果您发现LCD没有显示任何内容,请检查python shell窗口是否显示任何错误,如果没有显示错误,请再次检查您的连接并调整电位计以改变LCD的对比度水平,并检查屏幕上是否有任何内容。

#Program to read the values of Temp and Hum from the DHT11 sensor and display them on the LCD

import time #import time for creating delay 

import Adafruit_CharLCD as LCD #Import LCD library 

import Adafruit_DHT #Import DHT Library for sensor


sensor_name = Adafruit_DHT.DHT11 #we are using the DHT11 sensor

sensor_pin = 17 #The sensor is connected to GPIO17 on Pi



lcd_rs = 7 #RS of LCD is connected to GPIO 7 on PI

lcd_en = 8 #EN of LCD is connected to GPIO 8 on PI 

lcd_d4 = 25 #D4 of LCD is connected to GPIO 25 on PI

lcd_d5 = 24 #D5 of LCD is connected to GPIO 24 on PI

lcd_d6 = 23 #D6 of LCD is connected to GPIO 23 on PI

lcd_d7 = 18 #D7 of LCD is connected to GPIO 18 on PI

lcd_backlight = 0 #LED is not connected so we assign to 0


lcd_columns = 16 #for 16*2 LCD

lcd_rows = 2 #for 16*2 LCD


lcd = LCD.Adafruit_CharLCD(lcd_rs, lcd_en, lcd_d4, lcd_d5, lcd_d6, lcd_d7, 

lcd_columns, lcd_rows, lcd_backlight) #Send all the pin details to library 


lcd.message('DHT11 with Pi n -CircuitDigest') #Give a intro message


time.sleep(2) #wait for 2 secs


while 1: #Infinite Loop



humidity, temperature = Adafruit_DHT.read_retry(sensor_name, sensor_pin) #read from sensor and save respective values in temperature and humidity varibale 

lcd.clear() #Clear the LCD screen

lcd.message ('Temp = %.1f C' % temperature) # Display the value of temperature

lcd.message ('nHum = %.1f %%' % humidity) #Display the value of Humidity 


time.sleep(2) #Wait for 2 sec then update the values


 

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分