ESP32-S3 DevKitC-1 Pinout Diagram + Safe GPIOs (2026)

This guide focuses on pinout and GPIO selection for the DevKitC-1, so you can safely connect sensors, relays, USB, displays etc. without running into weird boot issues.

The ESP32-S3-DevKitC-1 is Espressifโ€™s entry-level development board for the ESP32-S3-WROOM-1 / 1U / 2 modules โ€“ a Wi-Fi + Bluetooth LE SoC with dual-core CPU, vector instructions for AI, and plenty of GPIOs.

Scope: This article targets the official ESP32-S3-DevKitC-1 board as documented by Espressif (J1/J3 pin headers).


1. Board overview

On ESP32-S3-DevKitC-1, Espressif breaks out all available GPIOs except the internal flash bus to two 22-pin headers: J1 and J3.

Key onboard components:

  • ESP32-S3-WROOM-1 / 1U / 2 module (Wi-Fi + BT LE, 8โ€“32 MB flash, optional PSRAM)
  • 5 V โ†’ 3.3 V LDO regulator
  • USB-to-UART port (Micro-USB) โ€“ power + serial + flashing
  • Native ESP32-S3 USB port โ€“ USB 1.1 OTG (device/host + JTAG)
  • BOOT button โ€“ enter download mode (when combined with RESET)
  • RESET (EN) button โ€“ resets the chip
  • Addressable RGB LED on GPIO48
  • 3.3 V power LED

For some board variants with Octal SPI flash/PSRAM, GPIO35, GPIO36 and GPIO37 are internally used for flash/PSRAM and not available externally, even though they appear in generic pin maps.


2. Power supply options

The DevKitC-1 supports three mutually exclusive power inputs:

  1. USB-to-UART port (Micro-USB) โ€“ default/recommended
  2. ESP32-S3 USB port (native USB)
  3. Header pins
    • 5V + GND โ€“ feed 5 V to onboard LDO
    • 3V3 + GND โ€“ feed regulated 3.3 V directly

Practical rules:

  • For development: just use the USB-to-UART port; it powers and exposes serial.
  • If using the 5V pin, supply a stable 5 V (e.g. DC/DC buck from 12 V).
  • If using 3V3, your external regulator must handle Wi-Fi peaks.

Logic level on GPIOs is always 3.3 V โ€“ do not feed 5 V into any GPIO.


3. ESP32-S3 GPIO basics

The ESP32-S3 SoC exposes 45 GPIOs (GPIO0โ€“21 and GPIO26โ€“48; 22โ€“25 donโ€™t exist).

On the DevKitC-1

  • Most GPIOs are brought out on J1/J3
  • GPIO43 (TX) and GPIO44 (RX) are wired to the USB-to-UART bridge
  • GPIO48 drives the on-board RGB LED
  • For some module variants, GPIO35โ€“37 are reserved for internal Octal flash/PSRAM (not for external use)

GPIOs are multiplexed: any given pin can often be digital I/O, ADC, touch, IยฒC, SPI, UART, PWM, etc., routed through the IO matrix.


4. Strapping pins โ€“ pins that affect boot

ESP32-S3 has four strapping pins that are sampled at reset to decide boot mode, flash voltage and JTAG source:

  • GPIO0 โ€“ boot mode (firmware from flash vs download mode)
  • GPIO46 โ€“ boot mode + ROM message printing
  • GPIO45 โ€“ VDD_SPI voltage (3.3 V vs 1.8 V for flash/PSRAM)
  • GPIO3 โ€“ JTAG signal source selection

What this means in practice:

  • If you pull these pins strongly HIGH/LOW at reset, you can:
    • Force download mode instead of normal boot (GPIO0/46)
    • Misconfigure flash voltage (GPIO45) and potentially break boot
    • Confuse JTAG configuration (GPIO3)

Recommendation:
For mainstream projects, avoid using GPIO0, GPIO3, GPIO45, GPIO46 except as very carefully-designed inputs/jumpers.


5. โ€œSafeโ€ everyday GPIOs on DevKitC-1

From the official header tables (J1/J3) and GPIO restrictions, we can define a safe default set of pins for digital I/O, PWM etc.

5.1 Good general-purpose GPIOs

