この記事には広告を含む場合があります。記事内で紹介する商品を購入することで、当サイトに売り上げの一部が還元されることがあります。
はじめに
今回は温湿度センサー (DHT22 / AM2302) を使って温度と湿度を測定します。部屋での測定だけでなく、農業IoTなどにも活用できそうです。
前提条件
- Raspberry Pi 4 Model B
- Python 3系を利用可能な環境(本記事ではPython 3.7.3を使用)
- pipコマンドが利用可能な環境
センサー外観
温湿度センサー (DHT22 / AM2302) について
DHT22温湿度センサーは比較的安価(購入時 1,249円)で精度の高い値を測ることができるセンサーです。
センサーに関する情報は次の表のとおりです。(RHはRelative Humidity の略で相対湿度のことです)
温度の測定範囲 | -40 ℃ – 80 ℃ |
温度の精度 | ±0.5 ℃ |
湿度の測定範囲 | 0 % – 99 %RH |
湿度の精度 | ±2 %RH(25 ℃の時) |
電源電圧 | 3.3 – 5.5 V(推奨は5 V) |
サンプリング周期 | 2 秒 |
センサーの情報は商品ページのデータシートから引用しています。
ラズパイとセンサーの接続方法
ラズパイと温湿度センサーは次の図のように接続します。
GPIO ピン | 温湿度センサー |
2 | VCC (Voltage at the Common Collector) |
6 | GND (Ground) |
7 | DAT |
ラズパイと接続すると次の画像のようになります。
コードをダウンロードする
温湿度センサーで値を取得するためにAdafruitから配布されているAdafruit_DHT Libraryというライブラリーを使用します。手順は次のとおりです。
sudo apt-get update
sudo apt-get install python3-pip
sudo python3 -m pip install --upgrade pip setuptools wheel
sudo pip3 install Adafruit_DHT
sudo pip3 install Adafruit_DHT
cd Adafruit_Python_DHT
sudo python3 setup.py install
cd examples
python3 AdafruitDHT.py 22 4
22はDHT22を意味していて、4はGPIO番号を示しています。
STEP.6 を実行して温度と湿度が以下のように表示されれば計測は成功しています。
温度は他の温度計の数値と比較してみてもほぼ同じ数値を示しますが、湿度に関しては若干の違いが見られました。しかし、ある程度時間をおいてから測定するとほぼ同じ数値を示しました。このことから、正確な数値を得るには少し時間をおいてから温湿度を測定するのが良いのかもしれません。
DHT22 | SwitchBot | |
温度の測定範囲 | -40 – 80 ℃ | -20 °C – 80 °C |
温度の精度 | ±0.5 ℃ | ±0.4 °C(-20 °C – 0 °Cにおいて) ±0.2 °C(0 °C – 65 °Cにおいて) ±0.3 °C(65 °C – 80 °Cにおいて) |
湿度の測定範囲 | 0 – 99 %RH | 0 – 99 %RH |
湿度の精度 | ±2 %RH(25℃の時) | ±2 %(25 °C、10 % – 90 %RHにおいて) ±4 %(25 °C、0 % – 10 %, 90 % – 99 %RHにおいて) |
エラーが出たときの対処法
自分が購入したラズパイのデフォルトのPythonのバージョンは2系だったので、まずはPythonのバージョンを3系に更新しました。
ラズパイの現在のPythonのバージョンは次のコマンドで確認することができます。
python --version
もしPythonのバージョンが2系であれば3系に変更しましょう。
Pythonのバージョンを変更する方法は以下の記事を参考にしてください。
僕はこのエラーに遭遇しました。stackoverflowでの回答でこの問題は解決したので、その解決方法を共有します。
まずはラズパイで次のディレクトリに移動します。
/usr/local/lib/python3.7/site-packages/Adafruit_DHT/
platform_detect.pyをテキストエディターで開きます。今回はThonnyで開きます。
110行目辺りで次のコードを追加します。
elif match.group(1) == 'BCM2711':
return 3
コードを追加したら保存します…が、保存するときにパーミッションのエラーを受け取ったので、以下の記事を参考に権限を上げました。
まとめ
ライブラリーを使えばコードを全く書くことなく温湿度を計測することができました。エラーなどに遭遇して初めはなかなかうまく行かないかもしれませんが、エラーメッセージでググるなどして一つ一つ対処していきましょう。