ESP32で複数のシリアルポートを開く

ESP32の中に入っている3つのUARTを使ってみようと思います。
Arduino core for ESP32 WiFi chip release v1.0.1以降ではSerial1とSerial2が定義されました。
それに伴い、記事をの内容を修正しました。(2019/06現在)

やり方 (Arduino core for ESP32 WiFi chip release v1.0.1以降版)

Arduinoのサンプルに「MultiSerial」と言うものがあります。
これを編集して3ポート使えるように修正しました。

void setup() {
  // initialize both serial ports:
  Serial.begin(9600);
  Serial1.begin(9600);
  Serial2.begin(9600);
}

void loop() {
  // read from port 1, send to port 0:
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.write(inByte);
  }

  // read from port 0, send to port 1:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.write(inByte);
  }

    // read from port 0, send to port 2:
  if (Serial2.available()) {
    int inByte = Serial.read();
    Serial2.write(inByte);
  }
}

やり方 (Arduino core for ESP32 WiFi chip release v1.0.0版)

Arduinoのサンプルに「MultiSerial」と言うものがあります。
これを少し編集してシリアルポート0以外のポートを開くことができました。

// ---------- ここを追加
HardwareSerial Serial1(2); // UART2を使う
// ----------

void setup() {
  // initialize both serial ports:
  Serial.begin(115200);
  Serial1.begin(115200);
}

void loop() {
  // read from port 1, send to port 0:
  if (Serial1.available()) {
    int inByte = Serial1.read();
    Serial.write(inByte);
  }

  // read from port 0, send to port 1:
  if (Serial.available()) {
    int inByte = Serial.read();
    Serial1.write(inByte);
  }
}

ESP32のIO16とIO17(UART2のTX,RX)を直接接続することでループバックテストをすることができました。

問題点

今回はUART0と2を使用しました。
UART1は下記のサイトに書いてあるように、デフォルトでSPI Flashに設定されているようです。
ESP32 devkit esp-idf UART1 examle not working - ESP32 Forum

UART1の使い方については分かり次第ブログに書こうと思います。
追記: ver.1.0.1以降を使えばすべてのポートが使用可能です。

追記

Qiitaのこちらの記事で、UART1を使用する方法が書かれた記事についての紹介がありました。
Arduino-ESP32 Serial通信 - Qiita
Secret Serial Port For Arduino/ESP32 | Hackaday
どうやら、ライブラリを直接いじる必要があるみたいです。