These are usually free of boot/flash quirks and available on the DevKitC-1:

  • GPIO1, 2, 4, 5, 6, 7, 8, 9, 10
  • GPIO11, 12, 13, 14, 15, 16, 17, 18
  • GPIO19, 20, 21
  • GPIO38, 39, 40, 41, 42
  • GPIO33, 34
  • GPIO43, 44 (though used by UART0)
  • GPIO47, 48 (48 is tied to RGB LED)

Notes:

  • On some ESP32-S3-WROOM-1/2 variants with Octal memory, GPIO35โ€“37 are used internally โ†’ donโ€™t rely on them unless you check your exact module code.
  • GPIO43/44 are shared with USB-to-UART bridge; you can still use them, but heavy external loading will affect flashing/Serial.

5.2 Pins to treat with caution

  • Strapping pins โ€“ GPIO0, 3, 45, 46 (boot/JTAG/VDD_SPI)
  • Internally used flash/PSRAM pins โ€“ GPIO35โ€“37 on Octal variants
  • USB Dยฑ pins โ€“ GPIO19 (USB_D-), GPIO20 (USB_D+) when using native USB

6. ADC pins (analog inputs)

ESP32-S3 includes two 12-bit SAR ADCs with 20 channels:

  • ADC1 (10 channels): GPIO1โ€“10
  • ADC2 (10 channels): GPIO11โ€“20

Key points:

  • Resolution: 12 bits (0โ€“4095) by default
  • Usable voltage range depends on attenuation; typical range up to about 2.5โ€“3.0 V for the default 11 dB setting โ€“ keep input โ‰ค 3.3 V.
  • Some Arduino/ESP-IDF stacks still treat ADC2 as shared with Wi-Fi, so for maximum robustness in Wi-Fi-heavy projects itโ€™s safest to prefer ADC1 (GPIO1โ€“10).

6.1 Recommended ADC pins on DevKitC-1

Best choices (ADC1, Wi-Fi-friendly):

  • GPIO1 โ†’ ADC1_CH0
  • GPIO2 โ†’ ADC1_CH1
  • GPIO3 โ†’ ADC1_CH2 (strapping โ€“ avoid unless you know what youโ€™re doing)
  • GPIO4โ€“10 โ†’ ADC1_CH3โ€“9

ADC2 (11โ€“20) are usable, but:

  • They may conflict with Wi-Fi in certain frameworks
  • GPIO19 and GPIO20 double as USB D-/D+ โ€“ donโ€™t use as ADC if native USB is active

7. Touch sensor pins

ESP32-S3 has multiple capacitive touch pads (TOUCH1โ€“TOUCH14) mapped to GPIOs 1โ€“14 (plus 3,4,… etc โ€“ see IO list).

On the DevKitC-1, common touch-capable GPIOs include:

  • GPIO1โ€“10 (TOUCH1โ€“TOUCH10)
  • GPIO3 (TOUCH3)
  • GPIO4โ€“8, 9, 10 (TOUCH4โ€“10)
  • GPIO11โ€“14 (TOUCH11โ€“14)

Good practical choices (avoid strapping pins):

  • GPIO4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14

Use touchRead(pin) (Arduino) or the ESP-IDF touch driver to read values and configure touch wake from deep sleep.


8. USB pins (native USB D+ / D-)

Unlike the classic ESP32, the S3 has native USB 2.0 Full-Speed OTG. On DevKitC-1, the USB signals are mapped to:

  • GPIO20 โ†’ USB_D+ (also ADC2_CH9, U1CTS, CLK_OUT1)
  • GPIO19 โ†’ USB_D- (also ADC2_CH8, U1RTS, CLK_OUT2)

They are routed to the ESP32-S3 USB port.

Practical rules:

  • If you use TinyUSB / native USB (CDC, HID, MIDI, etc.), treat GPIO19/20 as dedicated USB pins.
  • Donโ€™t connect external circuits to these pins while using the USB connector.
  • If youโ€™re not using native USB, they behave as normal GPIO/ADC โ€“ but be careful not to short them when a USB cable is plugged.

9. IยฒC pins

ESP32-S3 can route IยฒC signals to almost any GPIO via the IO matrix.

For simplicity and consistency across projects, a sensible default choice on DevKitC-1 is:

FunctionRecommended GPIOReason
SDAGPIO8On J1, ADC1, touch, no special boot role
SCLGPIO9On J1, ADC1, touch, also used in examples

Example (Arduino):

#include <Wire.h>

void setup() {
  Wire.begin(8, 9);  // SDA = GPIO8, SCL = GPIO9
}

