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 between Serial2
and Serial
(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