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にしてたりはダメです。