基本ライブラリ
デジタルIO
アナログIO
拡張IO
時間
数学
三角関数
乱数
ビットバイト操作
割り込み
シリアル通信
標準ライブラリ
カメラ
サーボモーター
ステッピングモーター
キャラクタ液晶表示
SPI通信
I2C通信(Wire)
SD
SD(File操作)
周期処理(MsTimer2)
時計(RTC)
Mbed Tips
シリアル通信(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: 出力するデータの長さ - 戻り値
- 出力したバイト数
- 概要
- シリアル通信ポートに文字列を出力します。
- 文法
- 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());
}
}