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

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

更新日 : 2024年2月16日

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にリモート接続する手順を解説しています。

ラズパイ/Jetsonの消費電力測定&モバイルバッテリー稼働時間の計算 (RPZ-PowerMGR)

RPZ-PowerMGRを使って、Raspberry Pi(ラズパイ)/Jetson Nanoの消費電力を測定する方法の解説です。モバイルバッテリーでの運用可能な時間を計算し、実際の運用時間と比較しました。

複数のステッピングモーターを制御する (Raspberry Pi + RPZ-Stepper)

RPZ-Stepperは基板1枚に2台のステッピングモーターを接続でき、最大で基板2枚、モーター4台を制御できます。本記事では、制御ソフトウェアcgstepで複数ステッピングモーターを制御する方法を解説しています。複数台のモーターを使うことでX/Y/Z軸移動など複雑な動きを実現できます。

RPZ-PIRS (Raspberry Pi用 人感/明るさセンサー/赤外線 拡張基板)

Raspberry Pi(ラズパイ)に人感、明るさセンサー、赤外線送受信機能を搭載できる拡張基板です。人感センサーで人や動物を検知してカメラで撮影したり、赤外線で照明をONするような使い方が可能です。周囲の明るさをモニターできる他、外付温湿度/気圧センサー(別売り)を接続することで、温度、湿度、気圧の測定機能を追加できます。7色表示可能なRGB LEDにステータスを表示したり、スイッチを押すことで特定の動作をさせることができます。