DHT20で温度を測る

MicroPython、I2C通信

概要

温度・湿度を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/

ページトップへ