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で使われる単位について
ROSで使われる単位について
ROS(Robot Operation System)はオープンソースのロボット開発プラットフォームで、様々な技術要素をライブラリとして使えるため、非常に簡単にロボットシステムを構築することができます。 ROSで使われる距離・重...
Read More
[ROS melodic] Intel RealSense D435iで/scanと/imuのトピックを発行する
[ROS melodic] Intel RealSense D435iで/scanと/imuのトピックを発行する
ROS melodicにおいて、小型の深度センサーである、Intel RealSense D435iを用いて、マップ生成や自己位置推定などに必要な/scanと/imuのトピックを発行したいと思います。RealSenseにはD435とD...
Read More
NVIDIA Jetson Nanoにケースと冷却ファンを取り付ける
NVIDIA Jetson Nanoにケースと冷却ファンを取り付ける
NVIDIA Jetson Nanoを動かす際、アクリルケースに入れておくことと、冷却ファン(扇風機)を取り付けておくことをおすすめします。 アクリルケースは、マイコンに埃が溜まってしまったり、誤って傷つけたりショートさせて壊して...
Read More

サイトについて

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