Hi! I have a strange ESP32-S3 serial problem and I’m trying to find the actual cause.
Board: ESP32-S3-DevKitC-1, 8 MB PSRAM
OS: macOS Sequoia 15.7.7, Intel MacBook Pro
IDE/build system: PlatformIO + Arduino
PlatformIO:
-
Espressif32 platform: 7.0.1
-
Arduino framework: 3.20017.241212+sha.dcc1105b
-
esptool works normally
The board has two USB-C ports.
USB port 1 (the ordinary USB port on my board):
/dev/cu.usbmodem14301
VID:PID=303A:1001
Description: USB JTAG/serial debug unit
This port can flash firmware successfully.
Example upload result:
Chip is ESP32-S3 (QFN56) (revision v0.2)
Features: WiFi, BLE, Embedded PSRAM 8MB (AP_3v3)
USB mode: USB-Serial/JTAG
...
Hash of data verified.
...
Hard resetting via RTS pin...
SUCCESS
However, after flashing, PlatformIO Serial Monitor is completely empty:
pio device monitor --port /dev/cu.usbmodem14301 -b 115200
No Serial.println() output at all.
If I physically press RESET while the monitor is open, I sometimes get:
Disconnected (read failed: [Errno 6] Device not configured)
Reconnecting to /dev/cu.usbmodem14301 . Connected!
After reconnecting, it is still completely blank.
Important test
I wanted to make sure the ESP32-S3 itself is actually running the firmware, so I removed Serial, SD, TFT, etc. and tested only the onboard/addressable RGB LED on GPIO48.
The test code is:
#include <Arduino.h>
#include <Adafruit_NeoPixel.h>
#define RGB_PIN 48
Adafruit_NeoPixel rgb(1, RGB_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
rgb.begin();
}
void loop() {
rgb.setPixelColor(0, 255, 0, 0);
rgb.show();
delay(500);
rgb.setPixelColor(0, 0, 255, 0);
rgb.show();
delay(500);
rgb.setPixelColor(0, 0, 0, 255);
rgb.show();
delay(500);
rgb.clear();
rgb.show();
delay(500);
}
The RGB works perfectly.
So the ESP32-S3 is definitely executing setup() and loop() after flashing. The problem appears to be specifically the serial output path.
Current platformio.ini
I also explicitly enabled the S3 native USB CDC settings:
[env:esp32-s3-devkitc-1]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
monitor_speed = 115200
build_flags =
-DARDUINO_USB_MODE=1
-DARDUINO_USB_CDC_ON_BOOT=1
lib_deps =
adafruit/Adafruit NeoPixel
After a clean rebuild, the build output contains:
Compiling .../FrameworkArduino/HWCDC.cpp.o
Compiling .../FrameworkArduino/USB.cpp.o
Compiling .../FrameworkArduino/USBCDC.cpp.o
So the USB CDC-related framework files are actually being compiled.
I also checked the build environment and initially only had:
('ARDUINO_USB_MODE', 1),
which is why I added:
-DARDUINO_USB_CDC_ON_BOOT=1
But even after adding it and doing a clean rebuild, Serial Monitor remains completely blank.
Second USB port
The second USB-C port is:
/dev/cu.usbmodem5C840017341
VID:PID=1A86:55D3
Description: USB Single Serial
This is the external USB-UART interface.
Uploading through this port currently does not work, while uploading through /dev/cu.usbmodem14301 works normally.
Very important comparison
A normal ESP32 (non-S3) works normally with Serial Monitor using the same general PlatformIO workflow.
The problem is specifically with this ESP32-S3.
I have also seen reports of ESP32-S3 + PlatformIO where:
-
firmware uploads successfully;
-
the application runs;
-
Serial Monitor connects;
-
but
Serial.print()/Serial.println()produces no output.
I’m trying to determine whether this is:
-
an Arduino-ESP32 HWCDC/USB CDC issue;
-
a PlatformIO/espressif32 configuration issue;
-
a framework version issue;
-
a macOS/native USB-Serial-JTAG issue;
-
a USB port/interface selection issue;
-
or something specific to the ESP32-S3-DevKitC-1 board configuration.
The key symptom is:
ESP32-S3 firmware uploads successfully through
/dev/cu.usbmodem14301, the firmware definitely runs (RGB test works), butSerial.println()produces absolutely nothing in PlatformIO Serial Monitor at 115200 baud.
Has anyone had this exact combination of symptoms on ESP32-S3 + PlatformIO + macOS, and what was the actual fix?