ESP32[27] UART整理メモ

要旨

ESP32のUARTを使っていましたが、理解せずに使っていたようなのでまとめてみました。

UART数

・ESP32(Arduino)には UARTが3本ある
 UART0 / UART1 / UART2

・デフォルト名
 Serial = UART0(コンソール用)
 Serial1= UART1
 Serial2= UART2

・名前とUART番号が本体
 Serial2 と HardwareSerial(2) は 同じUART2
 別名を2つ作っても 同一UARTを共有するだけ

・同じUART番号を2回 begin() すると後勝ちで上書き
 → 通信が止まる原因

・用途別の正解構成
 Serial :USBコンソール
 Serial2 :ラズパイ通信(UART2)
 Serial1 :E32通信(UART1)

デフォルトのピン

それぞれのUARTにはデフォルトのピンがある。

UART0(Serial)

  用途:USBコンソール / 書き込み / デバッグ

  デフォルトピン

    TX:GPIO1

    RX:GPIO3

 注意

    USB-Serial と共有

    通常はコンソール専用に使う

UART1(Serial1)

  用途:汎用UART(※注意あり)

  デフォルトピン

    TX:GPIO10

    RX:GPIO9

 注意

    GPIO9 / GPIO10 は SPIフラッシュと競合

    デフォルトのままでは使えない

    必ず begin() でピンを再割り当てすること

Serial1.begin(9600, SERIAL_8N1, RX_PIN, TX_PIN);

UART2(Serial2)

 用途:最も使いやすい汎用UART

 デフォルトピン

    TX:GPIO17

    RX:GPIO16

 特徴

    フラッシュと非競合そのまま使える

UARTArduino名RXTX備考
UART0SerialGPIO3GPIO1USBコンソール
UART1Serial1GPIO9GPIO10フラッシュ競合・再割当必須
UART2Serial2GPIO16GPIO17そのまま使用可

UARTの「別名」の作り方(HardwareSerial)

別名とは?

HardwareSerial(n) は UART番号 n(0/1/2)への別名。
UARTが増えるわけではない。

例:UART2に別名を付ける

HardwareSerial mySerial(2);  // ← UART2 の別名