Raspberry Pi PR

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版です

RaspberryPi 4 (8GBモデル)

解説はRaspberryPi 「2」 ですが、今買うなら、性能が大幅アップした「4」がおすすめです。 後継機なのでピンアサインは同一で、解説と同じように使えます。

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通信の設定ができたら、以下の記事から温度センサにもチャレンジしてみましょう。

お知らせ

今月号のInterfaceは『RaspberryPi 5』特集です!

今月号ののInterfaceは「RaspberryPi 5」特集!

実験などを通じた性能測定や特徴・変更点の解説。新規に追加されたI/Oボード「RP1」の特徴と謎。Pi5のはじめかたやLinuxコマンド入門などが特集されています。

3月25日発売です。

質問・要望 大歓迎です

「こんな解説記事作って」「こんなことがしたいけど、〇〇で困ってる」など、コメント欄で教えてください。 質問・要望に、中の人ができる限り対応します。

使えたよ・設定できたよの一言コメントも大歓迎。気軽に足跡を残してみてください。記事を紹介したい方はブログ、SNSにバシバシ貼ってもらってOKです。

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

COMMENT

メールアドレスが公開されることはありません。 が付いている欄は必須項目です