pythonからi2cを触れるようにする

投稿日:

前回の続き.i2cで遊ぶのにシェルスクリプトは嫌なので,rubyかpythonを使いたいが,pythonしかはいっていないのでpythonでi2cを使えるようにした.

実は,i2c-toolsでpy-smbusのモジュールもビルドしていて,インストールもしていたけどライブラリの依存関係でうまく動かなかったので入れなおし.

makeでビルドすると,なぜかlibi2c.soとリンクしてくれず, pythonでimport smbusとすると,i2c_smbus_accessへの参照エラーで動かない.しょうがないので,smbus.soを作るときにlibi2c.soとリンクするようにあとから指定してインストール.

% cd i2c-tools-master
% cd py-smbus
% rm -fr build
% python setup.py build
% i586-poky-linux-uclibc-gcc -m32 -march=i586 -shared -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed build/temp.linux-i586-2.7/smbusmodule.o ../lib/libi2c.so -o build/lib.linux-i586-2.7/smbus.so
# python setup.py install

これでインポートできるようになった.

こんなスクリプトを実行すると温度が出力される.

# cat test_adt7410.py
import smbus

i2c = smbus.SMBus(0)

addr = 0x48

th = i2c.read_byte_data(addr, 0)
tl = i2c.read_byte_data(addr, 1)

temp_d = th *256 + tl
temp = temp_d / (8.0 * 16.0)

print(temp)

# python test_adt7410.py
26.9375

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です