概要
温度・湿度をI2C通信で取得する温度センサーDHT20を使う。
外観
回路
部品
温湿度センサ モジュール DHT20 ¥380
https://akizukidenshi.com/catalog/g/gM-16732/
プログラム
【プログラムの流れ】
- 電源を入れて準備完了まで100ms待機
- 状態確認(0x71を送って0x18が返ってくるか)
- 状態(返り値が0x18じゃない)によっては初期化
- 10ms待って測定開始コマンド送信
- 測定完了まで80ms待機
- 測定データ読み込み(7バイト読み込み)
- 測定データを温度・湿度の物理量に変換
- 連続で取得する場合は、測定開始コマンドから繰り返す
from machine import Pin, SoftI2C
import utime
def test():
i2c = SoftI2C(scl=Pin(21), sda=Pin(25), freq=100000)
ls = i2c.scan()
print(ls)
if len(ls) == 0:
print('no slave device')
return
addr = ls[0] #56 = 0x38
i2c.writeto(addr,b'\x71')
ret = i2c.readfrom(addr, 1)
if ret != b'\x18':
print('init')
i2c.writeto_mem(addr, 0x1B, b'')
i2c.writeto_mem(addr, 0x1C, b'')
i2c.writeto_mem(addr, 0x1E, b'')
utime.sleep(0.01)
i2c.writeto(addr,b'\x71')
ret = i2c.readfrom(addr, 1)
if ret != b'\x18':
print('init error')
return
utime.sleep(0.01)
i2c.writeto(addr,b'\xAC\x33\x00')
utime.sleep(0.08)
dat = i2c.readfrom(addr, 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))
test()
詳細
MicroPythonでDHT20から温度・湿度を取得
https://tiblab.net/blog/2022/11/use_dht20_by_esp32_micropython/
参照サイト
温湿度センサーDHT20とAHT25の使い方 Raspberry Pi
https://s-design-tokyo.com/use-dht20-raspberrypi/