esp32 s3 problem

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:

  1. an Arduino-ESP32 HWCDC/USB CDC issue;

  2. a PlatformIO/espressif32 configuration issue;

  3. a framework version issue;

  4. a macOS/native USB-Serial-JTAG issue;

  5. a USB port/interface selection issue;

  6. 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), but Serial.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?

Is this post helpful?

Please refer to the platform.ini configuration that is known to work.