樹莓派本身雖然沒有自帶感測器,但是透過一些感測器其實可以很容易透過別人寫好的程式模組,呼叫它的指令即可取得外部的資料,其中溫濕度是最實用的資訊之一,當然也是最容易使用的感測器。
首先,我們使用的溫濕度感測模組是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上顯示如下所示的訊息: