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:
- USB-to-UART port (Micro-USB) โ default/recommended
- ESP32-S3 USB port (native USB)
- 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:
| Function | Recommended GPIO | Reason |
|---|---|---|
| SDA | GPIO8 | On J1, ADC1, touch, no special boot role |
| SCL | GPIO9 | On 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:
| Signal | Recommended GPIO |
|---|---|
| SCK | GPIO36 |
| MISO | GPIO37 |
| MOSI | GPIO35 |
| CS | GPIO38 |
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:
| Function | Recommended GPIOs | Notes |
|---|---|---|
| IยฒC SDA | GPIO8 | BME280, OLED, etc. |
| IยฒC SCL | GPIO9 | |
| Relay output | GPIO33 or GPIO34 | Far from strapping / USB pins |
| Extra digital input | GPIO38 or GPIO39 | Button, reed switch |
| Analog sensor input | GPIO1 / 2 / 4 / 5 | ADC1, safe with Wi-Fi |
12.2 USB gadget (HID/CDC/MIDI) with status LED & button
| Function | Recommended GPIOs | Notes |
|---|---|---|
| USB D+ / D- | GPIO20 / GPIO19 | Via native USB port |
| Status RGB LED | GPIO48 | On-board LED |
| User button | GPIO4 or GPIO5 | Optional 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:
- Avoid strapping pins for normal I/O
โ GPIO0, 3, 45, 46 (boot, VDD_SPI, ROM printing, JTAG). - Treat USB pins specially
โ GPIO19 (USB_D-), GPIO20 (USB_D+) โ donโt share with other circuitry when using native USB. - Watch out for internal flash/PSRAM pins
โ On Octal variants, GPIO35โ37 are not for external use. - Prefer ADC1 for Wi-Fi projects
โ Use GPIO1โ10 for analog sensors; ADC2 (11โ20) may clash with Wi-Fi in some stacks. - 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.


