樹莓派利用DHT11讀取環境溫濕度

樹莓派本身雖然沒有自帶感測器,但是透過一些感測器其實可以很容易透過別人寫好的程式模組,呼叫它的指令即可取得外部的資料,其中溫濕度是最實用的資訊之一,當然也是最容易使用的感測器。

首先,我們使用的溫濕度感測模組是DHT11,可以在以下的連結中找到:

這個感測器有多種版本,我們使用的3支腳的版本,它們分別是正極、負極、以及資料線(Data或是Out)。在連接線上,請把正極連到樹莓派板子上的第2腳(+5V),負極連接到第6腳(GND),資料線則連接到任一GPIO接腳,在此例中我們把它放在GPIO4(實體連線是第7腳),如下面的照片所示:

要特別留意的是,不同公司出品的DHT11的接腳位置有許多差異,只要接錯DHT11就會燒毀,所以在連接時要特別小心。

【以下是Raspberry Pi 3的操作方式,如果你使用的是Rasbperry Pi 4的話,請看本文的後半段說明】

連接完畢之後,請在你的樹莓派環境中安裝以下的模組:

pip install Adafruit_DHT

然後利用以下的程式碼即可讀取環境的溫濕度了:

import Adafruit_DHT
import time
dht11 = Adafruit_DHT.DHT11
DHT_PIN = 4
while True:
    h, t = Adafruit_DHT.read_retry(dht11, DHT_PIN)
    print(h, t)
    time.sleep(1)

輸出結果如下:

最後要留意一點,上述模組只適於樹莓派3,在Pi 4上並無法順利執行。

【新版的樹莓派4要改為使用以下這個模組才行】

https://github.com/adafruit/Adafruit_CircuitPython_DHT

Pi 4讀取DHT11溫濕度的方法如下,首先要安裝另外一個Python 模組,指令如下:

pip install adafruit-circuitpython-dht

還有在Linux作業系統下安裝libgpiod2套件:

sudo apt install libgpiod2 -y

然後,使用以下的程式就可以在Pi 4下進行溫濕度的讀取:

import adafruit_dht
import time
import board
dht11 = adafruit_dht.DHT11(board.D4)
while True:
    t = dht11.temperature
    h = dht11.humidity
    print("{}C, {}%".format(t, h))
    time.sleep(1)

輸出的結果如下圖所示:

結合之前學習過的LCD的輸出,可以把程式修改如下:

import adafruit_dht
import time
import board
import smbus2, sys
from RPLCD.i2c import CharLCD

sys.modules['smbus'] = smbus2
lcd = CharLCD('PCF8574', address=0x27, port=1, backlight_enabled = True)
lcd.clear()
lcd.cursor_pos = (0, 0)
lcd.write_string("NKUST Welcome")

dht11 = adafruit_dht.DHT11(board.D4)
while True:
    t = dht11.temperature
    h = dht11.humidity
    print("{}C, {}%".format(t, h))
    lcd.cursor_pos = (1, 0)
    lcd.write_string("{}C, {}%".format(t, h))
    time.sleep(1)

上述程式執行之後,除了還是一樣會在畫面上輸出目前所偵測到的溫濕度之外,也會在LCD上顯示如下所示的訊息:

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *