Arduino-コミュニケーション

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

パラレル通信

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

パラレル通信の長所と短所

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

シリアル通信モジュール

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

これらのシステムのどれが使用されるかは、次の要因によって異なります-

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

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

シリアル通信の種類

シリアル通信はさらに次のように分類できます-

  • Synchronous −同期されているデバイスは同じクロックを使用し、それらのタイミングは互いに同期しています。

  • Asynchronous −非同期のデバイスには独自のクロックがあり、前の状態の出力によってトリガーされます。

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

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

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

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

同期ビット

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

スタートビットは常に1つだけですが、ストップビットの数は1つまたは2つに設定できます(通常は1つのままです)。

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

データビット

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

パリティビット

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

ボーレート

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

Arduino UART

次のコードは、Arduinoが起動時にhelloworldを送信するようにします。

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

void loop() {

}

ArduinoスケッチがArduinoにアップロードされたら、

ArduinoIDEの右上のセクションにあるシリアルモニターを開きます。

シリアルモニターの上部のボックスに何かを入力し、キーボードの送信または入力を押します。これにより、一連のバイトが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コードを参照してください。