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を接続することも可能です。
Raspberry Pi OSをインストール後はI2C/SPIともに無効になっています。I2C対応のICを使用するにはI2Cを有効に、SPI対応のICを使用するにはSPIを有効にする必要があります。
I2C/SPIの有効化
有効化する手順を説明します。
スタートメニューから、「設定 -> Raspberry Piの設定」をクリックします。
設定ツールが起動するので、上部タブから「インターフェイス」を選択し、I2CとSPIから有効にしたいもののスイッチをクリックしてONにします。
「OK]をクリックして完了です。
これでI2C/SPIを使う準備が整いました。設定ツールが用意されているので、非常に簡単ですね!
物理的な接続(I2C)
I2Cでは、SDA(GPIO2)とSCL(GPIO3)の2つの信号線がセンサーと物理的に接続され、通信を行います。
具体的には40ピンヘッダーの3番と4番のピンが使用されます。ピン番号と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つのデバイスを検出しました。なお、アドレスはデバイスによって異なります。
この方法で、I2Cの接続がうまくできているかと、デバイスのアドレスが分かります。
ただし、一部のデバイスは応答を返さないものもあり、そういった場合はこの方法では検出できません。
まとめ
I2C/SPIの仕組み、Raspberry Pi(ラズパイ)で有効化する方法の解説は以上です。I2C/SPI対応のセンサーやディスプレイ、ADコンバーターなど様々なデバイスを利用することで、Raspberry Piの可能性がさらに広がります。
温度、湿度、気圧、明るさ、二酸化炭素センサーなどをI2Cで制御するIndoor Corgi製の拡張基板もあるので、ぜひご利用下さい。
次のステップとして、VNCを利用してPCからRaspberry Piにリモート接続する手順を解説しています。
TSL2572センサーとラズパイで明るさ(照度)を測定する
Indoor Corgiのセンサー制御ソフトウェア「cgsensor」を利用して、TSL2572センサーで明るさを測定する方法を解説します。コマンドラインツールを使って1行もコードを書かずに測定ができるほか、Pythonパッケージを使えばご自身のプログラムから簡単にセンサーを制御できます。
ステッピングモーターを指定位置まで回転させる基本手順 (Raspberry Pi + RPZ-Stepper)
RPZ-StepperとRaspberry Pi(ラズパイ)を使ってステッピングモーターを指定位置まで回転させる基本手順を解説しています。制御ソフトウェアcgstepの使い方と、必須のパラメーターについても解説しています。
RPZ-PowerMGR (Raspberry Pi/Jetson Nano用 電源管理/制御/RTC拡張基板)
スイッチで電源ON/OFF、指定時刻に電源ON/OFF、シャットダウン後自動電源OFFを可能にする拡張基板です。Raspberry Pi(ラズパイ)やJetson Nanoの電源の課題を解決し、省電力運用を可能にします。RTCで電源OFF時も時刻を保持します。USB Type-C端子を搭載し、モバイルバッテリーでも利用できます。