ラズパイとArduinoで使えるインターフェースのまとめ
ラズパイとarduinoのそれぞれで使えるIFが複数ありますが、
各インターフェースがどのようなものなのかよく分からなかったので概要までまとめてみました
インターフェース一覧
まずそれぞれで使える一覧のまとめですが、以下のようになります
| 名前 | 区分 | 主な用途 | rasberry pi | arduino | 開発年 | 開発者(企業) |
|---|---|---|---|---|---|---|
| SSH | リモート接続 | CUIで本体を操作する | 〇 | × | 1995年 | タトュ・ウルネン (Tatu Ylönen) |
| VNC | リモート接続 | GUIで本体を操作する | 〇 | × | 1998年頃 | Olivetti & Oracle Research Laboratory社(ORL) |
| リモートGPIO | リモート接続 | リモートでGPIOを操作する | 〇 | × | 2010年代 | Philip Howard |
| SPI | デジタルIF | 周辺機器の操作、センサデータの取得 | 〇 | 〇 | 1980年代 | Motorola社 |
| I2C | デジタルIF | 周辺機器の操作、センサデータの取得 | 〇 | 〇 | 1980年代 | Philips社(現NXP Semiconductors社) |
| シリアルポート(UART) | デジタルIF | 周辺機器の操作、センサデータの取得 | 〇 | 〇 | 1960年代 | Chester Gordon Bell |
| シリアルコンソール(UART) | デジタルIF | 有線接続して本体を操作する | 〇 | 〇 | 1960年代 | Chester Gordon Bell |
| 1-wire | デジタルIF | センサデータの取得 | 〇 | 〇 | 1990年代 | Dallas Semiconductor社(現Maxim Integrated社) |
| AREF | アナログ受信 | センサデータの取得 | × | 〇 | 1980年代 | Atmel社? |
| PWM | 信号生成 | 外部デバイス制御 | 〇 | 〇 | 1930年代 | - |
以降、各IFについて詳しくみていきます。
リモート接続
ネットワークを経由し、遠隔でraspberry piを操作するためのIFとなります。
1. SSH(Secure Shell)
暗号や認証技術を用いて、ネットワーク上のコンピューターに接続するための通信プロトコルになります。
従来あったtelnetの後継としてより安全な通信手段として、1995年にタトュ・ウルネン (Tatu Ylönen) さんによって開発されました。
デフォルトのポート番号は22番を使います。ネットワーク越しにまずはラズパイを操作したいとなった場合にまず使うIFになります。
使う場合は、Mac、Linuxの場合もshellからSSHコマンドを、Windowsの場合もPowerShellからSSHコマンドを用いて接続します。
2. VNC(Virtual Network Computing)
こちらも同様にネットワーク上のコンピューターに接続するためのインターフェースとなります。
1998年頃、Olivetti & Oracle Research Laboratory(ORL) にて開発されました。デフォルトのポート番号は5900~5906番を使います。
SSHとの違いはこちらはGUI前提となり、画面を見ながら視覚的にraspberry piを操作することができます。
こちらを使う場合はRealVNC、TightVNCなどのツールを用いて接続します。
但し、ラズパイへ向けてGUIで遠隔操作をするのであれば、Raspberry pi社がRaspberry pi Connectと言う接続サービスを提供しており、繋ぐだけであればそっちの方が手っ取り早かったりもします。
3. リモートGPIO
ネットワーク経由でラズパイのGPIOを操作する仕組みです。
ラズパイのGPIOを遠隔で操作出来るようにしようという目的で開発されているため、規格自体は2012年と比較的浅く、Philip Howard氏がpigpioと言う制御ライブラリを開発した際に登場しています。
大きくpigpioと言うライブラリ経由で操作する方法と、ラズパイ上にWebIOPiと言うwebサーバを立ち上げて操作する方法があります。
なお、WebIOPiを使用する場合、ラズパイのIF設定からリモートGPIOを有効にする必要はありません。
pigoioは8888番を、WebIOPiでは8000番をデフォルトのポート番号として使います。
デバイス間通信IF
ここからはインターネットを経由せず、(シリアルコンソールを除いて)主にGPIOピンを用いて、本体と周辺機器との間で情報を送受信するための仕組みになります。
IFには大きくアナログとデジタルの二種類があります。
アナログIFは、電圧の変化を読み取ることができるIFです。
デジタルIFは、0か1の二値を読み取ることができるIFです。
特にarduinoはアナログIF、デジタルIF両方持っているのですが、ラズパイが扱えるのはデジタルIFのみとなるので注意してください。
以下に各規格の仕様について表にまとめました。
| 名前 | 区分 | 制御方式 | 送受信方式 | 通信速度 | 通信距離 | 接続台数 | 線数(GND除く) |
|---|---|---|---|---|---|---|---|
| SPI | デジタル | 全二重 | 同期 | ラズパイで最大25Mbps, Arduinoで最大4Mbpsくらい | 数メートル | 上限なし | 4以上 |
| I2C | デジタル | 半二重 | 同期 | 最大5Mbps(ウルトラファストモード) | 数メートル | 最大127台 | 2 |
| UART | デジタル | 全二重 | 非同期 | 9600〜115200bps | 数メートル | 1台 | 2 |
| 1-wire | デジタル | 半二重 | 非同期 | 16kbps/120kbps | 最大500m | 1台 | 1 |
| AREF | アナログ | 単方向 | - | - | - | - | 1 |
| PWM | 信号生成 | 単方向 | - | - | - | - | 1 |
制御方式の全二重、半二重とは送受信が同時に行えるか片方しか行えないかの違いになります。全二重=電話、半二重=トランシーバー、単方向=ラジオで概ねあっていると思います。
線数はIFを使うのに必要な端子の数です。別途GND(-極)の端子が必要になるので、例えば線数が2であれば端子は3つ必要となります。
デジタルIF
まずデジタルIFからいきましょう。
SPI, I2C, UART, 1-wireの4つとなり、用途も周辺機器との同期通信を行うための仕組みでそれぞれに送信と受信ができるところまで共通しています。
それぞれの規格についてはどれを使うかと言うよりも、繋げようとしている機器がどのIFに対応しているかを確認することになるかと思います。
4. SPI(Serial Peripheral Interface)
SPIは、マイコン(マイクロコントローラ)と周辺機器(センサー、メモリ、ディスプレイなど)を接続するための同期式シリアル通信インターフェース規格です。
1980年代半ばにMotorola社によって提唱されました。
線数がGND含めると5本必要となり、それぞれ以下のような役割を持ちます。
| 略称 | 名前 | 通信方向 | 役割 |
|---|---|---|---|
| SCLK | Serial Clock | 本体→周辺機器 | 同期信号を送る |
| MOSI | Master Out Slave In | 本体→周辺機器 | 本体から周辺機器へ情報を送信 |
| MISO | Master In Slave Out | 周辺機器→本体 | 周辺機器から本体へ情報を送信 |
| CS | Chip Select | 本体→周辺機器 | スレーブを選択する制御信号 |
| GND | Ground | 双方向 | 信号の基準電位、電流の出口、マイナス極 |
また、接続するデバイスは複数接続することが出来ますが、その場合はCSの線が追加の台数ごとのに1本追加で必要となります。
5. I2C(Inter-Integrated Circuit)
I2CもSPIと同様、マイクロコントローラと周辺機器を接続するための同期式シリアル通信インターフェース規格です。
1980年代にPhilips社(現在のNXP Semiconductors)によって開発されました。
半二重のため送受信が同時に行えず、通信速度もSPIほど速くはないのですが、同じ線数で最大127台まで同時接続することが出来るため、多数のセンサーを接続したいなどの用途の場合にはこちらの方が優れています。
線についてはデータを送るデータ線(Serial Data Line, SDA)と同期信号を送るクロック線(Serial Clock Line, SCL)の2本で接続します。
転送速度については100kbpsから5Mbpsまで複数のモードがありますが、raspberry pi, arduinoで対応しているのはstandard-mode, fast-modeまでのようです。
(厳密にはラズパイ5ではハード的にはfast-mode plusに対応しているようです)
| 転送モード | 最大速度 | 説明 |
|---|---|---|
| Standard-mode | 100kbps | 基本のモード |
| Fast-mode | 400kbps | より速いモード、ここまでは大体のデバイスで対応している |
| Fast-mode Plus | 1Mbps | 産業用途、高速センサーなどで使われる |
| High-speed mode | 3.4Mbps | 高速通信、専用ハンドシェイク。あまり採用されていない |
| Ultra Fast-mode | 5Mbps | 高速にデータを送り出す用途で使用 |
6. シリアルポート/UART(Universal Asynchronous Receiver-Transmitter)
1960年代に通信機器の制御方式としてChester Gordon Bellと言うエンジニアによって開発され、以降RS-232Cを含むさまざまな機器に採用されました。
厳密にはUARTは規格はなく、設計思想と本仕組みを導入した集積回路を指します。
ラズパイでは対応するセンサにつないでデータ取得するなどの用途に使います。
配線が送信(Transmit, TX)と受信(Receive, RX)の2つだけとシンプルですが、接続台数が1台に制限されることと、また非同期通信となるため、デバイス間で通信速度(ボーレート)を揃える必要があります。
7. シリアルコンソール
ラズパイのインターフェースの一覧を見るとシリアルポートとは別にシリアルコンソールという項目があると思います。
こちらは、シリアルポートとは逆に別のPCからラズパイに接続してコマンドラインを操作するためのものです。
従来は、GPIOから線を引っ張ってくる必要があったのですが、raspberry pi 5ではGPIOとは別にUART Connectorが用意され、そちらからも接続できるようになりました。
2つあるHDMIポートの間にあるのがそれです。
8. 1-Wire
1-Wireは、Dallas Semiconductor(現在のMaxim Integrated)が1990年代に開発したシリアル通信プロトコルおよびバス規格です。
現在、同社は吸収されてMaxim Integrated社となっています。
名前の通り、1本のデータ線とグランド線の2本で通信を行うのが特徴で、
通信速度は遅く16kbpsから125kbps程度ですが、配線が非常にシンプルであるため、センサーや小型デバイスの接続に適しています。
9. AREF(Analog Reference)
直訳するとアナログ基準となり、ADC(アナログ-デジタル変換器)の基準電圧を指定するための規格です。
例えば、3.3Vをまでの電圧を0-1023までのデジタルデータに変換するための規格となります。
本規格のみラズパイにはなく、Arduinoのみで使えるIFとなります。
また、本規格は受信のみで対象の周辺機器へ向けての制御などは行えません。
例えば温度センサーが温度差によって電圧を変えるのでそれを実際の温度の値に変換したり、光センサーが光量によって電圧をかえるのでその値を変換したりなどに使います。
10. PWM(Pulse Width Modulation)
直訳するとパルス幅変調となります。こちらはインターフェースと言うよりも信号の一種となり、デジタル信号を高速でON/OFFすることで、平均的な電圧を変化させる技術です。
ON/OFFの間隔を変化させることで、モーター制御やLEDの明るさ調整などに使ったりします。
ごくたまに応用情報処理試験の問題でも出たりします。
Discussion