micro:bitで温度センサ(TMP102)をI2Cで繋いで温度計測してみた。
昨日の続きで、TMP102という温度センサICのブレークアウトボードを繋いでみた。


プログラムは、次のように書いた。
from microbit import display, Image, uart, sleep, i2c, pin19, pin20
display.show(Image.HAPPY)
uart.init(baudrate=9600, bits=8, parity=None, stop=1)
i2c.init(freq=10000, sda=pin20, scl=pin19)
addr = 0x49
while True:
i2c.write(addr, b'\x00')
data1, data2 = i2c.read(addr, 2)
d = (data1*256+data2)/16
if data1 >= 128:
t1 = (d-4096)*128/2047
else:
t1 = d*128/2047
# msg = "result = " + hex(int(d)) + "\n\r"
msg = "Temperature = " + str(t1) + "\n\r"
uart.write(msg)
sleep(2000)
addrという変数は、TMP102のI2Cバス上でのデバイスのアドレス値で、ADD0というピンをHighに配線で設定したので0x49にしている。
(ADD0ピンをLowにした場合は、0x48になるので注意。)
i2c.writeで、TMP102のレジスタアドレスの0番を指定し、そのあとi2c.readで16bit(2バイト)を読み出す。
レジスタ0番には温度の計測値が格納されているので、これを読み出すことで、温度の計測データを取り出すことができる。
あとは、セ氏の℃に合わせる計算をして、msgという文字列に変換し、uart.writeでシリアルポートでPCに出力している。
micro:bitとPCとのシリアル通信は前にやっているのと同じだ。
PCの側ではTeraTermなどのターミナルソフトで温度の計測値を受け取って表示させることができる。
