🌡️

Rasperry Pi に DHT22 を接続して温度・湿度を計測する

2023/08/19に公開

Raspberry Pi に DHT22 (AM2302) を接続して温度・湿度を計測してみようと思います。

DHT22 (AM2302) について

DHT22 (AM2302) は Arduino や Raspberry Pi で電子工作するときには非常にポピュラーな温湿度計のようです。
秋月電子や Amazon で様々なものが購入できますが、今回は Amazon でこちらを購入しました。
https://www.amazon.co.jp/gp/product/B07CSNMYN7/

データシートはこちらになります。
http://dlnmh9ip6v2uc.cloudfront.net/datasheets/Sensors/Weather/RHT03.pdf

Raspberry Pi との接続

Raspberry Pi と DHT22 を以下のように接続しました。

RPi DHT22
5V VCC
GND GND
GPIO 18 DATA

ライブラリのインストール

DHT22 を使用するためのライブラリはいくつかあるようですが、今回は adafruit-circuitpython-dht を使用しました。
https://pypi.org/project/adafruit-circuitpython-dht/

必要となるパッケージインストールします。

sudo apt-get install libgpiod2

Python の仮想環境を作ります。

python -m venv .venv
. .venv/bin/activate

adafruit-circuitpython-dht をインストールします。

pip install adafruit-circuitpython-dht

温度・湿度の計測

とりあえず、サンプルコードを実行してみます。
https://github.com/adafruit/Adafruit_CircuitPython_DHT/blob/main/examples/dht_simpletest.py

$ python dht_simpletest.py
Temp: 79.5 F / 26.4 C    Humidity: 56.8% 
Checksum did not validate. Try again.
A full buffer was not returned. Try again.
Temp: 79.5 F / 26.4 C    Humidity: 56.8% 
Checksum did not validate. Try again.
Checksum did not validate. Try again.
Temp: 79.5 F / 26.4 C    Humidity: 56.9% 
Temp: 79.3 F / 26.3 C    Humidity: 56.9% 
Temp: 79.5 F / 26.4 C    Humidity: 57.1% 
Temp: 79.5 F / 26.4 C    Humidity: 57.1% 
Temp: 79.5 F / 26.4 C    Humidity: 57.1% 
A full buffer was not returned. Try again.
Checksum did not validate. Try again.
Temp: 79.3 F / 26.3 C    Humidity: 56.9% 
Temp: 79.3 F / 26.3 C    Humidity: 57.0% 
Temp: 79.3 F / 26.3 C    Humidity: 57.0% 
Temp: 79.3 F / 26.3 C    Humidity: 57.0% 
Temp: 79.3 F / 26.3 C    Humidity: 57.2%
... (snip) ...

難なく、それらしき温度・湿度を取得することができました。

最初、3.3V に接続していたのですが、それらしき値は取得できるもののエラーが頻発していました。
以下のような記載を見つけたので 5V に接続したところ、エラーの発生率は明らかに減少しました。

Likewise, it is fairly easy to connect up to the DHT sensors. They have four pins

  1. VCC - red wire Connect to 3.3 - 5V power. Sometime 3.3V power isn't enough in which case try 5V power.
  2. Data out - white or yellow wire
  3. Not connected
  4. Ground - black wire

引用: https://learn.adafruit.com/dht?view=all

サンプルコードにはちょっと気になるコメントが記載されていましたが、私の環境では use_pulseio=False なしで動作しました。

you can pass DHT22 use_pulseio=False if you wouldn't like to use pulseio.
This may be necessary on a Linux single board computer like the Raspberry Pi,
but it will not work in CircuitPython.

まとめ

安価で入手しやすい DHT22 を Raspberry Pi を接続して温度・湿度を計測することができました。サンプルコードも非常にシンプルなので、システムへの組み込みも容易にできると思います。

参考文献

Discussion