2019年8月3日土曜日

RaspberryPI で I2C インターフェイスを使う

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をアクセスできるようにシステムにおしえておく事


実際にエラーがでたライブラリを調べてて気づいた

とある温度センサーのライブラリ


おしまい