The ESP32-S3 features 45 programmable GPIOs, dual-core Xtensa LX7 processing, and native USB OTG, but not all pins are accessible or safe to use on every development board. The direct answer for standard prototyping: use GPIO43/44 for default UART, GPIO19/20 for native USB, and GPIO1-10 for ADC. Avoid GPIO33-37 on WROOM-1 modules, as they are internally routed to the SPI flash. Below is the exact pinout, strapping pin rules, and decision matrix for the ESP32-S3-WROOM-1 module and standard DevKitC-1 boards.

The Complete ESP32-S3 GPIO & Function Reference Table

This table maps the critical pins on the ESP32-S3-WROOM-1 module and standard Espressif DevKitC-1 breakout boards. Read the 'Boot Role' column carefully; ignoring strapping pins is the number one cause of boot-loop failures on the bench.

GPIO PinPrimary FunctionBoot/Strapping RoleNotes & Restrictions
GPIO0General I/O, SPIBoot Mode Select (Low = Flash)Pulled high internally. Must be LOW to enter serial bootloader.
GPIO3General I/OJTAG Signal SourceLOW = JTAG from USB; HIGH = JTAG from GPIO pins.
GPIO19, 20Native USB (D-, D+)NoneDedicated to USB-Serial/JTAG controller. Do not use for standard I/O.
GPIO21General I/ONoneDefault I2C SDA on many Arduino core variants.
GPIO33-37Octal SPI FlashNoneUnavailable on headers. Internally routed to flash/PSRAM on WROOM-1.
GPIO38-42General I/O, SPINoneSafe for general use. GPIO38 is often used for onboard NeoPixel.
GPIO43, 44Default UART (TX, RX)NoneDefault hardware UART0 pins. Safe for general I/O if UART is remapped.
GPIO45General I/O, SPISPI Boot ModeLOW = Default SPI boot; HIGH = Selects alternative boot behavior.
GPIO46General I/O, SPIBoot Log PrintLOW = Disable boot log; HIGH = Enable boot log output.
GPIO47, 48General I/ONoneSafe for general use. GPIO48 is often routed to a secondary user LED.

Rows People Get Wrong: Strapping Pins and Internal Routing

The most common bench mistakes with the ESP32-S3 stem from misunderstanding the 'Boot/Strapping Role' column above. Here is how to interpret these rows in practice and avoid bricking your boot sequence.

Warning: The Octal SPI Trap (GPIO33-37)
Many generic pinout diagrams show GPIO33 through GPIO37 as available. On the ESP32-S3-WROOM-1 module (the metal-canned chip on 99% of dev boards), these pins are permanently consumed by the internal Octal SPI flash and PSRAM. If your code attempts to initialize these pins, the MCU will crash or the flash will corrupt. Only the bare ESP32-S3 silicon (without integrated flash) exposes these.

Managing Strapping Pins (GPIO0, 3, 45, 46)

Strapping pins are sampled by the silicon only during the power-on reset (POR) phase. After boot, they function as normal GPIOs. However, if you wire a sensor or relay to GPIO0 and it pulls the line LOW during power-up, your ESP32-S3 will enter the serial bootloader and refuse to run your application.

  • The Fix: If you must use a strapping pin for an external input, place a 10kΩ pull-up resistor to 3.3V to ensure it reads HIGH during the millisecond boot window, then let your external circuit drive it LOW during normal operation.

Safe Interpretation When Silkscreen Markings are Faded

Third-party clone boards (especially unbranded AliExpress variants) frequently suffer from misprinted or faded silkscreen. Do not guess pin assignments based on faded text. Set your multimeter to continuity mode. Probe the header hole and trace it directly to the exposed castellated pads on the edge of the ESP32-S3-WROOM-1 metal RF shield. Pad 1 is located adjacent to the small dimple on the metal shield. Cross-reference the physical pad number with the official Espressif ESP32-S3 datasheet to confirm the exact GPIO mapping.

