Arduinoの基礎 - シリアル通信

提供:MochiuWiki : SUSE, EC, PCB
ナビゲーションに移動 検索に移動

概要

シリアル通信は、ArduinoボードとPCやその他のデバイスと通信するために使用される。
すべてのArduinoボードは少なくとも1つのシリアルポートを備えている。

Arduinoの開発環境では、シリアル通信を利用するプログラミングインターフェイスとして、Serialオブジェクトが利用できる。
これは、シリアル通信のためのバッファやメソッドをまとめたHardwareSerialクラスのオブジェクトである。


シリアルモニタ

Arduino IDEでは、シリアルポートの入出力の確認を簡単に行うためのシリアルモニタが用意されている。
シリアルモニタは、Arduino IDEのメニューバー[ツール] - [シリアルモニタ]を選択すると起動する。

シリアルモニタの画面は下図のようになる。
シリアルポートにデータを転送するには、文字を入力して[Send]ボタンを押下する。

Arduino SerialMonitor 01.png



シリアルポートに文字を出力する

シリアルポートに文字を出力して、それを表示するサンプルコードを以下に記述する。(説明は下記を参照)

まず、setup()関数に記述したSerialクラスのbeginメソッドで、シリアル通信のボーレート(1秒間の転送ビット数)を設定する。
次に、loop()関数にて、Serialクラスのprintlnメソッドでデータを送信する。(printメソッドも存在するが、printlnCRLFを最後に出力する)
送信後、10秒のdelayを行う。
(シリアルモニタを開いてから、Arduino IDEからArduinoボードにダウンロードすること)

 void setup()
 {
    Serial.begin( 9600 );
 }
 
 void loop()
 {
    Serial.println( "Hello, world" );
    delay( 10 * 1000 );
 }



読み込みと出力する

次に、シリアルポートから文字を1バイト毎に入力して、それをASCIIコードに変換してシリアルポートに出力するサンプルコード以下に記述する。
(説明は下記を参照)。
まず、Serial.available()メソッドは、バッファにデータがある場合、読み込み可能なバイト数を返す。データがない場合は0を返す。
次に、Serial.read()メソッドは、バッファの先頭のバイトを読み取り返す。読み取り可能なデータがない場合は、ブロックせずに-1を返す。

Serial.print()メソッドおよびSerial.println()メソッドの第2引数で書式を指定する。
2 / 8 / 10 / 16進数として出力するには、BIN / OCT / DEC/ HEXをそれぞれ指定する。
浮動小数点の値に対して、書式を整数に指定すると小数点の場所を指定することができる。

 void setup()
 {
    Serial.begin( 9600 );
 }
 
 void loop()
 {
    if(Serial.available())
    {
       char c = Serial.read();
       Serial.print(c);
       Serial.print(" ");
       Serial.println(c, HEX);
    }
 }


これを実行すると、次のようになる。
シリアルモニタの入力フィールドに"Hello"と入力して、[Send]ボタンを押下する。

Arduino SerialMonitor 02.png


すると、次のように出力される。

Arduino SerialMonitor 03.png