How to use ESP32 as USB-to-UART converter in PlatformIO
The ESP32 can easily be used as USB-to-UART converter. Note that the ESP32 does not feature an USB interface by itself and ESP32 boards with an onboard USB connector just use an USB-to-UART converter (this is a separate chip on the board). Hence, from the ESP32 perspective, it
You can map UART TX and RX to any GPIO pin on the ESP32. While there are very, very slight performance advantages to using a set of predefined pins, this does not really matter in practice. In this example, we will use pin GPIO2
for UART RX and pin GPIO4
for UART TX.
Basically, the code is just copying bytes betweenSerial2
andSerial
(connected to USB):
// Copy bytes incoming via PC serial
while (Serial.available() > 0) {
Serial2.write(Serial.read());
}
// Copy bytes incoming via UART serial
while (Serial2.available() > 0) {
Serial.write(Serial2.read());
}
Full example
#include <Arduino.h>
#define UART_RX_PIN 2 // GPIO2
#define UART_TX_PIN 4 // GPIO4
void setup() {
// Serial connects to the computer
Serial.begin(115200);
// Serial2 is the hardware UART port that connects to external circuitry
Serial2.begin(115200, SERIAL_8N1,
UART_RX_PIN,
UART_TX_PIN);
}
void loop() {
// Copy byte incoming via PC serial
while (Serial.available() > 0) {
Serial2.write(Serial.read());
}
// Copy bytes incoming via UART serial
while (Serial2.available() > 0) {
Serial.write(Serial2.read());
}
}
Regarding platformio.ini
, we just need to set the monitor_speed
to match the value in Serial.begin(115200);
:
[env:nodemcu-32s]
platform = espressif32
board = nodemcu-32s
framework = arduino
monitor_speed = 115200