ちょっと前にI2Cの温度センサー基板を買っておいたので,朝からちょっと工作をして Raspberry Piとつないでみた.
I2C以外にもHDMI,Ether,USBがつながっている状態.I2Cの結線は回路図(PDF)から以下のようにした.
- RPIのP1: 1 (3.3V) → 温度センサーのV+端子
- RPIのP1: 3 (SDA1) → 温度センサーのSDA端子
- RPIのP1: 5 (SCL1) → 温度センサーのSCL端子
- RPIのP1: 9 (GND) → 温度センサーのGND端子
ちなみに使った温度センサーはここのTMP102という温度センサーチップの載った基板.マニュアルによるとADD0ピンの接続先でアドレスが変わるというので,基板のレジストをはがしてGNDとショートさせて,アドレスを0x48に設定した (C1の右下の半田の盛ったところ).また,SDAとSCLはRaspberry Pi上でプルアップされているので,この基板のプルアップ抵抗 R1,R2 (ともに1608サイズの1kΩ)は取り外した.
で,Raspbianから動作確認.i2cdetectでアドレスを確認.
# i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
確かに0x48で見えている.
次に,レジスタの読み出し.
- レジスタ0: 温度
- レジスタ1: コンフィギュレーションレジスタ
- レジスタ2: T_LOW
- レジスタ3: T_HIGH
だそうなので,順に読みだしてみた.
# i2cget -y 1 0x48 0 w 0xd015 # i2cget -y 1 0x48 1 w 0xa060 # i2cget -y 1 0x48 2 w 0x004b # i2cget -y 1 0x48 3 w 0x0050
レジスタ0の読み出し結果が0xd015になっているが,バイト0の下4ビットは0のはずなので,エンディアンが逆っぽい。0x15d0だとすると,0x15d0 = 5584, 5584/256 = 21.8125℃.ほぼ室温.
読み出しはi2cdumpでもいいみたい.
# i2cdump -y -r 0-3 1 0x48 w 0,8 1,9 2,a 3,b 4,c 5,d 6,e 7,f 00: f015 a060 004b 0050
温度がちょっと変わったらしい.
今回はテスト用に短めの線でつないだけど,もう少し長くして情報盤 (LAN SWとTVブースターが入っている) の内部温度をモニターしようと思う.