Raspberry PiでI2Cを使えるようにする方法を解説しています。
I2C(Inter-Integrated Circuit)は、周辺デバイスとのシリアル通信の方式です。
I2Cは同じ基板内のような近距離で直結したデバイスとシリアル通信するための規格であり、離れた装置間の通信には向いていません。
Raspberry PiでI2Cを使えるようにすることで、I2C対応のモジュールを制御することができるようになります。
I2Cの設定
Raspberry PiでI2Cを使える設定をします。
エディタで以下のファイルを開き、モジュールを追加します。
$ sudo nano /etc/modules
開いたファイルに、以下の行を追加します。これで、I2Cモジュールの追加が完了しました。
i2c-bcm2708 i2c-dev
モジュールを有効にするためにRaspberry Piを再起動するため、以下のコマンドを入力します。
$ sudo reboot
以下のコマンドでライブラリをインストールする。
$ sudo apt-get install python-smbus
上のコマンドを入力した時点で、i2c-toolsはインストールするか聞かれるため、インストールしておきましょう。
使っているディストリビューションによりますが、/etc/modprobe.d/raspi-blacklist.confがある場合は、以下の行をコメントアウトする必要があります。先頭に#をつけることで、コメントアウトします。
ファイルが存在しない場合は、対応不要です。
#blacklist spi-bcm2708 #blacklist i2c-bcm2708
次に、モジュールが動作していることを確認します。
以下のコマンドを実行して、モジュールの起動を確認します。
$ dmesg | grep i2c [ 11.584916] bcm2708_i2c bcm2708_i2c.0: BSC0 Controller at 0x20205000 (irq 79) (baudrate 100k) [ 11.603944] bcm2708_i2c bcm2708_i2c.1: BSC1 Controller at 0x20804000 (irq 79) (baudrate 100k) [ 11.728396] i2c /dev entries driver
I2Cでバイスの接続
次に、I2Cにデバイスを実際に接続します。
Raspberry PiのI2Cは、以下のSCL,SDAを使用します。3.3VとGNDは接続するデバイスの電源として使用します。
ここでは、I2Cデバイスとして、秋月の「ADT7410使用 高精度・高分解能 I2C 16bit 温度センサモジュール」を使用します。
I2Cの接続は、SCL,SDAの信号線をプルアップする必要がありますが、このモジュールでは、回路内で既にプルアップされているため、Raspberry Piに接続するだけで使用できます。
モジュールのVDD,SCL,SDA,GNDに、Raspberry Piの3.3V,SCL,SDA,GNDを接続します。
接続確認
最後に、Raspberry Piで以下のコマンドを実行して、接続を確認します。
何も接続していない場合は、以下のコマンドを実行しても、接続デバイスのアドレスは表示されません。
$ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --
接続されている場合は、接続されたデバイスのアドレスが返ります。
$ sudo i2cdetect -r -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --