Grove shieldでi2c接続

Switch scienceで販売されてる、ラズピコ用のグローブシールド

https://www.switch-science.com/products/7109?_pos=11&_sid=85b9241fd&_ss=r

数年前に買ったけど初めて使ってみた、但しちゃんとした回路図が見つからないから実物で追っかけないとi2cの接続先わからなかった

以下のコードの、

i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=100000)

がI2C1の接続先になってます

import time
import machine, onewire, ds18x20
from machine import Pin, I2C

# I2C1 (SDA=GP6, SCL=GP7)
i2c = I2C(1, scl=Pin(7), sda=Pin(6), freq=100000)

# --- SHT30 定義 ---
SHT30_ADDR = 0x44
SHT30_CMD_MEASURE = b'\x2C\x10' # set to highspeed response mode

def read_sht30():
    i2c.writeto(SHT30_ADDR, SHT30_CMD_MEASURE)
    time.sleep(0.008)
    data = i2c.readfrom(SHT30_ADDR, 6)
    temp_raw = data[0] << 8 | data[1]
    hum_raw  = data[3] << 8 | data[4]
    temperature = -45 + (175 * temp_raw / 65535)
    humidity    = 100 * hum_raw / 65535
    return temperature, humidity

# --- メイン ---
while True:
    try:
        t, h = read_sht30()
        print("SHT30   Temp={:.1f} C  Hum={:.0f} %".format(t, h))
        print("-" * 40)
    except Exception as e:
        print("Error:", e)
    time.sleep(2)

こんな感じで吐き出してきます

SHT30   Temp=28.5 C  Hum=62 %
----------------------------------------
SHT30   Temp=28.6 C  Hum=62 %
----------------------------------------

アプリケーションは防水機能のある温度センサーが必要で、ポピュラーなのはds18x20の先端がsusパイプで覆われたやつが使えそうです

インターフェースが1-wireなので、増設も並列につなげていけばできるけど読み出し時間はかなりかかるらしい、なぜ増設した時に個体識別できるかはds18x20が出荷時点で固有のIDが付与される、つまりMACアドレスなどと同じ理屈、から可能ということ

 

admin

コメントを残す