ラズパイとDHT11で温度・湿度を測る
こんなこと、やります。
- PythonのDHT11ライブラリのインストール
- ラズパイとDHT11で、温度と湿度の測定
はじめに
この記事では、Raspberry Pi(ラズパイ)とDHT11センサで温度と湿度を測る方法を解説します。なお、ラズパイとの通信はmacOSからSSHで行いました。
SSHの設定はRaspberry Pi OSのインストール - モニター・キーボードなし、SSH接続するまでをご覧ください。
また、ArduinoでDHT11を使いたい方は、Arduinoで温度湿度センサDHT11の使い方で解説しています。
開発環境
開発環境はこちら。
項目 | バージョン |
---|---|
ラズパイ | Raspberry Pi zero WH |
温度湿度センサ | DHT11 |
Python | 2.7.16/3.7.3 |
▼ DHT11の高級版である「DHT22」を使って温度ロガーをつくってみました。合わせてご参考になさってみてください。
準備
ここでは、ラズパイでDHT11を使うための準備を行います。
Gitのインストール
gitコマンドを使って、DHT11のライブラリをインストールします。gitコマンドがない場合は、次のようにしてインストールしてください。
$ sudo apt-get install git
DHT11ライブラリのインストール
gitコマンドを使って、DHT11のライブラリをインストールします。 こちら のDHT11ライブラリをインストールしました。
$ git clone https://github.com/szazo/DHT11_Python.git
インストール後の確認
ライブラリのインストール完了後、現在のディレクトリにDHT11_Pythonディレクトリが作成されます。
DHT11_Pythonは、次のような階層になっています。
$ tree
.
|-- LICENSE.md
|-- README.md
|-- dht11
| |-- __init__.py
| `-- __pycache__
| `-- __init__.cpython-37.pyc
|-- dht11-test.py
|-- example.py
`-- setup.py
2 directories, 7 files
DHT11のピン端子役割
DHT11のピン端子の役割を確認しておきます。
DHT11は1-Wire通信のデジタルセンサです。1-Wire通信に関しては、ラズパイとDS18B20で水温測定(1-Wire通信)に詳しく書きました。
NCピンは使わないので、何も接続しません。
ラズパイとDHT11の配線
次ように、ラズパイとDHT11を配線します。
DHT11 | ラズパイ |
---|---|
VDD | 3.3V |
DATA | GPIO14⭐︎ |
NC | -- |
GND | GND |
⭐DHT11のDATAピンは4.7kΩの抵抗でプルアップします。
ソースコード:DHT11から温度と湿度データの取得
DHT11から温度と湿度データの取得するプログラムがこちらです。6秒おきに、温度と湿度が標準出力されます。
import RPi.GPIO as GPIO
import dht11
import time
import datetime
# initialize GPIO
GPIO.setwarnings(True)
GPIO.setmode(GPIO.BCM)
# read data using pin 14
instance = dht11.DHT11(pin=14)
try:
while True:
result = instance.read()
if result.is_valid():
print("Last valid input: " + str(datetime.datetime.now()))
print("Temperature: %-3.1f C" % result.temperature)
print("Humidity: %-3.1f %%" % result.humidity)
time.sleep(6)
except KeyboardInterrupt:
print("Cleanup")
GPIO.cleanup()
解説
次のようにしてプログラムを実行します。プログラムを止めたい場合は、control + Cで止めます。
$ python3 example.py
Last valid input: 2020-12-27 03:45:31.272394
Temperature: 24.5 C
Humidity: 47.0 %
「BCM」と「BOARD」の違い
プログラム中のGPIO.setmodeについて解説します。GPIO.BCMをセットすると、図のGPIOの番号でピンが指定されます。また、GPIO.BOARDをセットする、ピンの配列順の番号で指定されます。
ここらへんは間違えやすいので注意しましょう。