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通信の応用例

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

Related Posts

ROSパッケージ紹介 | depthimage_to_laserscanでデプスカメラ情報からscanトピックを発行
ROSパッケージ紹介 | depthimage_to_laserscanでデプスカメラ情報からscanトピックを発行
概要 gmappingなどの多くのマップ生成パッケージでは、sensor_msgs/LaserScanの型のトピックを受信することが多いと思います。そのような時に、scanを発行できるデバイスはLidarなどがありますが、Lidarを...
Read More
Arduinoでカラーセンサーを使って色を識別する
Arduinoでカラーセンサーを使って色を識別する
概要 物体の光の反射率を測定するフォトリフレクタは、発光素子と受光素子が配置されていて光を物体に反射させてその強度を測定することで、物体の存在確認や白黒パターンの検出などをすることができます。 光を検出できるセンサーは色々な種類があり...
Read More
Arduinoでi2cで通信できているかを確認する | i2cアドレスの確認方法
Arduinoでi2cで通信できているかを確認する | i2cアドレスの確認方法
概要 i2c通信とは、SDAとSCLの2つのピンだけで、複数のモジュールとの通信が可能なプロトコルになります。 Arduinoもi2c通信には対応していて手軽に使うことができますが、うまくi2c通信ができないこともあります。本記事で...
Read More

サイトについて

RoboStationは誰でも手軽にロボットを製作できるようにすることを目的としたEC・ハウツーサイトです。