溫度和濕度是在任何環境中被監控的最常見參數。有大量的傳感器可供選擇來測量溫度和濕度,但最常用的是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傳感器配有藍色或白色外殼。在這個外殼內,我們有兩個重要的組件,可以幫助我們感知相對濕度和溫度。第一個組件是一對電極;這兩個電極之間的電阻由保濕基板決定。因此,測得的電阻與環境的相對濕度成反比。相對濕度越高,電阻值越低,反之亦然。另請注意,相對濕度與實際濕度不同。相對濕度測量空氣中的含水量相對于空氣中的溫度。
另一個元件是表面貼裝的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構建的。遵循連接并建立電路
LCD和DHT11傳感器均采用+5V電源供電,因此我們使用Raspberry Pi上的5V引腳為兩者供電。DHT11傳感器的輸出引腳上使用值為1k的上拉電阻,如果您使用的是模塊,則可以避免使用此電阻。
在LCD的Vee引腳上增加了一個10k的微調器電位器,以控制LCD的對比度水平。除此之外,所有連接都非常簡單。但是記下您使用哪些 GPIO 引腳來連接引腳,因為我們的程序將需要。下面的圖表應該允許您計算出 GPIO 引腳編號。
使用圖表并根據電路圖進行連接。我使用面包板和跳線進行連接。由于我使用了DHT11模塊,因此我將其直接連接到Raspberry Pi。我的硬件如下所示
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應顯示介紹消息,然后顯示當前溫度和濕度值,如下圖所示。
如果您發現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
-
傳感器
+關注
關注
2560文章
52148瀏覽量
761375 -
lcd
+關注
關注
34文章
4479瀏覽量
170082 -
DHT11
+關注
關注
19文章
277瀏覽量
58129
發布評論請先 登錄
相關推薦
STM32F103試用體驗:LCD顯示與DHT11測量實驗
【STM32F103試用體驗】LCD顯示與DHT11測量實驗
Arduino開發板使用DHT11溫濕度傳感器的方法 精選資料分享
使用DHT11和STM32單片機進行濕度和溫度監控
如何將DHT11濕度和溫度傳感器與基于STM32F103C8T6 MCU的STM32 Blue Pill Board接口
DHT11溫度和濕度傳感器打印到I2C 16x02 LCD

評論