icysamon blog

Raspberry Pi Picoで温湿度センサーDHT20を使う

,

DHT20 仕様

  • 入力電圧:2.2V ~ 5V DC
  • 精度:温度±0.5℃、湿度±3%

インターフェース定義

ピン(左から右)ネーム
1VDD
2SDA
3GND
4SCL

Raspberry Pi Pico と DHT20 の接続

二つの抵抗どちっも4K7Rです。

コード

Thonny を使う場合、正常に実行のためコード中の日本語文字をすべて消してください。または最後のGitHubリンクで英語版をダウンロードしてください。

dht20.py

from machine import Pin, I2C
import time


cmd = bytearray(b'\xAC\x33\x00') # 測定コマンド
i2c_address = 0x38 # I2Cアドレス
humidity_data = 0.00 # 湿度データ
temperature_data = 0.00 # 温度データ
json_data = " " # JSON型温湿度データ


# DHT20温湿度センサの初期化
def init(SCL = Pin(21), SDA = Pin(20), FREQ = 10000):
    global i2c
    
    buff = bytearray(7) # 受信データ
    
    # I2C通信の設定
    i2c = I2C(0, scl = SCL, sda = SDA, freq = FREQ)
       
    i2c.writeto(i2c_address, cmd,  True)
    time.sleep_ms(100)
    
    i2c.readfrom_into(i2c_address, buff, True)
    time.sleep_ms(100)
    
    # 出荷検査
    if (buff[0] & 0x18) == 0x18:
        print('DTH20初期化成功')
    else:
        print('DTH20初期化失敗')
        

# 測定データの受信と分析
def get_data():
    global humidity_data
    global temperature_data
    
    buff = bytearray(7) # 受信データ
    
    # 測定命令発信とデータ受信
    while True:
        i2c.writeto(i2c_address, cmd, True)
        time.sleep_ms(100)
        
        i2c.readfrom_into(i2c_address, buff, True)
        time.sleep_ms(100)
        
        # データの転送を確認する
        if not (buff[0] | 0x7F) != 0x7F or buff[0] == 0x00:
            break
    
    # データの分析
    humidity_data_temp = (buff[1] << 12) | (buff[2] << 4) | ((buff[3] >> 4) & 0x0f)
    temperature_data_temp = ((buff[3] & 0x0f) << 16) | (buff[4] << 8) | (buff[5])
    humidity_data = humidity_data_temp / 1048576 * 100
    temperature_data = temperature_data_temp / 1048576 * 200 - 50
    
    # 小数点以下2桁のデータを表示する
    humidity_data = round(humidity_data, 2)
    temperature_data = round(temperature_data, 2)
    

# 温湿度データをJSON形式に変更する
def to_json():
    global json_data
    json_data = "{\"temperature\": " + ('%.2f' % temperature_data) + \
                ", \"humidity\": " + ('%.2f' % humidity_data) + \
                "}"
    return json_data

main.py

from machine import Pin
import time, dht20

led = Pin("LED", Pin.OUT)

dht20.init()
time.sleep_ms(100)


while True:
    led.toggle()
    dht20.get_data()
    print(dht20.to_json())
    print(dht20.temperature_data)
    print(dht20.humidity_data)
    time.sleep(3)

リポジトリ

https://github.com/icysamon/DHT20

検索

icysamon

mail@icysamon.com