i2c通信とは

i2c通信とは、フィリップス社が提唱したシリアル通信のインターフェースで、SDAとSCLの2つのピンだけで、複数のモジュールとの通信が可能になっています。

i2cを使うメリットとしては下記が挙げられます。

  • 2つの汎用ピンだけを用いて、アドレスが余っている限り、デバイスやセンサを無数に接続することが可能
  • マイコンに繋がっているデバイスやセンサのうち1つがクラッシュしても他のデバイスやセンサと通信を継続することが可能

センサから値を取得したり、マイコン間での通信をしたり、デバイスへの命令を送ったりすることが2つのピンだけで完結するという非常に素晴らしい通信方式です。

Raspberry Piでi2c通信を有効化する

Raspberry Piでi2c通信を有効化するには下記コマンドで設定をします。

sudo raspi-config

Raspberry Piの設定画面が開くので5. Interfacing Options(古いrapbianの場合は9. Advanced Options)を選択すると、いくつか項目が表示されます。

raspi config

I2Cを選択し、「YES」を押します。カーネルモジュールを自動ロードするか聞かれた場合は「YES」、Finishボタンが出たら押下しましょう。リブートするかを聞かれたら「YES」でリブートしましょう。

リブート後、下記コマンドを実行してみましょう。

ls /dev/*i2c*

実行後に下記が表示されればi2cが有効になっています。

/dev/i2c-1

追加ツールのインストール

sudo apt-get install -y i2c-tools

上記コマンドで、i2cの追加ツールをインストールしましょう。よく使うものとしては、i2cdetectになると思います。i2cで通信を行うデバイスのSCL/SDAのピンと、Raspberry PiのSCL/SDAのピンを繋いだ上で、下記コマンドを実行すると、アドレスを見ることができます。

i2cdetect -y 1

i2c通信の応用例

https://rb-station.com/blogs/article/pca9685-raspbery-pi-python

https://rb-station.com/blogs/article/arduino-color-sensor

I2c