Other combinations are possible, but avoid:

  • GPIO0, 3, 45, 46 (strapping)
  • Pins used for USB (19/20) if you actually use native USB
  • GPIO35โ€“37 on Octal memory variants

10. SPI pins

The ESP32-S3 has multiple SPI controllers. One is dedicated to the internal flash/PSRAM (using FSPI pins like GPIO35โ€“38 on some modules); others (e.g. SPI2/3) are available for user devices.

On DevKitC-1 the J3 header exposes a nice cluster of FSPI-capable pins:

  • GPIO38 โ€“ FSPIWP / SUBSPIWP
  • GPIO37 โ€“ SPIDQS / FSPIQ
  • GPIO36 โ€“ SPIIO7 / FSPICLK
  • GPIO35 โ€“ SPIIO6 / FSPID

These are ideal as a high-speed SPI bus when theyโ€™re not used internally by Octal flash/PSRAM (check your module variant).

A typical user-SPI mapping that works well on common N8R8 boards:

SignalRecommended GPIO
SCKGPIO36
MISOGPIO37
MOSIGPIO35
CSGPIO38

If you have an Octal memory variant where these pins are internal, pick another run of โ€œsafeโ€ GPIOs (e.g. 11โ€“14 or 4โ€“7) and route them as SPI via the GPIO matrix.


11. UART / Serial pins

ESP32-S3 has three UART controllers.

On DevKitC-1, the default mapping is:

  • UART0 (console / flashing)
    • TX0 โ†’ GPIO43 (TX pin on J3)
    • RX0 โ†’ GPIO44 (RX pin on J3)
  • Other UARTs (UART1/2) can be mapped to any suitable GPIO via IO matrix (e.g. 16/17, 19/20, etc.)

Recommendations:

  • Leave GPIO43/44 primarily for Serial console and flashing.
  • For an extra hardware Serial (GPS, RS-485, etc.):
    • choose a pair from safe pins (e.g. GPIO17 = TX, GPIO16 = RX)
    • configure via Serial1.begin(baud, config, RX, TX) (Arduino) or UART driver in ESP-IDF.

12. Practical pin recipes for ESP32-S3-DevKitC-1

12.1 Classic Wi-Fi sensor + relay node

Ready-to-reuse pattern:

FunctionRecommended GPIOsNotes
IยฒC SDAGPIO8BME280, OLED, etc.
IยฒC SCLGPIO9
Relay outputGPIO33 or GPIO34Far from strapping / USB pins
Extra digital inputGPIO38 or GPIO39Button, reed switch
Analog sensor inputGPIO1 / 2 / 4 / 5ADC1, safe with Wi-Fi

12.2 USB gadget (HID/CDC/MIDI) with status LED & button

FunctionRecommended GPIOsNotes
USB D+ / D-GPIO20 / GPIO19Via native USB port
Status RGB LEDGPIO48On-board LED
User buttonGPIO4 or GPIO5Optional touch + digital input

13. Summary โ€“ ESP32-S3-DevKitC-1 โ€œrules of thumbโ€

Compared to a classic ESP32 DevKit, the ESP32-S3-DevKitC-1 gives you Bluetooth LE + native USB + better ADC, but you must respect a few rules:

  1. Avoid strapping pins for normal I/O
    โ†’ GPIO0, 3, 45, 46 (boot, VDD_SPI, ROM printing, JTAG).
  2. Treat USB pins specially
    โ†’ GPIO19 (USB_D-), GPIO20 (USB_D+) โ€“ donโ€™t share with other circuitry when using native USB.
  3. Watch out for internal flash/PSRAM pins
    โ†’ On Octal variants, GPIO35โ€“37 are not for external use.
  4. Prefer ADC1 for Wi-Fi projects
    โ†’ Use GPIO1โ€“10 for analog sensors; ADC2 (11โ€“20) may clash with Wi-Fi in some stacks.
  5. Use a โ€œsafeโ€ GPIO pool
    โ†’ For general I/O: 1, 2, 4โ€“10, 11โ€“18, 19โ€“21, 33โ€“34, 38โ€“42, 43โ€“44, 47โ€“48 on non-Octal variants.

Follow these and the S3-DevKitC-1 becomes a very predictable board for Wi-Fi sensors, USB devices, Home Assistant nodes, and general ESP32-S3 experiments โ€“ with minimal โ€œwhy the hell wonโ€™t it boot?โ€ moments.

Share your love