Raspberry Pi Pico × DHT20

はじめに

IoTのデータ収集で一番簡単であろう、「温湿度の計測」というのをちょっとやっておこうと、ひらめいたままに書いた記事となります。

温度はRaspberry Pi Pico 単体で取得できますが、湿度計はついてません。
ちょうど部屋を漁ってたら、何故かサンプルが少なくマイナーっぽい温湿度センサー「DHT20」がちょうど出てきたで、メモ代わりに残しておきたいと思います。

※全体の方針として、「システム All Python」を目指しているところですので、この記事は「Raspberry Pi Pico × Micro Python × DHT20」となります。

配線・ソースコード

(実は「Seeed XIAO RP2040」で作業してます 小さいく良い!!)
I2Cなので、まあ、普通に配線すればいいかと思います。

from machine import Pin,I2C
import utime

i2c     = I2C(1, scl=Pin(7), sda=Pin(6), freq=100000)
address = 0x38
send    = bytearray([0xAC, 0x33, 0x00])
dat     = bytearray([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00])
utime.sleep_ms(100)
try:
    while True:
        utime.sleep_ms(10)
        i2c.writeto(address, send)

        utime.sleep_ms(100)
        dat =i2c.readfrom(address, 7)
        
        hum = dat[1] << 12 | dat[2] << 4 | ((dat[3] & 0xF0) >> 4)
        tmp = ((dat[3] & 0x0F) << 16) | dat[4] << 8 | dat[5]
        
        hum = hum / 2**20 * 100
        tmp = tmp / 2**20 * 200 - 50
        
        print("hum: "+str(hum))
        print("tmp: "+str(tmp))
        
except Exception as ex:
    print(str(ex))

print("finish")

とりあえず、秋月電子のサイトのデータシート載せておきます。
英語ですが、ソースコード見ながらだと何となくわかるような気になれます。

ちなみに、このコードには記述をしていないのですが、データシートによると、”電源入れて100ms経ってから[0x71]を送って、[0x18]が返ってこなかったら[0x1B],[0x1C],[0x1E]を初期化しろ”という記載がありますが、それの処理を書いていません。
戻り値チェック&初期化をしなくても問題なく動作すること、ArduinoのDHT20のライブラリでも、チェックする関数は書かれているが、どうも使われていないようなので、いらなそうだな~と思ったからです。

センサーに送るデータおよび受け取る変数は、bytearrayです。
通常の配列にしたり、bytesにしてたりはダメです。

この記事が気に入ったらサポートをしてみませんか?