Board Variants and USB-IF Wiring Standards

Pinouts are not universal across all ESP32-S3 boards, and USB wiring standards vary between official implementations and cheap clones. Understanding which standard applies to your hardware prevents fried USB controllers.

FeatureEspressif DevKitC-1 (Official)YD-ESP32-S3 / ClonesUSB-IF Cable Standard
Native USB PinsGPIO19 (D-), GPIO20 (D+)GPIO19 (D-), GPIO20 (D+)White (D-), Green (D+)
5V Rail ToleranceStrict 5.0V ± 5% via USB-COften lacks overvoltage protection5V (Red), GND (Black)
Default UARTGPIO43 (TX), GPIO44 (RX)Varies (often 43/44 or 17/18)N/A
Onboard NeoPixelGPIO48GPIO38 or GPIO48N/A

The USB Implementers Forum (USB-IF) mandates specific color codes for internal cable wiring: Red (VBUS 5V), Black (GND), White (D-), and Green (D+). If you are cutting a USB-C cable to wire directly to the S3's native USB pads (GPIO19/20) for a custom PCB, verify the colors with a meter. Cheap, non-compliant cables frequently swap the D+/D- colors or use unshielded wires that will cause native USB enumeration failures at 12 Mbps.

Decision Path: Selecting the Right GPIO for Your Peripheral

Stop guessing which pin to use. Follow this decision tree to terminate on a concrete, optimal pin assignment for your specific peripheral.

If you need to connect...And your constraint is...Then use this exact GPIO
Hardware UART (TX/RX)Standard debugging or GPS moduleGPIO43 (TX) / GPIO44 (RX)
I2C Sensor (SDA/SCL)Standard 400kHz operationGPIO1 (SDA) / GPIO2 (SCL)
Analog Sensor (ADC)Must read while WiFi is activeGPIO11, 12, 13, or 14 (ADC2 is blocked by WiFi; use ADC1)
SPI Display (TFT)High-speed DMA transfersGPIO11 (MOSI), 12 (SCK), 10 (CS) (Dedicated SPI2 bus)
5V Relay ModuleOpto-isolated, active LOWGPIO38 (via a BSS138 logic-level MOSFET, never direct)
WS2812B LED StripLong data runs (>50 LEDs)GPIO40 (Route through a 74AHCT125 level shifter for 5V logic)
Pro-Tip: The WiFi vs ADC Conflict
The ESP32-S3 has two ADC units. ADC1 (GPIO1-10) and ADC2 (GPIO11-20). If your project uses WiFi or Bluetooth, the radio stack monopolizes ADC2. If you wire an analog moisture sensor to GPIO15 and enable WiFi, your analogRead() will return garbage. Always default to ADC1 pins (GPIO1-10) for analog sensors in IoT applications.

External Mains Wiring: IEC vs NEC Color Codes for Relays

While the ESP32-S3 operates at 3.3V logic, it is frequently used to trigger relays that switch 120V/240V AC mains. When wiring the load side of your relay or contactor, you must adhere to your region's electrical code. Miswiring the neutral and ground on the AC side is a lethal hazard and will trip GFCI/AFCI breakers immediately.

Identifying Your Regional Standard

  • North America (NEC / NFPA 70): Follows the National Electrical Code. Hot/Line is Black (or Red for 240V split-phase). Neutral is White (or Gray). Equipment Ground is Bare Copper or Green.
  • Europe / UK / Australia (IEC 60446): Follows International Electrotechnical Commission standards. Line is Brown. Neutral is Blue. Earth/Ground is Green/Yellow Stripe.

The Golden Rule: The ESP32-S3 GPIO must never share a common ground with the AC mains side of a non-isolated relay. Always use an opto-isolated relay module or a solid-state relay (SSR) with a minimum 4kV isolation rating. Wire the 3.3V GND of the S3 only to the relay module's input side ground, keeping the high-voltage AC load completely floating from your microcontroller's logic plane.