シリアル通信(Serialクラス)

PCや他のマイコンと通信をするためのライブラリです。シリアル用のチャネルは合計3本使用可能で、1チャネルはUSB通信用、1チャネルはUART通信用、1チャネルはESP32通信用です。 対応するチャネルとピン番号は以下の通りで、ピンマップでも確認できます。

Serial : USB通信
Serial2: ESP32通信
Serial4: 0(RX), 1(TX)

available

概要
シリアル通信ポートから何バイトのデータが読み取れるかを返す
文法
int Serial.available()
パラメータ
なし
戻り値
シリアルバッファにあるデータのバイト数。0の場合はデータなし

begin

概要
シリアル通信のボーレート、ポートの設定を行います。
文法
Serial.begin(unsigned long speed, config)
パラメータ
speed: ボーレート (約1,200~2,083,333Hz)
config(オプション): データ長、パリティ、ストップビットの設定。以下のいずれかから選択。
  SERIAL_7N1, SERIAL_8N1 (default)
  SERIAL_7N2, SERIAL_8N2
  SERIAL_7E1, SERIAL_8E1
  SERIAL_7E2, SERIAL_8E2
  SERIAL_7O1, SERIAL_8O1
  SERIAL_7O2, SERIAL_8O2
戻り値
なし

end

概要
シリアル通信ポートの停止
文法
Serial.end()
パラメータ
なし
戻り値
なし

read

概要
シリアル通信ポートの受信バッファから1バイトのデータが読み出します。
文法
int Serial.read()
パラメータ
なし
戻り値
データ。データなしの場合は-1が返る。

peek

概要
シリアル通信ポートの受信バッファにある先頭データを読み出します。バッファ中の読み込み位置は変更しないので、バッファを覗くだけ。CRLFの変換は行われません。
文法
int Serial.peek()
パラメータ
なし
戻り値
先頭データ。データなしの場合は-1が返る。

flush

概要
シリアル通信ポートの送信バッファが空になるまで待ちます。
文法
Serial.flush()
パラメータ
なし
戻り値
なし

write

概要
シリアル通信ポートに文字列やデータを出力する。
文法
Serial.write(const char* str)
Serial.write(const unsigned char* buf, int len)
パラメータ
str: 文字列
buf: 出力するデータのポインタ
len: 出力するデータの長さ
戻り値
出力したバイト数

print

概要
シリアル通信ポートに文字列を出力します。
文法
Serial.print(val)
Serial.print(val, format)
パラメータ
val: 出力したい値や文字列
format: 数値の場合はその基数(BIN:2進数、OCT:8進数、DEC:10進数、HEX:16進数)
戻り値
出力したバイト数

println

概要
シリアル通信ポートに文字列を改行付きで出力する。
文法
Serial.println(val)
Serial.println(val, format)
パラメータ
val: 出力したい値や文字列
format: 数値の場合はその基数(BIN:2進数、OCT:8進数、DEC:10進数、HEX:16進数)
戻り値
出力したバイト数

サンプルプログラム

フォーマットに応じて出力するサンプルです。


#include <Arduino.h>
/*
Uses a FOR loop for data and prints a number in various formats.
*/
int x = 0;    // variable
 
void setup() {
  Serial.begin(9600);      // open the serial port at 9600 bps:
}
 
void loop() {  
  // print labels 
  Serial.print("RAW");       // prints a label
  Serial.print("\t");              // prints a tab
 
  Serial.print("DEC");  
  Serial.print("\t");      
 
  Serial.print("HEX"); 
  Serial.print("\t");   
 
  Serial.print("OCT");
  Serial.print("\t");
 
  Serial.print("BIN");
  Serial.print("\t"); 
 
  for(x=0; x< 64; x++){    // only part of the ASCII chart, change to suit
 
    // print it out in many formats:
    Serial.print(x);       // print as an ASCII-encoded decimal - same as "DEC"
    Serial.print("\t");    // prints a tab
 
    Serial.print(x, DEC);  // print as an ASCII-encoded decimal
    Serial.print("\t");    // prints a tab
 
    Serial.print(x, HEX);  // print as an ASCII-encoded hexadecimal
    Serial.print("\t");    // prints a tab
 
    Serial.print(x, OCT);  // print as an ASCII-encoded octal
    Serial.print("\t");    // prints a tab
 
    Serial.println(x, BIN);  // print as an ASCII-encoded binary
    //                             then adds the carriage return with "println"
    delay(200);            // delay 200 milliseconds
  }
  Serial.println("");      // prints another carriage return
}


ESP32と通信するサンプルです。シリアルモニターでATコマンドを試すことができます。ただし、ESP32の書込みソフトには使用できません。


#include <Arduino.h>
void setup() {
    Serial.begin(115200); // for PC
    Serial2.begin(115200); // for ESP
 
    pinMode(PIN_ESP_EN, OUTPUT);
    pinMode(PIN_ESP_IO0, OUTPUT);
    pinMode(PIN_SW0, INPUT);
    pinMode(PIN_SW1, INPUT);
    digitalWrite(PIN_ESP_IO0, HIGH);
    digitalWrite(PIN_ESP_EN, HIGH);
}
 
void loop(){
    if(digitalRead(PIN_SW0)){
        digitalWrite(PIN_ESP_EN, HIGH);
    } else {
        digitalWrite(PIN_ESP_EN, LOW);
    }
    if(digitalRead(PIN_SW1)){
        digitalWrite(PIN_ESP_IO0, HIGH);
    } else {
        digitalWrite(PIN_ESP_IO0, LOW);
    }
 
    if(Serial.available()){
        Serial2.write(Serial.read());
    }
    if(Serial2.available()){
        Serial.write(Serial2.read());
    }
 
}