MENU
Raspberry Pi

RaspberryPiでのI2C通信の有効化する方法と、i2c-toolsの使い方

はじめに

RaspberryPiでI2C通信を有効化する方法と、確認に便利な「i2c-tools」の使い方について解説します。

RaspberryPi OS (Bullseyes)では、インストールした状態で「I2C通信」が無効化されているため、I2C通信のプログラムを作る際は「有効化」が必要です。

また、有効後、デバイスのI2Cアドレスを確認したり、配線確認を行うには、デフォルトで使える「i2c-tools」が便利です。コマンド1つで、デバイスのI2Cアドレス(スレーブアドレス)が表示できます。

今回は上記「I2C通信の有効化方法」と「i2c-toolの使い方」について解説します。

環境

今回の記事は以下の環境で作成しています。

環境 バージョンなど 備考
RaspberryPi 2 Model B RaspberryPi 2/3/4  Zero各種でも使えます
OS RaspberryPi OS (bullseye) 32bit版です

I2C通信の有効化方法

RaspberryPiのデスクトップ「左上のアイコン」から有効化を行います。手順は以下の通りです。

① RaspberryPiのデスクトップ左上の「RaspberryPiのアイコン」をクリックします。

「設定」を選択して「RaspberryPiの設定」をクリックします。

RaspberryPiの設定画面の表示方法

④ 開いた画面の「インターフェイス」タブを選択します。

「I2C」のスイッチをクリックします。〇が右側になれば有効です。

OKボタンを押して画面を閉じます。

I2C通信の有効化方法

以上で「I2C通信の有効化」は完了です。

「i2c-tools」でI2Cアドレスを確認する

通信を行いたいデバイスを正しく配線してから、RaspberryPiの端末で以下のi2cdetectコマンドを実行します。

i2cdetect -y 1

※ 引数の内容は後述します。

i2cdetectコマンドを実行すると、以下のようにデバイスのI2Cアドレス(スレーブアドレス)が16進数で表示されます。

「表示されたアドレス」と「デバイスのアドレス」が一致していれば、デバイスが正しくRaspberryPiに配線されています。

esu@raspberrypi:~ $ i2cdetect -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: -- -- -- -- -- -- -- --
esu@raspberrypi:~ $

I2Cアドレス(スレーブアドレス)は、基本的にデバイスの取扱説明書・データシートに記載されています。「デバイスのアドレスが分からない」という方はデータシート等を確認してみてください。

コマンドの引数

前述したコマンドの引数の内容は以下のとおりです。「I2Cのバス番号」については、RaspberryPiの3番(SDA)・5番(SCL)ピンを使用している場合、「1」固定で問題ありません。

コマンド 引数 備考
i2cdetect RaspberryPiに接続されているデバイスのアドレスを表示します。
-y コマンドからの確認メッセージを、すべてYESで答えるオプションです。
1 I2Cのバス番号「1」を固定で指定します。

【参考】yオプションをつけないとどうなる?

ちなみに「-y」を付けないと、以下のように「このプログラムはI2Cバスを混乱させ、データの損失や…続けますか?」というメッセージが表示されます。

おそらく「運用/稼働中のシステム」で誤って実行した場合の想定してのものなので、デバイスとの配線を確認している状況であれば、YesでOKになります。

※ 「-y」オプションは以下の確認を、すべて「Yes」で答えるオプションです。

esu@raspberrypi:~ $ i2cdetect 1
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-1.
I will probe address range 0x08-0x77.
Continue? [Y/n] y
     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: -- -- -- -- -- -- -- --
esu@raspberrypi:~ $

アドレスがうまく表示されない場合

有効化されていない

I2C通信を有効化していない場合、以下のメッセージが表示されます。前述の手順でI2C通信を有効化してください。

esu@raspberrypi:~ $ esu@raspberrypi:~ $ i2cdetect -y 1
Error: Could not open file `/dev/i2c-1' or `/dev/i2c/1': No such file or directory
esu@raspberrypi:~ $

配線抜け・間違い

電源線・通信線が抜けている、SDA/SDLが逆などの場合、以下のようにアドレスが表示されません。配線をもう一度よく確認してみてください。

esu@raspberrypi:~ $ 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: -- -- -- -- -- -- -- --

まとめ

RaspberryPiでI2C通信を有効化する方法と、I2Cの確認に便利な「i2c-tools」の使い方について解説しました。

デバイスの接続確認は、自分の作ったプログラムからでも確認できますが、プログラムのバグなのか、配線の間違いなのかの切り分けがしずらくなります。

その点、i2c-toolを使えば配線に集中できるので、i2c-toolsを使う方法を、おすすめします。

I2C通信で温度センサを使ってみよう

このブログでは、I2C通信で温度センサ(TMP102)を使う方法についても解説しています。I2C通信の設定ができたら、以下の記事から温度センサにもチャレンジしてみましょう。

UdemyにRaspberryPiの講座があります

実はUdemyで『RaspberryPi』『Pico』『Arduino』の基礎/実践講座が見れます。無料もあるので「動画で学びたい」「本は読み尽くした」という方は以下のリンクをご覧ください。

⇒ RaspberryPiの講座一覧はこちら

以下の記事で、RaspberryPi・RaspberryPi Picoのおすすめ講座3選も解説しています。

応援・要望お待ちしてます

ブログを見ていて「この辺を詳しく知りたい」「このライブラリの使い方を知りたい」「こんなことで困ってる」...etc があれば、コメント・問い合わせ・Twitterで教えてください。質問・ご要望に合わせて解説記事を作ります。

ブログを気に入っていただけたり、「応援してもいいよ」という方がいたら、ブログやSNSでの紹介をお願いします。 あたたかい応援は、中の人の更新の大きな励みになります。

ABOUT ME
えす
現役のソフトウェアエンジニアです。 C++ C# Python を使ってます。10年ちょい設計/開発部門にいましたが、今はQAエンジニアっぽいことをしています。

COMMENT

メールアドレスが公開されることはありません。