ESP32[16] シリアル通信

ESP32には3つのUARTがあります。それぞれにPINは決められていて下記のようになっています。

UART#Tx PINRX PINオブジェクト名
UART013Serial
UART1109Serial1
UART21716Serial2
ハードウエア・シリアル

UART0はUSBにつながっているので、開発環境と競合します。スケッチをコンパイルしてダウンロードするときに、UART0端子に回路がつながっているとダウンロード失敗することが多いので、UART0ピンは私は使いません。

また、UART1は内部で使用されているのでユーザーは使えません。したがって、ハードウエアシリアルを使用したい場合は、残るUART2を使うことになります。ネット上で検索すると色々説明ありますが、それぞれが微妙に違うので悩みました。色々試した挙句、下記のスケッチで動作確認できています。

void setup() {
  Serial.begin(115200); // ---> UART 0 シリアルコンソールに出てくる。
  Serial2.begin(115200); // IO16 Rx, IO17 Tx UART 2
  Serial.printf("Starting………….\n");
}

void loop() {
 for (int i = 0; i < 255; i++) {
  Serial.printf("Hello : %d\n",i);
  Serial2.printf("Hello : %d\n",i);
  delay(1000);
 }
}

ESP32はソフトシリアルも使用できるので、シリアルの数が足りない時はソフトウエアシリアルを使いましょう。ソフトウエアシリアルであれば、DIOピンを使うのでそれなりのシリアル数を増やすことができます。