UART(HardwareSerial)
ESP32

概要

Arduino core for the ESP32を使った、ESP-WROOM-32開発ボードのUART(HardwareSerial)についての実験です。

ソースコードを見ていると、ESP-WROOM-32では、UARTは3組利用できることがわかりました。使い方を調べてみました。

Arduino core for the ESP32のインストールのページはこちら

実験

Arduino core for the ESP32のHardwareSerialの定義と、Serial.begin()のコードは、以下のようになっていました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
HardwareSerial Serial(0);
 
HardwareSerial::HardwareSerial(int uart_nr) : _uart_nr(uart_nr), _uart(NULL) {}
 
void HardwareSerial::begin(unsigned long baud, uint32_t config, int8_t rxPin, int8_t txPin)
{
    if(_uart_nr == 0 && rxPin < 0 && txPin < 0) {
        rxPin = 3;
        txPin = 1;
    }
    if(_uart_nr == 1 && rxPin < 0 && txPin < 0) {
        rxPin = 9;
        txPin = 10;
    }
    if(_uart_nr == 2 && rxPin < 0 && txPin < 0) {
        rxPin = 16;
        txPin = 17;
    }
    _uart = uartBegin(_uart_nr, baud, config, rxPin, txPin, 256, false);
}

デフォルトでは、Serialが定義されていて、_uart_nrが0に設定されています。残り2個についても、使えそうです。

また、利用するデフォルトのピンは、以下のように設定されています。

_uart_nr RXピン TXピン
0 3 1
1 9 10
2 16 17

ただし、_uart_nrの1番に定義されている、9番ピンと10番ピンの組み合わせでは、うまく動作しませんでした(間違っている可能性があるので、ご自分で確認をお願いします)。少し調べたところ、ESP32フォーラムに、以下のような内容が記載されていました。

GPIOs 9 & 10 are connected to the SPI flash chip by default, although only used in QIO mode. It’s probably safer to use different pins (almost any apart from 6, 7, 9, 10, 11 which are SPI flash and 1, 3 which are UART0 default pins. Consult the ESP32 Pin List document from here for more.)

例えば、以下のようなコードを使えば、16番ピンと17番ピンを、Serial2として使うことができました。

1
2
3
4
5
6
HardwareSerial Serial2(2);
 
void setup() {
  // put your setup code here, to run once:
  Serial2.begin(9600);
}

また、以下のようなコードで、26番ピンをRX、27番ピンをTXとして利用することができました。

1
2
3
4
5
6
HardwareSerial Serial2(2);
 
void setup() {
  // put your setup code here, to run once:
  Serial2.begin(9600, SERIAL_8N1, 26, 27);
}

全てのピンが利用できるかまでは、調べていませんが、複数のHardwareSerialが使えることはわかりました。ESP32開発ボードでは、おそらくは、デフォルトで割り当てのないピンこのページの一番下の図の、ピン番号の横が空白のピン)が使えるのではないかと推測しています。あくまで、推測ですが。

補足

Arduino core for the ESP32 release v1.0.1では、Serial1とSerial2がデフォルトで定義されるようになりました。このため、上記の、「HardwareSerial Serial2(2);」の定義は不要です。

バージョン

Hardware:ESP-WROOM-32
Software:Arduino 1.8.3/Arduino core for the ESP32

最終更新日

March 21, 2022

inserted by FC2 system