2021年6月13日日曜日

Raspberry Pi PicoでDHT11センサーを使用して温度・湿度を取得する

Raspberry Pi PicoでDHT11センサーを使用して温度・湿度を取得するには、以下の手順を実行します。

〇Raspberry Pi PicoとDHT11センサーを接続した写真

開発手順

1. 部品の用意
以下の部品を用意します。

・DHT11センサーモジュール
DHT11温湿度モジュール(Temperature and Humidity Sensor)
https://akizukidenshi.com/catalog/g/gM-07040/

2. Raspberry Pi PicoとDHT11センサーモジュールを配線します
DHT11のDigitalピンへ(付属ケーブルの緑) -> Raspberry Pi PicoのGP28ピン
DHT11のGNDへ(付属ケーブルの黒) -> Raspberry Pi PicoのGNDピン
DHT11のVへ(付属ケーブルの赤) -> Raspberry Pi Picoの3V3(OUT)ピン(36番ピン)

3. Raspberry Pi用「dht」モジュールの導入
Thonnyを利用する場合、dht11モジュールのインストールは以下の手順を実行します。

3-1.Raspberry Pi Pico用のdhtモジュールのダウンロード
ikornaselurさんが公開している以下のページからCode -> Download ZIPを選択して、モジュールのソースコードをダウンロードします。
ZIPファイルをダウンロード後、解凍しておきます。
https://github.com/ikornaselur/pico-libs

3-2.dht11.pyのアップロード
Thonnyの「表示」メニューから→「ファイル」を選択します。Rapberry Pi Pico側に/libフォルダがなければ、ペイン下側のフォルダで右クリックメニューから「New Directory...」を選択し、フォルダ名を入力して/libフォルダを作成します。

フォルダ作成ダイアログ

3.3.ローカルPCのフォルダ内のPythonモジュールをアップロード
Raspberry Pi Pico側の/libフォルダに移動後(左側ペインの下のlibフォルダをダブルクリックで移動)、ローカルPCのフォルダにあるdht11.pyで右クリックメニューから「upload to /lib」を選択してモジュールのライブラリをアップロードします(dht.pyはpico-libs-master/src/dht11にあります)。

4. プログラミングとプログラムのアップロード
以下のプログラムをmain.pyとしてRaspberry Pi Picoに保存して、実行します。実行後2秒おきに温度・湿度を取得できることを確認します。
main.py
import time
from machine import Pin
from dht import DHT11, InvalidChecksum

time.sleep(1)
dht11 = DHT11(Pin(28))

while True:
    try:
        print("temp: {}".format(dht11.temperature))
        print("humidity: {}".format(dht11.humidity))
    except InvalidChecksum:
        print("invalid checksum")
    time.sleep(2)

※プログラムを実行したときに、「InvalidPulseCount: Expected 84 but got 0 pulses」という例外が発生する場合は、Raspberry Pi Pico上に保存した/lib/dht11.pyを開いて、_send_init_signal関数のutime.sleep_ms(50)をutime.sleep_ms(250)に変更します。
    def _send_init_signal(self):
        self._pin.init(Pin.OUT, Pin.PULL_DOWN)
        self._pin.init(Pin.OUT)
        self._pin.value(1)
        #utime.sleep_ms(50)
        utime.sleep_ms(250)
        self._pin.value(0)
        utime.sleep_ms(18)

2 件のコメント:

  1. ありがとうございました。上記のエラーが出て、うまく動作しませんでした。
    ms(250)としてOKとなりました。

    返信削除
    返信
    1. 書き込みありがとうございます!

      削除