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)を選択すると、いくつか項目が表示されます。
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通信の応用例
サーボモーターの制御 サーボモーター はPWM制御を用いて、任意の角度まで回転させることができるモーターで、ロボットアームなど精密な動作が必要な時に使われます。ロボットアームは複数のサーボモーターを組み合わせることにより、自由度が増え、複雑な動きをすることが可能となります。 ロボットの動きが複雑になるほど、必要なサーボモーターの数が5個、10個と増えてきますが、1つのサーボモーターに対し1つのPWMピンで制御するのは限界があります。そこで、i2c通信とPCA9685というサーボモーターコントローラーを用いて、2つのピンを用いるだけで数十個のサーボモータ を制御する方法を解説します。 Raspberry Piのi2c通信有効化につ