Arduinoのサンプルプログラム

Arduino-シリアル通信の方法

当記事では、Arduinoのシリアル通信の方法について詳しく解説します。

Arduinoではシリアル通信の標準関数が用意されており、簡単にシリアル通信をすることができます。

シリアルモニタの使い方

Arduino IDEのシリアルモニタを使うことで、Arduinoボードとの送受信を行うことができます。これから、紹介するシリアル通信のサンプルプログラムでもシリアルモニタを使って、適切に通信が行われているのか確認するので、ぜひ覚えておきましょう。

1

ArduinoボードをUSBケーブルで、Arduino IDEを使用するPCに接続します。当記事では、Arduino Unoを使用して説明していきます。

1

Arduino IDEを起動します。

1

「ボード」と「シリアルポート」を選択します。当記事では、ボードは「Arduino/Genuino Uno」、シリアルポートは「COM3」を選択しています。

1

「ツール」-「シリアルモニタ」をクリックします。

1

シリアルモニタが表示されます。シリアルモニタ上部の送信欄に文字や数字を入力して、右側の「送信」をクリックするとArduinoボードにデータを送ることができます。

シリアル通信のサンプルプログラム(サンプルスケッチ)

シリアル通信のサンプルプログラム(サンプルスケッチ)を紹介します。Arduinoではシリアル通信の標準関数が用意されており、PC-Arduinoボード間やArduinoボード-Arduinoボード間の通信が可能です。

その他のArduinoの標準関数については、以下の記事をご覧ください。

Serial.println()/文字列送信(改行あり)


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  Serial.println("Arduino!");//文字列「Arduino!」を送信、改行
  Serial.println(4649);//数字「4649」を送信、改行
  delay(1000);//1秒待機(1000msec待機)
}

ASCIIコードで文字列や数値などを送信します。また、送信データの最後に「改行」が付加されます。
文字列はそのまま、数値はASCII文字に変換されます。


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  Serial.println(4649, BIN);//2進数で数字「4649」を送信、改行
  Serial.println(4649, OCT);//8進数で数字「4649」を送信、改行
  Serial.println(4649, DEC);//10進数で数字「4649」を送信、改行
  Serial.println(4649, HEX);//16進数で数字「4649」を送信、改行
  delay(1000);//1秒待機(1000msec待機)
}

Serial.println()では、フォーマットを指定することで、2進数、8進数、10進数、16進数で送信することができます。

Serial.print()/文字列送信(改行なし)


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  Serial.print("Arduino!");//文字列「Arduino!」を送信
  Serial.print(4649);//数字「4649」を送信
  delay(1000);//1秒待機(1000msec待機)
}

ASCIIコードで文字列や数値などを送信します。また、Serial.println()と違って改行されません。
文字列はそのまま、数値はASCIIコードに変換されます。


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  Serial.print(4649, BIN);//2進数で数字「4649」を送信
  Serial.print(4649, OCT);//8進数で数字「4649」を送信
  Serial.print(4649, DEC);//10進数で数字「4649」を送信
  Serial.print(4649, HEX);//16進数で数字「4649」を送信
  delay(1000);//1秒待機(1000msec待機)
}

Serial.print()では、フォーマットを指定することで、2進数、8進数、10進数、16進数で送信することができます。
Serial.println()と違い、改行は行われません。

Serial.write()/データ送信


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  Serial.write(2);//ASCIIコード:STX(テキスト開始)
  Serial.write(50);//ASCIIコード:2
  delay(1000);//1秒待機(1000msec待機)
}

数値として、そのまま送信します。そのため、「2」はASCIIコードでSTX(テキスト開始)に該当するので、文字化けを起こして「□」が表示され、「50」はASCIIコードに該当する「2」が表示されます。

available()/読み取り可能Byte数を調べる


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  if(Serial.available() > 0)//受信したバイト数が0を超える場合、以下を実行
  {
    Serial.println("OK!");//文字列「OK!」を送信、改行
    delay(1000);//1秒待機(1000msec待機)
  }
}

Serial.available()は、受信したデータのByte数を確認します。シリアル通信ができない場合は、「-1」が返されます。
そのため、このサンプルプログラムでは、シリアルモニタから何らかのデータを送信すると、シリアルモニタには「OK!」が表示されます。

Serial.read()/1Byte読み込み


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  char data;
  if(Serial.available() > 0)//受信したバイト数が0を超える場合、以下を実行
  {
    data = Serial.read();//dataに1Byte読み込んだ値を返す、読み取り位置を動かす
    Serial.println(data);//「data」を送信、改行
    delay(1000);//1秒待機(1000msec待機)
  }
}

シリアルモニタで、「Arduino!」と送信すると、Serial.read()で1Byteずつ読み込み、シリアルモニタに表示していきます。

Serial.peek()/1Byte読み込み、読み取り位置は動かさない


void setup() {
  Serial.begin(9600);//シリアル通信を9600bpsで初期化
}

void loop() {
  char data;
  if(Serial.available() > 0)//受信したバイト数が0を超える場合、以下を実行
  {
    data = Serial.peek();//dataに1Byte読み込んだ値を返す
    Serial.println(data);//「data」を送信、改行
    delay(1000);//1秒待機(1000msec待機)
  }
}

Serial.peek()は、Serial.read()と違い、1Byte読み込んだ後に読み取り位置を動かしません。そのため、シリアルモニタから「Arduino!」と送信しても、頭文字の「A」だけが表示され続けます。

テキストのコピーはできません。