Raspberry PiでI2C/SPIの有効化方法と仕組み

I2C/SPIの仕組み、Raspberry Pi(ラズパイ)で有効化する方法を解説しています。I2C/SPI対応のセンサーやディスプレイ、ADコンバーターなどを利用することで、Raspberry Piの可能性がさらに広がります。Raspberry Pi OSインストール後は無効になっているので、こちらを参考に有効化して下さい。

更新日 : 2024年9月28日

I2C/SPIとは

I2C、SPIはいずれも、Raspberry Piと各種IC(センサーなど)との間で通信するための規格の一種です。

以下は、センサーをI2CもしくはSPIで接続した場合の動作イメージです。Raspberry Piからは測定などの動作指示を出し、センサーが測定データを送信する、といった具合です。複数のICを接続することも可能です。

I2C/SPIを使ったセンサーとの通信例

Raspberry Pi OSをインストール後はI2C/SPIともに無効になっています。I2C対応のICを使用するにはI2Cを有効に、SPI対応のICを使用するにはSPIを有効にする必要があります。

I2C接続の温湿度/気圧センサーBME280と、明るさセンサーTSL2572を搭載する拡張基板「RPZ-IR-Sensor」

I2C/SPIの有効化

有効化する手順を説明します。

スタートメニューから、「設定 -> Raspberry Piの設定」をクリックします。

設定ツールが起動するので、上部タブから「インターフェイス」を選択し、I2CとSPIから有効にしたいもののスイッチをクリックしてONにします。

「OK]をクリックして完了です。

これでI2C/SPIを使う準備が整いました。設定ツールが用意されているので、非常に簡単ですね!

物理的な接続(I2C)

I2Cでは、SDA(GPIO2)とSCL(GPIO3)の2つの信号線がセンサーと物理的に接続され、通信を行います。

具体的には40ピンヘッダーの3番と4番のピンが使用されます。ピン番号とGPIOの対応については以下の図を参照してください。

GPIOピン配置
出典 : Raspberry Pi GPIO

それぞれのICは独自の「アドレス」を持っていて、Raspberry Piはアドレスを指定することで特定のICと通信しています。そのため、同じ信号線に複数のICを接続しても、個別に制御することが可能です。逆に、偶然アドレスが重なった2つのICを接続したり、同一のICを2つ接続することはできません。なお、ICによってはアドレスの衝突を避けるためにアドレスを切り替えられるものもあります。

I2Cはわずか2本の信号線で通信できる点がメリットで、センサーなどのICでは広く使われています。




物理的な接続(SPI)

SPIでは、SCLK(GPIO11)、MOSI(GPIO10)、MISO(GPIO9)の3つの信号線がセンサーと物理的に接続され、通信を行います。また、I2Cのようなアドレスは無く、通信先ICを指定するためのCE信号がICにつき1つ必要です。以下の図は2つのICを制御するため、CE0(GPIO8)、CE1(GPIO9)を使っています。

具体的なピン番号とGPIOの対応については上記I2Cの図を参照してください。

SPIではCE信号を使って通信相手を選択します。複数のICを接続する場合はCE信号が重ならないようにする必要があります。また、制御プログラムについても、使用したCE信号に合わせる必要があります

I2Cで接続されているデバイスの確認

最後に、I2C接続がうまくできているかの確認や、アドレスの確認に便利な方法を紹介します。普通にI2Cを使う場合はこの手順は必要ありません。

ターミナルを開いて、以下の$に続くコマンドを実行します。

$ i2cdetect -y 1

すると、全てのアドレスについてI2Cで接続されたデバイスをスキャンして、結果を表示します。以下の例ではアドレス0x39、0x76、0x77に接続された3つのデバイスを検出しました。なお、アドレスはデバイスによって異なります。

i2cdetectで検出

この方法で、I2Cの接続がうまくできているかと、デバイスのアドレスが分かります。

ただし、一部のデバイスは応答を返さないものもあり、そういった場合はこの方法では検出できません。

まとめ

I2C/SPIの仕組み、Raspberry Pi(ラズパイ)で有効化する方法の解説は以上です。I2C/SPI対応のセンサーやディスプレイ、ADコンバーターなど様々なデバイスを利用することで、Raspberry Piの可能性がさらに広がります。

温度、湿度、気圧、明るさ、二酸化炭素センサーなどをI2Cで制御するIndoor Corgi製の拡張基板もあるので、ぜひご利用下さい。

次のステップとして、VNCを利用してPCからRaspberry Piにリモート接続する手順を解説しています。

BME280センサーとラズパイで気温、湿度、気圧を測定する

Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、BME280センサーで気温、湿度、気圧を測定する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定や記録ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。

ラズパイで赤外線制御 (家電、エアコン、照明、テレビなどを制御するホームIoT)

Pythonとpigpioを使ってRaspberry Piで赤外線の送受信を行う方法について解説しています。サンプルプログラムを用意しているので、簡単に受信、登録、送信動作をさせることができるほか、データ解析も可能です。赤外線を使ってエアコン、照明、テレビなどの家電を制御することが可能になります。

RPZ-IR-Sensor (Raspberry Pi用 温度/湿度/気圧/明るさ/赤外線 ホームIoT拡張ボード)

動作をプログラミング可能な、Raspberry Pi/Zero(ラズパイ)用ホームIoT拡張ボードです。温度、湿度、気圧、明るさセンサー、赤外線送受信機能を搭載。温度が上がったらエアコンをオンにする、暗くなったら照明を点灯する、外出先から家電の操作をする、気温や日照時間を記録する、といった使い方が可能です。LEDにステータスを表示したり、スイッチを押したら特定の処理をすることもできます。