Arduino通信プロトコル
通信プロトコルを使用することで、Arduino で任意のセンサーのデータを送受信できます。
赤外線 (IR) などのいくつかの単純なセンサーは Arduino と直接通信できますが、Wi-Fi モジュール、SD カード モジュール、ジャイロスコープなどの複雑なセンサーの一部は、通信プロトコルなしでは Arduino と直接通信できません。そのため、これらのプロトコルは Arduino 通信の不可欠な部分です。
Arduinoには複数の周辺機器が接続されています。その中には、Arduino ボードで使用される 3 つの通信周辺機器があります。
Arduino通信プロトコル
Arduino などのさまざまな電子デバイス間の通信は、これら 3 つのプロトコル間で標準化されています。これにより、設計者は互換性の問題なしに異なるデバイス間で簡単に通信できます。これら 3 つのプロトコルの動作は、通信の目的が同じであるため同じですが、回線内での実装が異なります。これらのプロトコルの詳細については、以下で説明します。
UART
UART は ユニバーサル非同期受信機送信機。 UART はシリアル通信プロトコルです。これは、データ ビットが順次形式で転送されることを意味します。 UART 通信をセットアップするには、2 つのラインが必要です。 1 つは Arduino ボードの Tx (D1) ピンで、もう 1 つは Arduino ボードの Rx (D0) ピンです。 Tx ピンはデバイスにデータを送信するために使用され、Rx ピンはデータを受信するために使用されます。異なる Arduino ボードには複数の UART ピンがあります。
Arduinoデジタルピン | UART ピン |
D1 | 送信 |
D0 | 処方箋 |
UART ポートを使用してシリアル通信を確立するには、以下に示す構成で 2 つのデバイスを接続する必要があります。
Arduino Uno では、一般に USB ポートと呼ばれる通信専用のシリアル ポートが 1 つあります。名前が示すように、ユニバーサル シリアル バスなので、シリアル ポートです。 USB ポートを使用して、Arduino はコンピュータとの通信を確立できます。 USB ポートは Arduino のオンボード ピン Tx および Rx に接続されます。これらのピンを使用して、コンピューター以外の外部ハードウェアを USB 経由で接続できます。 Arduino IDE は SoftwareSerial ライブラリを提供します (ソフトウェアシリアル.h) これにより、ユーザーは GPIO ピンをシリアル Tx および Rx ピンとして使用できます。
- UARTはArduinoで簡単に操作できます
- UARTはクロック信号を必要としません
- データの損失を防ぐため、ボーレートは通信デバイスの 10% の制限内に設定する必要があります
- マスター スレーブ構成の Arduino を搭載した複数のデバイスは、UART では使用できません
- UART は半二重です。つまり、デバイスはデータを同時に送受信できません。
- 一度に 2 つのデバイスのみが UART プロトコルと通信できます
シリアル ペリフェラル インターフェイス (SPI)
SPI は、マイクロコントローラと通信するために特別に設計されたシリアル ペリフェラル インターフェイスの頭字語です。 SPI は全二重モードで動作します。つまり、SPI はデータを同時に送受信できます。 UART や I2C と比較すると、Arduino ボードで最速の通信ペリフェラルです。 LCD ディスプレイやマイクロ SD カード アプリケーションなど、高いデータ レートが必要な場合に一般的に使用されます。
Arduino の SPI デジタル ピンは事前定義されています。 Arduino Uno SPI のピン構成は次のとおりです。
SPIライン | GPIO | ICSP ヘッダー ピン |
SCK | 13 | 3 |
味噌 | 12 | 1 |
煙 | 十一 | 4 |
SS | 10 | – |
- MOSIの略 マスター アウト スレーブ イン 、MOSIはマスターからスレーブへのデータ伝送ラインです。
- SCK は クロックライン 伝送速度と始端特性を定義します。
- SSの略 スレーブ選択 ; SS ラインにより、マスターは複数のスレーブ構成で動作しているときに特定のスレーブ デバイスを選択できます。
- MISOの略 マスター イン スレーブ アウト ; MISO はデータのスレーブからマスターへの伝送ラインです。
SPI プロトコルの主なハイライトの 1 つは、マスター/スレーブ構成です。 SPI を使用すると、1 つのデバイスをマスターとして定義して、複数のスレーブ デバイスを制御できます。マスターは、SPI プロトコルを介してスレーブ デバイスを完全に制御します。
SPI は同期プロトコルです。つまり、通信はマスターとスレーブの間で共通のクロック信号にリンクされます。 SPI は、複数のデバイスを単一の送受信ラインを介してスレーブとして制御できます。すべてのスレーブは、共通を使用してマスターに接続されています 味噌 と一緒にラインを受け取ります 煙 1 つの共通送信ライン。 SCK マスター デバイスとスレーブ デバイス間の共通クロック ラインでもあります。スレーブ デバイスの唯一の違いは、各スレーブ デバイスが個別に制御されることです。 SS 行を選択します。これは、各スレーブが、その特定のスレーブ デバイスの選択ラインとして機能する Arduino ボードからの追加の GPIO ピンを必要とすることを意味します。
SPI プロトコルの主なハイライトの一部を以下に示します。
- SPI は I2C や UART よりも高速なプロトコルです
- UART のようにスタート ビットとストップ ビットが不要なため、連続データ転送が可能です。
- シンプルなマスタースレーブ構成により、スレーブを簡単にアドレス指定できます
- スレーブごとに、Arduino ボードで余分なピンが使用されます。実際には、1 つのマスターが 4 つのスレーブ デバイスを制御できます。
- UART で使用されるようなデータ確認応答がありません
- 複数マスター構成は不可
I2C 通信プロトコル
Inter Integrated Circuit (I2C) は、Arduino ボードで使用される別の通信プロトコルです。 I2C は、Arduino やその他のデバイスで実装するのが最も困難で複雑なプロトコルです。その複雑さにもかかわらず、複数のマスターと複数のスレーブ構成など、他のプロトコルには欠けている複数の機能を提供します。 I2C を使用すると、最大 128 個のデバイスをメインの Arduino ボードに接続できます。これが可能なのは、I2C がすべてのスレーブ デバイス間で単一のワイヤを共有しているからです。 Arduino の I2C はアドレス システムを使用します。つまり、スレーブ デバイスにデータを送信する前に、Arduino は最初に一意のアドレスを送信してスレーブ デバイスを選択する必要があります。 I2C は 2 本のワイヤのみを使用して Arduino のピン数を減らしますが、I2C は SPI プロトコルよりも遅いという欠点があります。
Arduino アナログ ピン | I2C ピン |
A4 | SDA |
A5 | SCL |
ハードウェア レベルでは、I2C は 2 本のワイヤのみに制限されています。 SDA(シリアルデータ) 2つ目はクロックライン用 SCL (シリアルクロック)。 アイドル状態では、SDA と SCL の両方がハイに引き上げられます。データを送信する必要がある場合、これらのラインは MOSFET 回路を使用してローに引き下げられます。プロジェクトで I2C を使用する場合、通常 4.7Kohm の値のプルアップ抵抗を使用することが必須です。これらのプルアップ抵抗により、SDA ラインと SCL ラインの両方がアイドル状態の開始時に確実に High のままになります。
I2C プロトコルの主なハイライトは次のとおりです。
- 必要なピン数が非常に少ない
- 複数のマスタースレーブデバイスを接続可能
- 2本のワイヤーのみを使用
- プルアップ抵抗があるため、SPI に比べて速度が遅い
- 抵抗器は回路内により多くのスペースを必要とします
- デバイス数の増加に伴うプロジェクトの複雑化
UART vs I2C vs SPI の比較
プロトコル | UART | SPI | 2C |
スピード | 最も遅い | 最速 | UARTより速い |
デバイス数 | 最大 2 | 4台のデバイス | 最大 128 台のデバイス |
ワイヤーが必要 | 2(送信、受信) | 4(SCK、スモーク、アイズ、SS) | 2(SDA、SCL) |
二重モード | 全二重モード | 全二重モード | 半二重 |
可能なマスタースレーブ数 | シングルマスター - シングルスレーブ | シングルマスターマルチスレーブ | 複数のマスター - 複数のスレーブ |
複雑 | 単純 | 複数のデバイスを簡単に制御できます | デバイスの増加に伴う複雑さ |
確認ビット | いいえ | いいえ | はい |
結論
この記事では、Arduino で使用されている UART、SPI、および I2C の 3 つのプロトコルすべてを包括的に比較しました。複数のデバイスを統合する無限の機会が得られるため、すべてのプロトコルを知ることは重要です。すべての通信周辺機器を理解することは、時間を節約し、正しいプロトコルに従ってプロジェクトを最適化するのに役立ちます。