注釈

こんにちは、SunFounder Raspberry Pi & Arduino & ESP32 Enthusiasts Communityへようこそ!Facebook上で、仲間と一緒にRaspberry Pi、Arduino、ESP32をさらに深く探求しましょう。

なぜ参加するのか?

  • 専門的なサポート:購入後の問題や技術的な課題をコミュニティやチームの助けを借りて解決。

  • 学びと共有:スキルを向上させるためのヒントやチュートリアルを交換。

  • 限定プレビュー:新製品発表や予告編に早期アクセス。

  • 特別割引:最新製品の特別割引を楽しむ。

  • フェスティブプロモーションとプレゼント:プレゼントやホリデープロモーションに参加。

👉 私たちと一緒に探索と創造を始める準備はできましたか?[ここ]をクリックして、今すぐ参加しましょう!

レッスン19: 温度・湿度センサーモジュール (DHT11)

このレッスンでは、DHT11温湿度センサーを使用してラズベリーパイからデータを接続して読み取る方法を学びます。センサーの設定方法、摂氏および華氏での温度の読み取り、および湿度の読み取り方法を学びます。このプロジェクトは、外部センサーの使用、リアルタイムデータの処理、およびPythonでの基本的な例外処理を紹介します。

必要なコンポーネント

このプロジェクトでは、以下のコンポーネントが必要です。

全キットを購入するのが便利です。こちらのリンクをご覧ください。

Name

ITEMS IN THIS KIT

LINK

Universal Maker Sensor Kit

94

Universal Maker Sensor Kit

以下のリンクから個別に購入することもできます。

Component Introduction

Purchase Link

Raspberry Pi 5

購入

温度湿度センサーモジュール (DHT11)

購入

ブレッドボード

購入

配線

注釈

このキットには異なるバージョンのDHT11モジュールが含まれている場合があります。お持ちのモジュールに応じて配線方法を確認してください。

../_images/Lesson_19_dht11_module_pi_bb_bb.png ../_images/Lesson_19_dht11_module_pi_new_bb.png

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

注釈

adafruit-circuitpython-dhtライブラリはBlinkaに依存しているため、Blinkaがインストールされていることを確認してください。ライブラリのインストールについては、 Adafruit_Blinka (CircuitPython)のインストール - 任意 を参照してください。

ライブラリをインストールする前に、仮想Python環境がアクティブになっていることを確認してください。

source ~/env/bin/activate

adafruit-circuitpython-dhtライブラリをインストールします:

pip install adafruit-circuitpython-dht

コード

注釈

  • 「ライブラリのインストール」手順に従って、コードを実行するために必要なPythonライブラリがインストールされていることを確認してください。

  • コードを実行する前に、blinkaがインストールされた仮想Python環境がアクティブになっていることを確認してください。次のようなコマンドで仮想環境をアクティブにできます:

    source ~/env/bin/activate
    
  • このレッスンのコードは universal-maker-sensor-kit-main/pi/ ディレクトリにありますが、以下のコードを直接コピーして貼り付けることもできます。ターミナルで以下のコマンドを実行してコードを実行します:

    python 19_dht11_module.py
    
import time
import board
import adafruit_dht

# Initial the dht device, with data pin connected to:
dhtDevice = adafruit_dht.DHT11(board.D17)

while True:
    try:
        # Print the values to the serial port
        temperature_c = dhtDevice.temperature
        temperature_f = temperature_c * (9 / 5) + 32
        humidity = dhtDevice.humidity
        print(
            "Temp: {:.1f} F / {:.1f} C    Humidity: {}% ".format(
                temperature_f, temperature_c, humidity
            )
        )

    except RuntimeError as error:
        # Errors happen fairly often, DHT's are hard to read, just keep going
        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        dhtDevice.exit()
        raise error

    time.sleep(2.0)

Code Analysis

  1. ライブラリのインポート:

    このコードは、必要なライブラリをインポートすることから始まります。 time は遅延処理に使用され、 board はRaspberry PiのGPIOピンにアクセスし、 adafruit_dht はDHT11センサーと対話するために使用されます。 adafruit_dht ライブラリの詳細については、 adafruit/Adafruit_CircuitPython_DHT を参照してください。

    import time
    import board
    import adafruit_dht
    
  2. センサーの初期化:

    DHT11センサーは、データピンがRaspberry PiのGPIO 17に接続された状態で初期化されます。このセットアップは、センサーがRaspberry Piと通信するために重要です。

    dhtDevice = adafruit_dht.DHT11(board.D17)
    
  3. ループ内でのセンサーデータの読み取り:

    while True ループは、プログラムが新しいデータを継続的にセンサーからチェックできるようにします。

    while True:
    
  4. Try-Exceptブロック:

    ループ内では、try-exceptブロックを使用して、ランタイムエラーの可能性を処理します。DHTセンサーからの読み取りは、タイミングの問題やセンサーの癖により、しばしばエラーを引き起こすことがあります。

    try:
        # Sensor data reading code here
    except RuntimeError as error:
        # Handling common sensor reading errors
        print(error.args[0])
        time.sleep(2.0)
        continue
    except Exception as error:
        # Handling other exceptions and exiting
        dhtDevice.exit()
        raise error
    
  5. センサーデータの読み取りと印刷:

    温度と湿度はセンサーから読み取られ、読みやすい形式に変換されます。温度は摂氏から華氏にも変換されます。

    temperature_c = dhtDevice.temperature
    temperature_f = temperature_c * (9 / 5) + 32
    humidity = dhtDevice.humidity
    print("Temp: {:.1f} F / {:.1f} C    Humidity: {}% ".format(temperature_f, temperature_c, humidity))
    
  6. 読み取りエラーの処理:

    DHT11センサーはしばしばエラーを返すため、コードはこれらを処理するためにtry-exceptブロックを使用します。エラーが発生した場合、プログラムはセンサーから再び読み取る前に2秒待機します。

    except RuntimeError as error:
        print(error.args[0])
        time.sleep(2.0)
        continue
    
  7. 一般的な例外処理:

    その他の例外が発生した場合、安全にセンサーを終了し、エラーを再度発生させることでこれを処理します。これにより、プログラムが不安定な状態で続行しないようにします。

    except Exception as error:
        dhtDevice.exit()
        raise error
    
  8. 読み取り間隔の遅延:

    ループの最後に2秒の遅延が追加され、センサーの常時ポーリングを避けます。これにより誤読を防ぎます。

    time.sleep(2.0)