Hi All,
Just tried my new ESP32-C3 Super mini, with a Random Nerds Webserver and ran straight into a serial monitor problem.
I cannot get any serial monitor in PIO.
Just to prove a point, in Arduino IDE, the serial monitor works. I can get the webserver IP address and the board is working. It toggles the on-board LED with the webserver switch on PC and my phone OK.
Done some research and tried some things, but still no good in PIO.
So far my PIO ini is …
; PlatformIO Project Configuration File
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:esp32c3_supermini]
platform = espressif32
board = esp32-c3-devkitc-02
;board = esp32-c3-devkitm-1
board_build.mcu = esp32c3
framework = arduino
monitor_speed = 115200
monitor_rts = 0
monitor_dtr = 0
build_flags =
-DARDUINO_USB_CDC_ON_BOOT=1
-DARDUINO_USB_MODE=1
OK, will try. This was one of the “fixes” I found, didn’t work for me obvs.
Is COM5, tried AUTO also, neither worked.
In Windows device manager the ESP32-C3 is “unidentified” as such, just a “USB Serial device”.
My other ESP32-Wroom boards show as “CP210X USB to UART Bridge” or “USB-Serial CH340”.
In Arduino IDE it shows as “ESP32C3 Dev module”
In PIO, just “USB VID:PID=303A:1001 SER=1C:DB:D4:37:33:F0 LOCATION=1-2:x.0” so not sure if my PIO.ini is chosing correct board ?
Arduino IDE “Get board info” agrees with VID:0x303A PID:0x1001.
I guess this is because the C3 has on-board USB, with no serial interface chip on the board ?
In Arduino IDE …
CDCOnBoot = Enabled
JTAGAdapter= Integrated USB JTAG
No serial monitor output.
Get this …
--- Terminal on COM5 | 115200 8-N-1
--- Available filters and text transformations: colorize, debug, default, direct, esp32_exception_decoder, hexlify, log2file, nocontrol, printable, send_on_enter, time
--- More details at https://bit.ly/pio-monitor-filters
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H
This is the PIO compile monitor …
Processing esp32c3_supermini (platform: espressif32; board: esp32-c3-devkitm-1; framework: arduino)
------------------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-c3-devkitm-1.html
PLATFORM: Espressif 32 (6.12.0) > Espressif ESP32-C3-DevKitM-1
HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-builtin, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- framework-arduinoespressif32 @ 3.20017.241212+sha.dcc1105b
- tool-esptoolpy @ 2.40900.250804 (4.9.0)
- tool-mkfatfs @ 2.0.1
- tool-mklittlefs @ 1.203.210628 (2.3)
- tool-mkspiffs @ 2.230.0 (2.30)
- toolchain-riscv32-esp @ 8.4.0+2021r2-patch5
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 33 compatible libraries
Scanning dependencies...
Dependency Graph
|-- WebServer @ 2.0.0
|-- WiFi @ 2.0.0
Building in release mode
Compiling .pio\build\esp32c3_supermini\src\ESP32 Wifi Webserver - Simple.cpp.o
Building .pio\build\esp32c3_supermini\bootloader.bin
Generating partitions .pio\build\esp32c3_supermini\partitions.bin
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFi.cpp.o
esptool.py v4.9.0
Creating esp32c3 image...
Merged 1 ELF section
Successfully created esp32c3 image.
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFiAP.cpp.o
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFiClient.cpp.o
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFiGeneric.cpp.o
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFiMulti.cpp.o
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFiSTA.cpp.o
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFiScan.cpp.o
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFiServer.cpp.o
Compiling .pio\build\esp32c3_supermini\lib423\WiFi\WiFiUdp.cpp.o
Compiling .pio\build\esp32c3_supermini\libec6\FS\FS.cpp.o
Compiling .pio\build\esp32c3_supermini\libec6\FS\vfs_api.cpp.o
Compiling .pio\build\esp32c3_supermini\lib461\WebServer\Parsing.cpp.o
Archiving .pio\build\esp32c3_supermini\lib423\libWiFi.a
Compiling .pio\build\esp32c3_supermini\lib461\WebServer\WebServer.cpp.o
Compiling .pio\build\esp32c3_supermini\lib461\WebServer\detail\mimetable.cpp.o
Archiving .pio\build\esp32c3_supermini\libec6\libFS.a
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\Esp.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\FirmwareMSC.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\FunctionalInterrupt.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\HWCDC.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\HardwareSerial.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\IPAddress.cpp.o
Archiving .pio\build\esp32c3_supermini\lib461\libWebServer.a
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\IPv6Address.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\MD5Builder.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\Print.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\Stream.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\StreamString.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\Tone.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\USB.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\USBCDC.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\USBMSC.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\WMath.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\WString.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\base64.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\cbuf.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-adc.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-bt.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-cpu.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-dac.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-gpio.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-i2c-slave.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-i2c.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-ledc.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-matrix.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-misc.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-psram.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-rgb-led.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-rmt.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-sigmadelta.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-spi.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-time.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-timer.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-tinyusb.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-touch.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\esp32-hal-uart.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\firmware_msc_fat.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\libb64\cdecode.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\libb64\cencode.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\main.cpp.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\stdlib_noniso.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\wiring_pulse.c.o
Compiling .pio\build\esp32c3_supermini\FrameworkArduino\wiring_shift.c.o
Archiving .pio\build\esp32c3_supermini\libFrameworkArduino.a
Linking .pio\build\esp32c3_supermini\firmware.elf
Retrieving maximum program size .pio\build\esp32c3_supermini\firmware.elf
Checking size .pio\build\esp32c3_supermini\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [ ] 4.2% (used 13748 bytes from 327680 bytes)
Flash: [== ] 18.9% (used 247474 bytes from 1310720 bytes)
Building .pio\build\esp32c3_supermini\firmware.bin
esptool.py v4.9.0
Creating esp32c3 image...
Merged 2 ELF sections
Successfully created esp32c3 image.
Configuring upload protocol...
AVAILABLE: cmsis-dap, esp-bridge, esp-builtin, esp-prog, espota, esptool, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa
CURRENT: upload_protocol = esptool
Looking for upload port...
Using manually specified: COM5
Uploading .pio\build\esp32c3_supermini\firmware.bin
esptool.py v4.9.0
Serial port COM5
Connecting...
Chip is ESP32-C3 (QFN32) (revision v0.4)
Features: WiFi, BLE, Embedded Flash 4MB (XMC)
Crystal is 40MHz
USB mode: USB-Serial/JTAG
MAC: 1c:db:d4:37:33:f0
Uploading stub...
Running stub...
Stub running...
Changing baud rate to 460800
Changed.
Configuring flash size...
Flash will be erased from 0x00000000 to 0x00003fff...
Flash will be erased from 0x00008000 to 0x00008fff...
Flash will be erased from 0x0000e000 to 0x0000ffff...
Flash will be erased from 0x00010000 to 0x0004ffff...
SHA digest in image updated
Compressed 13248 bytes to 9562...
Writing at 0x00000000... (100 %)
Wrote 13248 bytes (9562 compressed) at 0x00000000 in 0.1 seconds (effective 773.6 kbit/s)...
Hash of data verified.
Compressed 3072 bytes to 146...
Writing at 0x00008000... (100 %)
Wrote 3072 bytes (146 compressed) at 0x00008000 in 0.1 seconds (effective 431.2 kbit/s)...
Hash of data verified.
Compressed 8192 bytes to 47...
Writing at 0x0000e000... (100 %)
Wrote 8192 bytes (47 compressed) at 0x0000e000 in 0.1 seconds (effective 993.0 kbit/s)...
Hash of data verified.
Compressed 258864 bytes to 143426...
Writing at 0x00010000... (11 %)
Writing at 0x0001b2a5... (22 %)
Writing at 0x00022d29... (33 %)
Writing at 0x00029917... (44 %)
Writing at 0x0002f9c0... (55 %)
Writing at 0x00035b86... (66 %)
Writing at 0x0003be84... (77 %)
Writing at 0x000445a6... (88 %)
Writing at 0x0004a552... (100 %)
Wrote 258864 bytes (143426 compressed) at 0x00010000 in 0.9 seconds (effective 2182.2 kbit/s)...
Hash of data verified.
Leaving...
Hard resetting via RTS pin...
=============================================================== [SUCCESS] Took 65.47 seconds =============================================================== * Terminal will be reused by tasks, press any key to close it.
One point also, in the PIO compile monitor shown above …
Retrieving maximum program size .pio\build\esp32c3_supermini\firmware.elf
Checking size .pio\build\esp32c3_supermini\firmware.elf
Advanced Memory Usage is available via "PlatformIO Home > Project Inspect"
RAM: [ ] 4.2% (used 13748 bytes from 327680 bytes)
Flash: [== ] 18.9% (used 247474 bytes from 1310720 bytes)
These boards works differently: The Serial objects outputs to the UART port.
And on the UART pins is a UART to USB converter chip (CH340 / CP210X) connected.
On the ESP32-C3 Super Mini, the ESP’s native built-in USB is used to establish the serial connection. That’s why you have to use -DARDUINO_USB_CDC_ON_BOOT=1 and -DARDUINO_USB_MODE=1. These settings routes the output of the Serial object to the native USB port instead of the UART port.
The use of the native USB port is also the reason why the serial connection is lost / gets interrupted when the ESP reboot (for example after flashing a new firmware).
I noticed these lines, but didn’t think about it at the time …
|-- WebServer @ 2.0.0
|-- WiFi @ 2.0.0
Looked at my settings.json and it’s a massive trail of everything I’ve done in PIO so far.
I have noticed whenever I change my PIO.ini, the compile window goes through a very long list of dependancies, even for this tiny sketch.
I put this line into PIO.ini, which set off installing the latest Arduino IDE.
Wish I didn’t do that !
VSC / PIO went off into their own little world, downloading and installing various extensions, etc.
Some downloads failed, quite a lot failed to install correctly.
By the end I now get this message when I open a project folder …
[11/21/2025, 11:10:50 AM] Unable to resolve configuration with compilerPath: "riscv32-esp-elf-gcc"
Then when I compile …
* Executing task: C:\Users\Trev\.platformio\penv\Scripts\platformio.exe run --target upload
Processing esp32c3_supermini (platform: espressif32; board: esp32-c3-devkitm-1; framework: arduino)
------------------------------------------------------------------------------------------------------------------------------------------------------------Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/espressif32/esp32-c3-devkitm-1.html
PLATFORM: Espressif 32 (55.3.34) > Espressif ESP32-C3-DevKitM-1
HARDWARE: ESP32C3 160MHz, 320KB RAM, 4MB Flash
DEBUG: Current (cmsis-dap) External (cmsis-dap, esp-bridge, esp-builtin, esp-prog, iot-bus-jtag, jlink, minimodule, olimex-arm-usb-ocd, olimex-arm-usb-ocd-h, olimex-arm-usb-tiny-h, olimex-jtag-tiny, tumpa)
PACKAGES:
- contrib-piohome @ 3.4.4
- framework-arduinoespressif32 @ 3.3.4
- framework-arduinoespressif32-libs @ 5.5.0+sha.8410210c9a
- tool-dfuutil-arduino @ 1.11.0
- tool-esptoolpy @ 5.1.0
- tool-mkfatfs @ 2.0.1
- tool-mklittlefs @ 3.2.0
- tool-mklittlefs4 @ 4.0.2
- tool-mkspiffs @ 2.230.0 (2.30)
- toolchain-riscv32-esp @ 14.2.0+20250730
*** WARNING: Windows Long Path Support is disabled ***
*** Enable it for better performance: ***
*** 1. Run as Administrator: gpedit.msc ***
*** 2. Navigate to: Computer Configuration > Administrative Templates > System > Filesystem ***
*** 3. Enable 'Enable Win32 long paths' ***
*** OR run PowerShell as Admin: ***
*** New-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Control\FileSystem' -Name 'LongPathsEnabled' -Value 1 -PropertyType DWORD -Force ***
*** Restart required after enabling ***
*** Applied include path shortening for 304 framework paths ***
*** Path length reduced from 35755 to ~12743 characters ***
*** Estimated savings: 22496 characters ***
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
LDF Modes: Finder ~ chain, Compatibility ~ soft
Found 42 compatible libraries
Scanning dependencies...
Dependency Graph
|-- WebServer @ 3.3.4
|-- WiFi @ 3.3.4
Building in release mode
Compiling .pio\build\esp32c3_supermini\libec6\FS\FS.cpp.o
Compiling .pio\build\esp32c3_supermini\libec6\FS\vfs_api.cpp.o
Compiling .pio\build\esp32c3_supermini\lib008\Network\NetworkClient.cpp.o
Compiling .pio\build\esp32c3_supermini\lib008\Network\NetworkEvents.cpp.o
'riscv32-esp-elf-g++' is not recognized as an internal or external command,
operable program or batch file.
*** [.pio\build\esp32c3_supermini\libec6\FS\FS.cpp.o] Error 1
'riscv32-esp-elf-g++' is not recognized as an internal or external command,
operable program or batch file.
*** [.pio\build\esp32c3_supermini\libec6\FS\vfs_api.cpp.o] Error 1
'riscv32-esp-elf-g++' is not recognized as an internal or external command,
operable program or batch file.
*** [.pio\build\esp32c3_supermini\lib008\Network\NetworkClient.cpp.o] Error 1
'riscv32-esp-elf-g++' is not recognized as an internal or external command,
operable program or batch file.
*** [.pio\build\esp32c3_supermini\lib008\Network\NetworkEvents.cpp.o] Error 1
Nothing works now
This process also takes ages to go through.
None of my old projects work now.
Oooooops !
Trevor
Back up and running again.
PIOArduino working.
Tried an “old” project to a ESP32-Wroom-32S, all works fine, serial monitor OK.
ESP32-C3 still no serial output.
I’ve tried reseting the ESP32-C3 after build, no difference.
Checked the baud rate in Windows device manager.
Port is COM5 and same as Windows device manager (unplug and plug back in to check).
Tried building with boot button held.
Even tried the USB-C cable reversed in ESP32-C3 socket (desperate measures )
ESP32-C3 board and sketch working ok … built-in LED flashing, but no serial output.
I might have to go “Blind” on ESP32-C3 projects, without serial terminal.
I do have some tiny OLED I2C displays (or one of my SPI TFT screens) that could tell me what’s going on in a project, during development.
Trevor
When you click the serial port selector you should see something like this: COM<X> Serial USB-Device (COM<X>) | USB VID:PID=303A:1001 SER=XX:XX:XX:XX:XX:XX
OMG Boris, you’re right again !!!
Success !!!
The indentation was the probelm, can’t believe that.
Thank you for sticking with me on this.
It did actually build very quickly just now, from a cold start.
I had PC off, so VS Code had to be started, I tweeked PIO.ini, then just build.
Pretty quick, so I’m very happy, thank you again !!
Trevor
I never used touch / widgets. I don’t have touch display.
But I assume you also have to rotate / convert the touch input to the same rotation as the display.