Pins to watch on the ESP32-S3
GPIO 0, 3, 45 and 46: strapping pins
GPIO0 has a pull-up and goes to the BOOT button: LOW at reset starts download mode. GPIO46 must be LOW or floating for download mode, and GPIO45 selects the flash voltage, so neither may be pulled HIGH at power-up. GPIO3 matters only if an eFuse selects the JTAG source; on standard boards it is a free pin with ADC and touch.
| GPIO | Default at reset | What it selects | In practice |
|---|---|---|---|
| 0 | Weak pull-up (HIGH) | Boot mode: HIGH runs the program, LOW enters download mode | BOOT button; nothing else may hold it LOW |
| 3 | Floating | JTAG source, only if an eFuse enables it | A normal pin on standard chips |
| 45 | Weak pull-down (LOW) | Flash voltage: LOW 3.3 V, HIGH 1.8 V | Never pull it HIGH at reset |
| 46 | Weak pull-down (LOW) | Must be LOW for download mode; also the ROM boot messages | Never pull it HIGH at reset |
GPIO 35, 36 and 37: octal PSRAM
On the popular N8R8, N16R8V and N32R8V versions the module uses octal PSRAM or flash, and these three pins are wired to it. Only the N8 and N8R2 boards leave them free, so check the ordering code of your board before using them. On the two V versions, N16R8V and N32R8V, the ESP32-S3-WROOM-2 module has 1.8 V memory, and GPIO47 and GPIO48 run at 1.8 V too.
GPIO 19 and 20: native USB
They carry the USB D− and D+ lines of the port marked USB. Using them as GPIOs turns off uploads, serial and debugging over that port; the UART port, on GPIO 43 and 44, keeps working.
ADC, touch and Wi-Fi
ADC1 is on GPIO 1 to 10 and ADC2 on GPIO 11 to 20. The Wi-Fi driver uses ADC2, so readings on those pins can fail while Wi-Fi is on: in a connected project use GPIO 1 to 10. Touch works on GPIO 1 to 14, and GPIO 0 to 21 are RTC pins that can wake the chip from deep sleep.
Power and the RGB LED
Power the board from one source at a time: a USB port, the 5V pin or the 3V3 pin, as Espressif’s user guide says. The addressable RGB LED is on GPIO38 on v1.1 boards and on GPIO48 on the first version; it needs an RGB LED library or driver, not a plain digitalWrite().
Full ESP32-S3-DevKitC-1 pin table
| Pin | GPIO | Status | Analog | Functions | Notes |
|---|---|---|---|---|---|
| J3-14 | GPIO0 | Use with care | No | RTC_GPIO0, PWM (LEDC) | strapping, BOOT button |
| J3-4 | GPIO1 | Free to use | ADC1_CH0 | TOUCH1, RTC_GPIO1, PWM (LEDC) | No restrictions |
| J3-5 | GPIO2 | Free to use | ADC1_CH1 | TOUCH2, RTC_GPIO2, PWM (LEDC) | No restrictions |
| J1-13 | GPIO3 | Free to use | ADC1_CH2 | TOUCH3, RTC_GPIO3, PWM (LEDC) | strapping (JTAG source) |
| J1-4 | GPIO4 | Free to use | ADC1_CH3 | TOUCH4, RTC_GPIO4, PWM (LEDC) | No restrictions |
| J1-5 | GPIO5 | Free to use | ADC1_CH4 | TOUCH5, RTC_GPIO5, PWM (LEDC) | No restrictions |
| J1-6 | GPIO6 | Free to use | ADC1_CH5 | TOUCH6, RTC_GPIO6, PWM (LEDC) | No restrictions |
| J1-7 | GPIO7 | Free to use | ADC1_CH6 | TOUCH7, RTC_GPIO7, PWM (LEDC) | No restrictions |
| J1-12 | GPIO8 | Free to use | ADC1_CH7 | TOUCH8, RTC_GPIO8, PWM (LEDC) | I²C SDA |
| J1-15 | GPIO9 | Free to use | ADC1_CH8 | TOUCH9, RTC_GPIO9, PWM (LEDC) | I²C SCL |
| J1-16 | GPIO10 | Free to use | ADC1_CH9 | TOUCH10, RTC_GPIO10, PWM (LEDC) | SPI CS |
| J1-17 | GPIO11 | Free to use | ADC2_CH0 | TOUCH11, RTC_GPIO11, PWM (LEDC) | ADC2: not with Wi-Fi, SPI MOSI (TX) |
| J1-18 | GPIO12 | Free to use | ADC2_CH1 | TOUCH12, RTC_GPIO12, PWM (LEDC) | ADC2: not with Wi-Fi, SPI SCK |
| J1-19 | GPIO13 | Free to use | ADC2_CH2 | TOUCH13, RTC_GPIO13, PWM (LEDC) | ADC2: not with Wi-Fi, SPI MISO (RX) |
| J1-20 | GPIO14 | Free to use | ADC2_CH3 | TOUCH14, RTC_GPIO14, PWM (LEDC) | ADC2: not with Wi-Fi |
| J1-8 | GPIO15 | Free to use | ADC2_CH4 | RTC_GPIO15, PWM (LEDC), XTAL_32K_P | 32 kHz crystal, ADC2: not with Wi-Fi |
| J1-9 | GPIO16 | Free to use | ADC2_CH5 | RTC_GPIO16, PWM (LEDC), XTAL_32K_N | 32 kHz crystal, ADC2: not with Wi-Fi |
| J1-10 | GPIO17 | Free to use | ADC2_CH6 | RTC_GPIO17, PWM (LEDC) | ADC2: not with Wi-Fi |
| J1-11 | GPIO18 | Free to use | ADC2_CH7 | RTC_GPIO18, PWM (LEDC) | ADC2: not with Wi-Fi |
| J3-20 | GPIO19 | Use with care | ADC2_CH8 | RTC_GPIO19, PWM (LEDC), USB D− | native USB, ADC2: not with Wi-Fi |
| J3-19 | GPIO20 | Use with care | ADC2_CH9 | RTC_GPIO20, PWM (LEDC), USB D+ | native USB, ADC2: not with Wi-Fi |
| J3-18 | GPIO21 | Free to use | No | RTC_GPIO21, PWM (LEDC) | No restrictions |
| J3-13 | GPIO35 | Use with care | No | PWM (LEDC) | octal PSRAM or flash |
| J3-12 | GPIO36 | Use with care | No | PWM (LEDC) | octal PSRAM or flash |
| J3-11 | GPIO37 | Use with care | No | PWM (LEDC) | octal PSRAM or flash |
| J3-10 | GPIO38 | Free to use | No | PWM (LEDC) | RGB LED (v1.1) |
| J3-9 | GPIO39 | Free to use | No | PWM (LEDC), MTCK (JTAG) | JTAG |
| J3-8 | GPIO40 | Free to use | No | PWM (LEDC), MTDO (JTAG) | JTAG |
| J3-7 | GPIO41 | Free to use | No | PWM (LEDC), MTDI (JTAG) | JTAG |
| J3-6 | GPIO42 | Free to use | No | PWM (LEDC), MTMS (JTAG) | JTAG |
| J3-2 | GPIO43 | Use with care | No | PWM (LEDC), U0TXD | UART0, UART TX |
| J3-3 | GPIO44 | Use with care | No | PWM (LEDC), U0RXD | UART0, UART RX |
| J3-15 | GPIO45 | Use with care | No | PWM (LEDC) | strapping |
| J1-14 | GPIO46 | Use with care | No | PWM (LEDC) | strapping |
| J3-17 | GPIO47 | Free to use | No | PWM (LEDC) | 1.8 V on V modules |
| J3-16 | GPIO48 | Free to use | No | PWM (LEDC) | 1.8 V on V modules, RGB LED (v1.0) |
Arduino-ESP32 defaults for the ESP32-S3: I²C on 8 (SDA) and 9 (SCL), SPI on 12 (SCK), 13 (MISO), 11 (MOSI) and 10 (SS), UART0 on 43 (TX) and 44 (RX). Through the GPIO matrix any free pin can carry them.
Frequently asked questions
Which ESP32-S3 pins are safe to use?
On a DevKitC-1 the pins without restrictions are GPIO 1, 2, 4 to 18, 21, 38 to 42, 47 and 48 (except on the 1.8 V N16R8V and N32R8V boards); GPIO 38 or 48 also drives the RGB LED, depending on the board version. GPIO3 is free too unless an eFuse uses it for JTAG, and on N8 and N8R2 boards so are 35 to 37. Be careful with 0, 45 and 46 (strapping), 19 and 20 (USB) and 43 and 44 (UART0).
Why can’t I use GPIO 35, 36 and 37?
On boards with octal PSRAM or flash (N8R8, N16R8V, N32R8V) these pins are wired to the memory inside the module, and driving them crashes the program. They are free only on the N8 and N8R2 versions.
Can I use ADC2 with Wi-Fi on the ESP32-S3?
Not reliably: the Wi-Fi driver uses ADC2, so readings on GPIO 11 to 20 can fail while Wi-Fi is on. Put analog inputs on GPIO 1 to 10 (ADC1).
Which USB port of the DevKitC-1 should I use?
Both work for uploads. The UART port goes through a USB-to-UART bridge to GPIO 43 and 44; the USB port connects to the chip’s own USB on GPIO 19 and 20, and also offers JTAG debugging and USB device functions such as a keyboard.
Are ESP32-S3 pins 5 V tolerant?
No. The GPIOs work at 3.3 V and are not rated for 5 V. Use a level shifter or a resistor divider for 5 V signals.