PythonからI2Cを制御する(1) (内容が古くなりましたが記録として残します)

いずれPython3にしないといけないとはわかってはいるのですが開発環境が整うまで、Python2でできるところまで進めることにします。

==
さて、前回までにi2c-toolsとpython-smbus をインストールしたので、pythonのコマンドラインからI2Cインターフェースにアクセスしてみます。挙動が既知で諸々の作法が不要な(要するにコマンドが最小限で動く)I2Cセンサーがあると良いのですが、手元にそういうものがなかったので、Arduino互換のSeeeduino基板に"slave-receiver"というスケッチを入れてI2Cセンサーの代わりをさせることにしました。

RasPi(Python) <--I2C-->Seeeduino(slave-receiver) --> Mac/Arduino IDE(シリアルモニタ)

という構成です。RasPiからPythonコマンドを叩いた結果がMacのシリアルモニタから出力されるのを確認しました。

$python
>>>import smbus
>>>bus = smbus.SMBus(1)
>>>bus.read_byte(0x80)
0
>>>bus.read_word_byte(0x80, 0x00)
65280
...
(この間シリアルモニタを観測している)

と言う具合です。

ここでpython-smbusパッケージで用意されているfunctionには2byteアドレスがサポートされていないことに気づきました。私がこれから使おうとしているI2Cデバイスにはデバイスアドレス(デバイス内のレジスタをアクセスするためのアドレス)が2byte必要なのです。次はここを解決しようと思います。

今日はここまで

==
備忘録
・SeeeduinoのI2Cコネクタは5VなのでRasPiに直結してはいけません(やってしまった、ということ)。運良くRasPiボードは死ななかったものの、ACアダプタが死にました。




コメント

このブログの人気の投稿

i2c-tools 備忘録(内容が古くなりましたが記録として残します)

python-smbus(内容が古くなりましたが記録として残します)