ESP32-S3-Pico: USB Ports, Arduino Upload and Memory Test
Get started with the Waveshare ESP32-S3-Pico, identify its USB/UART path and upload a serial test for the S3R2 board.
On this page
What this Pico-shaped board containsConnect and identify the upload pathArduino settings for this exampleUpload a minimal memory testConfirm that the program runsUse the correct GPIO mapTroubleshootingDownloads, references and validationCompatible product and related tutorials
What this Pico-shaped board contains
This is the Waveshare ESP32-S3-Pico using ESP32-S3R2, 16 MB flash and 2 MB PSRAM. It runs ESP32 firmware, not RP2040 firmware. Its CH334 USB hub and CH343 serial bridge expose different development paths through one USB-C connector. The board’s physical similarity to a Raspberry Pi Pico does not make the electrical pin names interchangeable.
Connect and identify the upload path
Use USB-C and a data cable, with external wiring removed. Observe which USB devices and COM ports appear. For the CH343 UART path, install the WCH driver if the operating system needs it. For native USB, distinguish the boot/download port from the running application’s CDC port; they can have different names.
Arduino settings for this example
| Option | Setting |
|---|---|
| Board | ESP32S3 Dev Module |
| Flash Size | 16MB |
| PSRAM | QSPI PSRAM for the documented S3R2 board |
| USB CDC On Boot | Enabled |
| Serial Monitor | 115200 baud |
The downloadable example was compiled with Arduino-ESP32 3.3.0. Choose the upload mode/port for the USB path you are actually using. Do not copy the 8 MB OPI PSRAM configuration from an S3R8 display board.
Upload a minimal memory test
#include <Arduino.h>
void setup() {
Serial.begin(115200);
delay(2000);
}
void loop() {
Serial.printf("%s | cores=%u | flash=%lu | PSRAM=%lu | free heap=%lu\n",
ESP.getChipModel(), ESP.getChipCores(),
(unsigned long)ESP.getFlashChipSize(),
(unsigned long)ESP.getPsramSize(),
(unsigned long)ESP.getFreeHeap());
delay(2000);
}
For native USB download mode, hold BOOT while resetting or connecting the board, then release BOOT and upload. Press RESET afterwards if needed. Waveshare notes that manually entering boot mode is not normally needed for the UART upload path.
Confirm that the program runs
With CDC enabled, monitor the application USB CDC port at 115200. Expect an ESP32-S3 report, 16 MB flash and 2 MB PSRAM for the documented model. If uploading over CH343, the sketch’s Serial output can still appear on the separate CDC port rather than CH343. This distinction prevents mistaking a quiet monitor for a failed upload.
Use the correct GPIO map
Follow the Waveshare ESP32-S3-Pico pin map, which shows ESP32 GPIO names against the Pico-shaped header. A header position called GP0 in an RP2040 example does not mean ESP32 GPIO0. Native USB uses GPIO19/20; do not attach another device to those signals while relying on that USB connection. Reserve flash/PSRAM signals according to the specific board pinout.
Troubleshooting
| Problem | Check |
|---|---|
| No board detected | USB cable, hub enumeration and CH343 driver |
| PSRAM error after reset | S3R2 board selection and QSPI setting, rather than S3R8 OPI |
| Serial output invisible | USB CDC option and which application COM port is open |
| RP2040 accessory fails | Actual power rails and ESP32 GPIO mapping; mechanical fit alone is insufficient |
Downloads, references and validation
Download the minimal Arduino sketch (.zip)
Reviewed 21 October 2026. The downloadable minimal sketch was compiled using Arduino-ESP32 3.3.0 with the board profile recorded in its README. This checks software compilation; wiring, sensor readings and supplied hardware have not been bench-tested.
Compatible product and related tutorials
Share the product link, hardware revision, software version and any error messages.
Contact ESP32S support →