Raspberry Pi3 のGPIOとセンサ間の通信規格について
*
前回のおさらい
前回GPIOの仕様を確認していくうえでアナログセンサが使えないことがわかりました。
ではこのRaspberry Piでセンサを取り扱うにはどのような選択肢があるのか考えていきたいと思います。
Raspberry pi 3 のデジタル入力に使える通信規格があるようなのでまずそれらが使えるか考えていきます。
GPIOには以下の通信規格で通信することができるので以下のどれかに対応したセンサを選ぶ必要があります。
- UART
- SPI
- I2C
- 1-wire
また、公式に様々なデバイスを簡単に使用できるSense HATというのも出ているみたいです。
これには温度センサも搭載されているのようなのですが
https://www.raspberrypi.org/forums/viewtopic.php?f=104&t=111457
にあるようにデバイスの温度に依存するようで室温計測には向かないそうです。
スペーサを設けてデバイスから離すなどの対策をすれば可能というのも見られましたがある程度自作したいとも思うのでこれはパスしたいと思います。
では改めて先ほど上げた4つがどういった特徴があるものなのか調べてみましょう。
通信規格について
UART(Universal Asynchronous Receiver Transmitter)
www.ele-lab.comここにわかりやすく説明されていますね。
Raspberry Pi UARTとgoogle検索をするとパソコンとの通信に用いたり、コントローラ間の通信をするものという位置づけなようです。
この辺も全然知らないので勉強になりますね。
センサを接続するポートというわけではないようです。
I2C (Inter-Integrated Circuit )
http://www.picfun.com/c15.html
ここが参考になるかと思います。
マスタとスレーブの関係でマスタが複数のスレーブをぶら下げて通信することができる規格のようです。
イメージがCANとかと近いのでこちらの方がイメージはしやすいですね。
使用するのはVCC,GND,SDA,SCLの4線式になりようです。今後センサを拡張していくことを考えると有力候補と考えられます。調べると以下のセンサもあるようです。
akizukidenshi.com
SPI(Serial Peripheral Interface)
SPIもI2Cと同様のシリアル通信規格となります。
シリアル・ペリフェラル・インタフェース - Wikipedia
通信に使用する線は
- SCK (Serial Clock)
- MISO(Master In Slave Out)
- MOSI (Master Out Slave In)
- SS (Slave Select)
- VCC
- GND
となり6線で、デバイスごとにSSを用意するといった仕様になるようです。
上のサイトによるとSPIはI2Cと比較すると通信速度が速く多くのデータを通信できるとのことみたいですがRaspberry Pi3にはSSは2つしかないため多くのデバイスを接続するには向いていません。
使用方法としてはUARTに近い使用方法になると推測されます。
1-wire
3線式で通信する手法で必要なのは
- Vcc
- 信号線
- GND
となっています。信号線から電源を供給して駆動する仕様のものもあるようですね。
シリアル通信でマスタとスレーブの関係でマスタからスレーブに命令することで情報を取得する。I2Cより通信速度は遅いものの長距離の伝送が可能とのことみたいです。
GPIO4を用いている例が多いようですがほかのポートが使えるかどうかは現在調査中です。わかり次第このページを更新します。
以下のようにセンサ秋月で入手可能なようです。
結論
以上から拡張性やデバイスの入手性などを考えると1-wireかI2Cのどちらかと結論づけられそうです。
選定を行ってみるとI2Cの方がセンサの種類が多そうなのでI2Cで選定を行っていきます。