Python で MPU9250 を使おうとして、
以下のリポジトリを発見。
https://github.com/FaBoPlatform/FaBo9AXIS-MPU9250-Python
ただ、既存コードを pigpio ベースで行っているので、
Apache-2.0ライセンスでもあることから、
コードを書き換えてみようとためしてみた。
pigpioのi2c関連の関数は、
pigpio.pi()で取得したオブジェクトに
smbus とほとんど同じ名前で同じ機能があるので
ほいほいと書き換えていった..
引数のアドレスをpigpioハンドラにすれば
ほとんど変更いらずだわ..
..と、思っていたのだけど..
smbusの
read_i2c_block_data(addr, cmd)
の戻り値が
long[]
になっているのに対し、
pigpio の
i2c_read_i2c_block_data(handle, reg, count)
の戻り値は
Tupple。
1要素目が0以上が正常読み込みしたことをあらわし、
負値の場合はエラーコードになる。
そして2要素目が取得した値なのだけど..
これがbytearrayになってる..
..めんどくさー
おきをつけあれ。
ちなみに..私は以下のラップ関数で逃げました。
ご参考まで。
誤りがあれば、コメント欄にご指摘ください。
以下のリポジトリを発見。
https://github.com/FaBoPlatform/FaBo9AXIS-MPU9250-Python
ただ、既存コードを pigpio ベースで行っているので、
Apache-2.0ライセンスでもあることから、
コードを書き換えてみようとためしてみた。
pigpioのi2c関連の関数は、
pigpio.pi()で取得したオブジェクトに
smbus とほとんど同じ名前で同じ機能があるので
ほいほいと書き換えていった..
引数のアドレスをpigpioハンドラにすれば
ほとんど変更いらずだわ..
..と、思っていたのだけど..
smbusの
read_i2c_block_data(addr, cmd)
の戻り値が
long[]
になっているのに対し、
pigpio の
i2c_read_i2c_block_data(handle, reg, count)
の戻り値は
Tupple。
1要素目が0以上が正常読み込みしたことをあらわし、
負値の場合はエラーコードになる。
そして2要素目が取得した値なのだけど..
これがbytearrayになってる..
..めんどくさー
おきをつけあれ。
ちなみに..私は以下のラップ関数で逃げました。
ご参考まで。
def read_i2c_block_data(pi, handler, reg, count):
"""
SMBusのread_i2c_block_dataと戻り値を合わせるための関数。
引数:
handler pigpio I2C ハンドラ
reg デバイスレジスタ
count 読み込むバイト数
戻り値:
int[] read_i2c_block_dataの戻り値はlong[]だがpython3
なのでint[]
例外:
ConnectionError エラーの場合
"""
if pi is None:
try:
import pigpio
except:
raise
pi = pigpio.pi()
(b, d) = pi.i2c_read_i2c_block_data(handler, reg, count)
if b >= 0:
data = []
for i in range(count):
value = int(d[i])
data.append(value)
return data
else:
raise ConnectionError('Error:{} in i2c_read_i2c_block_data'.format(
str(b)))
誤りがあれば、コメント欄にご指摘ください。
0 件のコメント:
コメントを投稿