Arduinoの基礎 - シリアル通信
概要
シリアル通信は、ArduinoボードとPCやその他のデバイスと通信するために使用される。
すべてのArduinoボードは少なくとも1つのシリアルポートを備えている。
Arduinoの開発環境では、シリアル通信を利用するプログラミングインターフェイスとして、Serial
オブジェクトが利用できる。
これは、シリアル通信のためのバッファやメソッドをまとめたHardwareSerial
クラスのオブジェクトである。
シリアルモニタ
Arduino IDEでは、シリアルポートの入出力の確認を簡単に行うためのシリアルモニタが用意されている。
シリアルモニタは、Arduino IDEのメニューバー[ツール] - [シリアルモニタ]を選択すると起動する。
シリアルモニタの画面は下図のようになる。
シリアルポートにデータを転送するには、文字を入力して[Send]ボタンを押下する。
シリアルポートに文字を出力する
シリアルポートに文字を出力して、それを表示するサンプルコードを以下に記述する。(説明は下記を参照)
まず、setup()
関数に記述したSerial
クラスのbegin
メソッドで、シリアル通信のボーレート(1秒間の転送ビット数)を設定する。
次に、loop()
関数にて、Serial
クラスのprintln
メソッドでデータを送信する。(print
メソッドも存在するが、println
はCRLF
を最後に出力する)
送信後、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]ボタンを押下する。
すると、次のように出力される。