Arduino-communication

提供:Dev Guides
移動先:案内検索

Arduino-コミュニケーション

このデータ交換を実現するために、数百の通信プロトコルが定義されています。 各プロトコルは、パラレルまたはシリアルの2つのカテゴリのいずれかに分類できます。

パラレル通信

入出力ポートを介したArduinoと周辺機器間の並列接続は、数メートルまでの短い距離に最適なソリューションです。 ただし、2つのデバイス間で長距離通信を確立する必要がある他のケースでは、パラレル接続を使用することはできません。 パラレルインターフェイスは、複数のビットを同時に転送します。 通常、データのバスが必要です-8本、16本、またはそれ以上のワイヤで送信します。 データは1と0の巨大なクラッシュ波で転送されます。

パラレルコミュニケーション

パラレル通信の利点と欠点

パラレル通信には確かに利点があります。 シリアルより高速で、簡単で、比較的簡単に実装できます。 ただし、多くの入出力(I/O)ポートと回線が必要です。 プロジェクトを基本的なArduino UnoからMegaに移動する必要があった場合、マイクロプロセッサーのI/Oラインは貴重で数少ないことがわかっています。 したがって、ピン通信の潜在的な速度を犠牲にして、シリアル通信を優先します。

シリアル通信モジュール

現在、ほとんどのArduinoボードは、シリアル通信用のいくつかの異なるシステムを標準装備しています。

これらのシステムのどれが使用されるかは、次の要因に依存します-

  • マイクロコントローラーがデータを交換しなければならないデバイスはいくつですか?
  • データ交換の速度はどれくらいですか?
  • これらのデバイス間の距離はどのくらいですか?
  • データを同時に送受信する必要がありますか?

シリアル通信に関する最も重要なことの1つは*プロトコル*であり、厳密に遵守する必要があります。 これは一連のルールであり、デバイスが相互に交換するデータを正しく解釈できるように適用する必要があります。 幸いなことに、Arduinoはこれを自動的に処理するため、プログラマ/ユーザーの作業は単純な書き込み(送信されるデータ)と読み取り(受信データ)に削減されます。

シリアル通信の種類

シリアル通信はさらに分類することができます-

  • 同期-同期されるデバイスは同じクロックを使用し、それらのタイミングは互いに同期しています。
  • 非同期-非同期のデバイスには独自のクロックがあり、前の状態の出力によってトリガーされます。

デバイスが同期しているかどうかは簡単にわかります。 接続されているすべてのデバイスに同じクロックが与えられている場合、それらは同期しています。 クロックラインがない場合、非同期です。

たとえば、UART(Universal Asynchronous Receiver Transmitter)モジュールは非同期です。

非同期シリアルプロトコルには、多くの組み込みルールがあります。 これらのルールは、堅牢でエラーのないデータ転送を保証するメカニズムに他なりません。 これらのメカニズムは、外部クロック信号を回避するために取得します-

  • 同期ビット
  • データビット
  • パリティビット
  • ボーレート

同期ビット

同期ビットは、データの各パケットで転送される2つまたは3つの特別なビットです。 それらは開始ビットと停止ビットです。 その名の通り、これらのビットはそれぞれパケットの始まりと終わりを示します。

開始ビットは常に1つだけですが、停止ビットの数は1つまたは2つに設定できます(通常は1つのままです)。

スタートビットは常に1から0までのアイドルデータラインで示され、ストップビットはラインを1に保持することでアイドル状態に戻ります。

同期ビット

データビット

各パケットのデータ量は、5〜9ビットの任意のサイズに設定できます。 確かに、標準のデータサイズは基本的な8ビットバイトですが、他のサイズにも用途があります。 7ビットのデータパケットは、特に7ビットのASCII文字を転送するだけの場合、8よりも効率的です。

パリティビット

ユーザーは、パリティビットを使用するかどうかを選択できます。使用する場合は、パリティを奇数にするか偶数にするかを選択できます。 データビット間の1の数が偶数の場合、パリティビットは0です。 奇数パリティは正反対です。

ボーレート

ボーレートという用語は、1秒間に転送されるビット数[bps]を示すために使用されます。 バイトではなくビットを参照することに注意してください。 通常、プロトコルでは、各バイトがいくつかの制御ビットとともに転送される必要があります。 これは、シリアルデータストリームの1バイトが11ビットで構成されることを意味します。 たとえば、ボーレートが300 bpsの場合、1秒あたり最大37バイトと最小27バイトが転送されます。

Arduino UART

次のコードは、起動時にArduinoにHello Worldを送信させます。

void setup() {
   Serial.begin(9600);//set up serial library baud rate to 9600
   Serial.println("hello world");//print hello world
}

void loop() {

}

ArduinoスケッチがArduinoにアップロードされたら、Arduino IDEの右上のセクションでシリアルモニターSearchを開きます。

シリアルモニターの上部のボックスに何かを入力し、キーボードの[送信]または[Enter]を押します。 これにより、一連のバイトがArduinoに送信されます。

次のコードは、入力として受け取ったものをすべて返します。

次のコードは、提供された入力に応じてArduinoに出力を配信させます。

void setup() {
   Serial.begin(9600);//set up serial library baud rate to 9600
}

void loop() {
   if(Serial.available())//if number of bytes (characters) available for reading from {
      serial port
      Serial.print("I received:");//print I received
      Serial.write(Serial.read());//send what you read
   }
}
*Serial.print* と *Serial.println* は実際のASCIIコードを送り返し、 *Serial.write* は実際のテキストを送り返します。 詳細については、ASCIIコードを参照してください。