Rasberry PI の OSは、Raspbian Buster Lite 2019-07-10 のものを使った。
ラズパイのコンフィグレーターを使って
$ sudo raspi-config
Interfacing Optios を選択、
I2C を ONにする。で、Finishして設定を書き込む。
次に
/boot/config.txt に
$ sudo vi /boot/config.txt
...前略
# Uncomment some or all of these to enable the optional hardware interfaces
dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
# これ↓を足した
dtparam=i2c_baudrate=50000
...攻略
reboot する
i2cdetectを使いたいのでツールを導入
$ sudo apt-get install i2c-tools
起動時のログ(dmesg)にI2Cドライバーが読み込まれているか確認
$ dmesg | grep i2c
[ 5.935833] i2c /dev entries driver
接続されているI2Cデバイスをサーチ
# I2Cインターフェイスのリストを見てみる
$ i2cdetect -l
i2c-1 i2c bcm2835 I2C adapter I2C adapter
# i2c-1の1がi2c 1番セットっぽい。
# Raspberry pi 3は2セットあるが2セット目は配線してないので出てこないのかな?
# 1番のリストを取ってみる
$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: 40 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
# $40 に INA219(電流/電圧)がつながっている
# 何もつながっていない、またはdetectに対応していないI2Cデバイスなら
# 全部 -- となる。
最近のLinuxはセキュリティが厳しいので、I2Cインターフェイスにアクセスしていいユーザーの設定も必要
たとえば zabbixエージェントであれば
追記 2021/01/25
# sudo usermod -aG i2c zabbix
としておく。userが なす太郎であれば sudo usermod -aG nasutaro となる
pythonがアクセスする時に
IOError: [Errno 121] Remote I/O error
とでるのは、そもそもI2Cのインターフェイスがonになってないの理由ではなく、そのユーザーにI/Oをアクセスできるようにシステムにおしえておく事
実際にエラーがでたライブラリを調べてて気づいた
おしまい