ラズパイで温湿度センサー (DHT22 / AM2302) を使って温湿度を測る方法(エラー対処法付き)

はじめに

今回は温湿度センサー (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 pins
GPIOピンの役割一覧
GPIO ピン温湿度センサー
2VCC (Voltage at the Common Collector)
6GND (Ground)
7DAT
GPIO対応表

ラズパイと接続すると次の画像のようになります。

ラズパイとの接続

コードをダウンロードする

温湿度センサーで値を取得するために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
pipでAdafruit_DHTをインストールする
sudo pip3 install Adafruit_DHT
ディレクトリを移動する
cd Adafruit_Python_DHT
setup.pyをインストールする
sudo python3 setup.py install

examples ディレクトリに移動する
cd examples
AdafruitDHT.py を実行して温度と湿度を計測する
python3 AdafruitDHT.py 22 4

22はDHT22を意味していて、4はGPIO番号を示しています。

注意

4はGPIO番号で、ピンヘッダーの番号ではないので注意してください。

STEP.6 を実行して温度と湿度が以下のように表示されれば計測は成功しています。

温湿度の計測

温度は他の温度計の数値と比較してみてもほぼ同じ数値を示しますが、湿度に関しては若干の違いが見られました。しかし、ある程度時間をおいてから測定するとほぼ同じ数値を示しました。このことから、正確な数値を得るには少し時間をおいてから温湿度を測定するのが良いのかもしれません。

SwitchBotの温湿度計
DHT22SwitchBot
温度の測定範囲-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 %RH0 – 99 %RH
湿度の精度±2 %RH(25℃の時)±2 %(25 °C、10 % – 90 %RHにおいて)
±4 %(25 °C、0 % – 10 %, 90 % – 99 %RHにおいて)
DHT22 と SwitchBot 温湿度計の比較

エラーが出たときの対処法

Python 2系ではなく、Python 3系を使う

自分が購入したラズパイのデフォルトのPythonのバージョンは2系だったので、まずはPythonのバージョンを3系に更新しました。

ラズパイの現在のPythonのバージョンは次のコマンドで確認することができます。

python --version
Pythonのバージョン

もしPythonのバージョンが2系であれば3系に変更しましょう。

Pythonのバージョンを変更する方法は以下の記事を参考にしてください。

cannot import name ‘Beaglebone_Black_Driver’ from ‘Adafruit_DHT’ エラーが出た時

僕はこのエラーに遭遇しました。stackoverflowでの回答でこの問題は解決したので、その解決方法を共有します。

まずはラズパイで次のディレクトリに移動します。

/usr/local/lib/python3.7/site-packages/Adafruit_DHT/

ディレクトリ

platform_detect.pyをテキストエディターで開きます。今回はThonnyで開きます。

110行目辺りで次のコードを追加します。

platform_detect.py
elif match.group(1) == 'BCM2711':
    return 3
コードの追加

コードを追加したら保存します…が、保存するときにパーミッションのエラーを受け取ったので、以下の記事を参考に権限を上げました。

まとめ

ライブラリーを使えばコードを全く書くことなく温湿度を計測することができました。エラーなどに遭遇して初めはなかなかうまく行かないかもしれませんが、エラーメッセージでググるなどして一つ一つ対処していきましょう。

参考ページ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です