会社にはI2Cアナライズできるオシロがある(超便利)。
I2Cのタイミングとアナライズ結果(通信データの内容)が自分の家でも解析できたらラズパで便利だろうなと思う。そこで青島(チンタオ)製を購入。バッタものらしきは1,000円からでもある。あまり安いと苦労するのは中国製にありがちなので少し奮発して高めなものを。
結構は秀逸だった。ソフトのできもいい。今回の使用用途であれば十二分だ。解析されたコードもOKだ。これがないと意味ないけど。
I2Cの7bitアドレス
0xa0を設定とあたっが、アナライズでは0x50?
これが理解できなかったが、あれこれやってみて理解した。0x67の結果は(これは会社のファームの関係)は0xCEだった。納得。買ってよかったな一品。以下は会社のオシロと青島の波形。
ラズパイでの実験
以下で接続確認する。デバイスのアドレスが見れる。
$i2cdetect -y 1
—- pythonでの温度センサの接続例 —
●熱電対(MCP9600専用IC使用)
<pre class="lang:python decode:true">#!/usr/bin/python # -*- coding: utf-8 -*- import smbus import time i2c = smbus.SMBus(1) address = 0x67 cnt = 1 while True: block = i2c.read_i2c_block_data( address, 0x00, 2 ) temp = ( block[0] <<8 | block[1] ) if( temp >= 4096 ): temp -= 8192 print(cnt,":","%2.2f" % (temp * 0.0625)) cnt+=1 time.sleep(2)
●switch sience LM75B
※13bitのデータはLSB側から3bitはデータではないので全体(int)として右に5ビット右シフト
#!/usr/bin/env python import smbus import time i2c = smbus.SMBus(1) addr=0x48 def getTemp(): block = i2c.read_i2c_block_data( addr,0x00,2) val = block[0]<<8 val = val | block[1] if(val >= 0x7fff): val = val - 0xffff result = ((val >>5) * 0.125) return result while 1: raw = getTemp() rt = raw print("{0:.2f}".format(rt)) time.sleep(1)No tags for this post.