ESP32 pinout: DevKitC V4, WROOM-32E, ESP32-S3, ESP32-C3 and ESP32-C6
The ESP32-DevKitC V4 breaks out the ESP32-WROOM-32E on two 19-pin headers, and the ESP32-S3-DevKitC-1 breaks out the ESP32-S3-WROOM-1 on two 22-pin headers, all at 3.3 V logic. The header pin number differs from the GPIO number used in code, and some pins control boot or the flash. The ESP32-C3-DevKitM-1 (two 15-pin headers) and ESP32-C6-DevKitC-1 (two 16-pin headers) follow.
By Hugues Orgitello · Updated ·
ESP32-DevKitC V4: header J2 (left side), 19 pins
Numbering from the Espressif user guide and the board schematic, with an ESP32-WROOM-32E or 32UE module. The UART, SPI and JTAG functions listed are the IO_MUX ones; the GPIO matrix can route most peripherals to any I/O.
| Pin | Signal | Dir. | Silkscreen | ADC / touch / RTC | Other functions | Description |
|---|---|---|---|---|---|---|
| 1 | 3V3 | 3V3 | - | - | 3.3 V from the board regulator, or a 3.3 V input (one power source at a time) (Power) | |
| 2 | EN | In | EN | - | CHIP_PU | CHIP_PU: active high, pulling it low resets the chip (EN button, 10 kOhm pull-up on the board) (Configuration) |
| 3 | GPIO36 | In | VP | ADC1_CH0, RTC_GPIO0 | SENSOR_VP | Input only: no output driver, no internal pull-up or pull-down (Signal) |
| 4 | GPIO39 | In | VN | ADC1_CH3, RTC_GPIO3 | SENSOR_VN | Input only: no output driver, no internal pull-up or pull-down (Signal) |
| 5 | GPIO34 | In | 34 | ADC1_CH6, RTC_GPIO4 | VDET_1 | Input only: no output driver, no internal pull-up or pull-down (Signal) |
| 6 | GPIO35 | In | 35 | ADC1_CH7, RTC_GPIO5 | VDET_2 | Input only: no output driver, no internal pull-up or pull-down (Signal) |
| 7 | GPIO32 | I/O | 32 | ADC1_CH4, TOUCH9, RTC_GPIO9 | XTAL_32K_P | General-purpose I/O; input of the optional 32.768 kHz crystal (Signal) |
| 8 | GPIO33 | I/O | 33 | ADC1_CH5, TOUCH8, RTC_GPIO8 | XTAL_32K_N | General-purpose I/O; output of the optional 32.768 kHz crystal (Signal) |
| 9 | GPIO25 | I/O | 25 | ADC2_CH8, DAC_1, RTC_GPIO6 | - | General-purpose I/O; DAC 1 output (8-bit) (Signal) |
| 10 | GPIO26 | I/O | 26 | ADC2_CH9, DAC_2, RTC_GPIO7 | - | General-purpose I/O; DAC 2 output (8-bit) (Signal) |
| 11 | GPIO27 | I/O | 27 | ADC2_CH7, TOUCH7, RTC_GPIO17 | - | General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal) |
| 12 | GPIO14 | I/O | 14 | ADC2_CH6, TOUCH6, RTC_GPIO16 | MTMS, HSPICLK | General-purpose I/O; JTAG TMS (Signal) |
| 13 | GPIO12 | I/O | 12 | ADC2_CH5, TOUCH5, RTC_GPIO15 | MTDI, HSPIQ | MTDI strapping pin: must be low at reset, high switches the flash supply to 1.8 V; JTAG TDI (Configuration) |
| 14 | GND | GND | - | - | Ground (Ground) | |
| 15 | GPIO13 | I/O | 13 | ADC2_CH4, TOUCH4, RTC_GPIO14 | MTCK, HSPID | General-purpose I/O; JTAG TCK (Signal) |
| 16 | GPIO9 | I/O | D2 | - | SD_DATA2, SPIHD | SPI flash bus: do not use. On ESP32-WROOM-32E the module does not bring this signal out (NC pads), so the pin reaches nothing; on older WROOM-32 and WROVER modules it is the flash (Not connected) |
| 17 | GPIO10 | I/O | D3 | - | SD_DATA3, SPIWP | SPI flash bus: do not use. On ESP32-WROOM-32E the module does not bring this signal out (NC pads), so the pin reaches nothing; on older WROOM-32 and WROVER modules it is the flash (Not connected) |
| 18 | GPIO11 | I/O | CMD | - | SD_CMD, SPICS0 | SPI flash bus: do not use. On ESP32-WROOM-32E the module does not bring this signal out (NC pads), so the pin reaches nothing; on older WROOM-32 and WROVER modules it is the flash (Not connected) |
| 19 | 5V | 5V | - | - | 5 V from USB, or a 5 V input to the regulator (one power source at a time) (Power) |
ESP32-DevKitC V4: header J3 (right side), 19 pins
The Arduino pins (SDA, SCL, SS, MOSI, MISO, SCK) are the arduino-esp32 core defaults for this board; under ESP-IDF, the bus pins are configured freely.
| Pin | Signal | Dir. | Silkscreen | ADC / touch / RTC | Other functions | Description |
|---|---|---|---|---|---|---|
| 1 | GND | GND | - | - | Ground (Ground) | |
| 2 | GPIO23 | I/O | 23 | - | VSPID; Arduino MOSI | General-purpose I/O (Signal) |
| 3 | GPIO22 | I/O | 22 | - | VSPIWP, U0RTS; Arduino SCL | General-purpose I/O (Signal) |
| 4 | GPIO1 | Out | TX | - | U0TXD | UART0 transmit, wired to the USB-to-UART bridge: console and flashing (Signal) |
| 5 | GPIO3 | In | RX | - | U0RXD | UART0 receive, wired to the USB-to-UART bridge: console and flashing (Signal) |
| 6 | GPIO21 | I/O | 21 | - | VSPIHD; Arduino SDA | General-purpose I/O (Signal) |
| 7 | GND | GND | - | - | Ground (Ground) | |
| 8 | GPIO19 | I/O | 19 | - | VSPIQ, U0CTS; Arduino MISO | General-purpose I/O (Signal) |
| 9 | GPIO18 | I/O | 18 | - | VSPICLK; Arduino SCK | General-purpose I/O (Signal) |
| 10 | GPIO5 | I/O | 5 | - | VSPICS0; Arduino SS | Strapping pin (internal pull-up): SDIO slave timing; otherwise general-purpose I/O (Configuration) |
| 11 | GPIO17 | I/O | 17 | - | U2TXD | General-purpose I/O on boards with a WROOM module; reserved on boards with a WROVER module (Signal) |
| 12 | GPIO16 | I/O | 16 | - | U2RXD | General-purpose I/O; reserved for the PSRAM on WROVER modules and on WROOM-32E modules with PSRAM (Signal) |
| 13 | GPIO4 | I/O | 4 | ADC2_CH0, TOUCH0, RTC_GPIO10 | HSPIHD | General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal) |
| 14 | GPIO0 | I/O | 0 | ADC2_CH1, TOUCH1, RTC_GPIO11 | CLK_OUT1 | Strapping pin (internal pull-up): low at reset starts the chip in download mode; Boot button (Configuration) |
| 15 | GPIO2 | I/O | 2 | ADC2_CH2, TOUCH2, RTC_GPIO12 | HSPIWP | Strapping pin (internal pull-down): must be low or floating to enter download mode (Configuration) |
| 16 | GPIO15 | I/O | 15 | ADC2_CH3, TOUCH3, RTC_GPIO13 | MTDO, HSPICS0 | MTDO strapping pin (internal pull-up): low at reset silences the ROM messages on U0TXD; JTAG TDO (Configuration) |
| 17 | GPIO8 | I/O | D1 | - | SD_DATA1, SPID | SPI flash bus: do not use. On ESP32-WROOM-32E the module does not bring this signal out (NC pads), so the pin reaches nothing; on older WROOM-32 and WROVER modules it is the flash (Not connected) |
| 18 | GPIO7 | I/O | D0 | - | SD_DATA0, SPIQ | SPI flash bus: do not use. On ESP32-WROOM-32E the module does not bring this signal out (NC pads), so the pin reaches nothing; on older WROOM-32 and WROVER modules it is the flash (Not connected) |
| 19 | GPIO6 | I/O | CLK | - | SD_CLK, SPICLK | SPI flash bus: do not use. On ESP32-WROOM-32E the module does not bring this signal out (NC pads), so the pin reaches nothing; on older WROOM-32 and WROVER modules it is the flash (Not connected) |
ESP32-S3-DevKitC-1 v1.1: header J1 (left side), 22 pins
Numbering from the Espressif v1.1 user guide and the board schematic, with ESP32-S3-WROOM-1, 1U or WROOM-2 modules. The Arduino pins are the arduino-esp32 core defaults; FSPI is the general-purpose SPI bus wired through the IO_MUX.
| Pin | Signal | Dir. | Silkscreen | ADC / touch / RTC | Other functions | Description |
|---|---|---|---|---|---|---|
| 1 | 3V3 | 3V3 | - | - | 3.3 V from the board regulator, or a 3.3 V input (one power source at a time) (Power) | |
| 2 | 3V3 | 3V3 | - | - | 3.3 V from the board regulator, or a 3.3 V input (one power source at a time) (Power) | |
| 3 | RST (EN) | In | RST | - | CHIP_PU | CHIP_PU: active high, pulling it low resets the chip (Reset button) (Configuration) |
| 4 | GPIO4 | I/O | 4 | ADC1_CH3, TOUCH4, RTC_GPIO4 | - | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 5 | GPIO5 | I/O | 5 | ADC1_CH4, TOUCH5, RTC_GPIO5 | - | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 6 | GPIO6 | I/O | 6 | ADC1_CH5, TOUCH6, RTC_GPIO6 | - | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 7 | GPIO7 | I/O | 7 | ADC1_CH6, TOUCH7, RTC_GPIO7 | - | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 8 | GPIO15 | I/O | 15 | ADC2_CH4, RTC_GPIO15 | U0RTS, XTAL_32K_P | General-purpose I/O; input of the optional 32.768 kHz crystal (Signal) |
| 9 | GPIO16 | I/O | 16 | ADC2_CH5, RTC_GPIO16 | U0CTS, XTAL_32K_N | General-purpose I/O; output of the optional 32.768 kHz crystal (Signal) |
| 10 | GPIO17 | I/O | 17 | ADC2_CH6, RTC_GPIO17 | U1TXD | General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal) |
| 11 | GPIO18 | I/O | 18 | ADC2_CH7, RTC_GPIO18 | U1RXD, CLK_OUT3 | General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal) |
| 12 | GPIO8 | I/O | 8 | ADC1_CH7, TOUCH8, RTC_GPIO8 | SUBSPICS1; Arduino SDA | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 13 | GPIO3 | I/O | 3 | ADC1_CH2, TOUCH3, RTC_GPIO3 | - | Strapping pin, no internal pull: JTAG source at boot, only when the STRAP_JTAG_SEL eFuse is burnt (Configuration) |
| 14 | GPIO46 | I/O | 46 | - | - | Strapping pin (internal pull-down): must be low or floating to enter download mode; also takes part in ROM message printing (Configuration) |
| 15 | GPIO9 | I/O | 9 | ADC1_CH8, TOUCH9, RTC_GPIO9 | FSPIHD, SUBSPIHD; Arduino SCL | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 16 | GPIO10 | I/O | 10 | ADC1_CH9, TOUCH10, RTC_GPIO10 | FSPICS0, FSPIIO4, SUBSPICS0; Arduino SS | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 17 | GPIO11 | I/O | 11 | ADC2_CH0, TOUCH11, RTC_GPIO11 | FSPID, FSPIIO5, SUBSPID; Arduino MOSI | General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal) |
| 18 | GPIO12 | I/O | 12 | ADC2_CH1, TOUCH12, RTC_GPIO12 | FSPICLK, FSPIIO6, SUBSPICLK; Arduino SCK | General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal) |
| 19 | GPIO13 | I/O | 13 | ADC2_CH2, TOUCH13, RTC_GPIO13 | FSPIQ, FSPIIO7, SUBSPIQ; Arduino MISO | General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal) |
| 20 | GPIO14 | I/O | 14 | ADC2_CH3, TOUCH14, RTC_GPIO14 | FSPIWP, FSPIDQS, SUBSPIWP | General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal) |
| 21 | 5V | 5V | - | - | 5 V from USB, or a 5 V input to the regulator (one power source at a time) (Power) | |
| 22 | GND | G | - | - | Ground (Ground) |
ESP32-S3-DevKitC-1 v1.1: header J3 (right side), 22 pins
The addressable RGB LED is on GPIO38 on v1.1 and on GPIO48 on the first board version. GPIO19 and GPIO20 are wired to the second micro-USB port (the ESP32-S3 native USB).
| Pin | Signal | Dir. | Silkscreen | ADC / touch / RTC | Other functions | Description |
|---|---|---|---|---|---|---|
| 1 | GND | G | - | - | Ground (Ground) | |
| 2 | GPIO43 | Out | TX | - | U0TXD, CLK_OUT1 | UART0 transmit, wired to the USB-to-UART bridge (UART port): console and flashing (Signal) |
| 3 | GPIO44 | In | RX | - | U0RXD, CLK_OUT2 | UART0 receive, wired to the USB-to-UART bridge (UART port): console and flashing (Signal) |
| 4 | GPIO1 | I/O | 1 | ADC1_CH0, TOUCH1, RTC_GPIO1 | - | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 5 | GPIO2 | I/O | 2 | ADC1_CH1, TOUCH2, RTC_GPIO2 | - | General-purpose I/O, ADC1 input usable with Wi-Fi (Signal) |
| 6 | GPIO42 | I/O | 42 | - | MTMS | General-purpose I/O; pin JTAG TMS (Signal) |
| 7 | GPIO41 | I/O | 41 | - | MTDI, CLK_OUT1 | General-purpose I/O; pin JTAG TDI (Signal) |
| 8 | GPIO40 | I/O | 40 | - | MTDO, CLK_OUT2 | General-purpose I/O; pin JTAG TDO (Signal) |
| 9 | GPIO39 | I/O | 39 | - | MTCK, CLK_OUT3, SUBSPICS1 | General-purpose I/O; pin JTAG TCK (Signal) |
| 10 | GPIO38 | I/O | 38 | - | FSPIWP, SUBSPIWP | General-purpose I/O; drives the board RGB LED on v1.1 (Signal) |
| 11 | GPIO37 | I/O | 37 | - | SPIDQS, FSPIQ, SUBSPIQ | General-purpose I/O, except on modules with octal flash or PSRAM (N16R8, WROOM-2): reserved for the memory (Signal) |
| 12 | GPIO36 | I/O | 36 | - | SPIIO7, FSPICLK, SUBSPICLK | General-purpose I/O, except on modules with octal flash or PSRAM (N16R8, WROOM-2): reserved for the memory (Signal) |
| 13 | GPIO35 | I/O | 35 | - | SPIIO6, FSPID, SUBSPID | General-purpose I/O, except on modules with octal flash or PSRAM (N16R8, WROOM-2): reserved for the memory (Signal) |
| 14 | GPIO0 | I/O | 0 | RTC_GPIO0 | - | Strapping pin (internal pull-up): low at reset starts the chip in download mode; Boot button (Configuration) |
| 15 | GPIO45 | I/O | 45 | - | - | Strapping pin (internal pull-down): must be low at reset, high switches VDD_SPI to 1.8 V (Configuration) |
| 16 | GPIO48 | I/O | 48 | - | SPICLK_N, SUBSPICLK_N_DIFF | General-purpose I/O; RGB LED on the first board version (Signal) |
| 17 | GPIO47 | I/O | 47 | - | SPICLK_P, SUBSPICLK_P_DIFF | General-purpose I/O (Signal) |
| 18 | GPIO21 | I/O | 21 | RTC_GPIO21 | - | General-purpose I/O (Signal) |
| 19 | GPIO20 | I/O | 20 | ADC2_CH9, RTC_GPIO20 | USB_D+, U1CTS, CLK_OUT1 | ESP32-S3 USB D+ (USB Serial/JTAG by default), wired to the board USB port (Signal) |
| 20 | GPIO19 | I/O | 19 | ADC2_CH8, RTC_GPIO19 | USB_D-, U1RTS, CLK_OUT2 | ESP32-S3 USB D- (USB Serial/JTAG by default), wired to the board USB port (Signal) |
| 21 | GND | G | - | - | Ground (Ground) | |
| 22 | GND | G | - | - | Ground (Ground) |
ESP32-C3-DevKitM-1: header J1 (left side), 15 pins
Numbering from the Espressif user guide and the board schematic (V1.0), with an ESP32-C3-MINI-1 or MINI-1U module; the guide also covers the current ESP32-C3-DevKitM-1-N4X part. The ESP32-C3-DevKitC-02 uses a different pin order. The JTAG, SPI (FSPI) and UART functions listed are the IO_MUX ones; the GPIO matrix can route most peripherals to any I/O.
| Pin | Signal | Dir. | Silkscreen | ADC / low-power I/O | Other functions | Description |
|---|---|---|---|---|---|---|
| 1 | GND | GND | - | - | Ground (Ground) | |
| 2 | 3V3 | 3V3 | - | - | 3.3 V from the board regulator, or a 3.3 V input (one power source at a time) (Power) | |
| 3 | 3V3 | 3V3 | - | - | 3.3 V from the board regulator, or a 3.3 V input (one power source at a time) (Power) | |
| 4 | GPIO2 | I/O | IO2 | ADC1_CH2 | FSPIQ | Strapping pin (floating by default): the datasheet recommends pulling it high at reset; ADC1 input (Configuration) |
| 5 | GPIO3 | I/O | IO3 | ADC1_CH3 | - | General-purpose I/O, ADC1 input (Signal) |
| 6 | GND | GND | - | - | Ground (Ground) | |
| 7 | RST (EN) | In | RST | - | CHIP_PU | CHIP_PU: active high, pulling it low resets the chip (Reset button, 10 kOhm pull-up on the board) (Configuration) |
| 8 | GND | GND | - | - | Ground (Ground) | |
| 9 | GPIO0 | I/O | IO0 | ADC1_CH0 | XTAL_32K_P | General-purpose I/O, ADC1 input; input of the optional 32.768 kHz crystal (Signal) |
| 10 | GPIO1 | I/O | IO1 | ADC1_CH1 | XTAL_32K_N | General-purpose I/O, ADC1 input; output of the optional 32.768 kHz crystal (Signal) |
| 11 | GPIO10 | I/O | IO10 | - | FSPICS0 | General-purpose I/O (Signal) |
| 12 | GND | GND | - | - | Ground (Ground) | |
| 13 | 5V | 5V | - | - | 5 V from USB, or a 5 V input to the regulator (one power source at a time) (Power) | |
| 14 | 5V | 5V | - | - | 5 V from USB, or a 5 V input to the regulator (one power source at a time) (Power) | |
| 15 | GND | GND | - | - | Ground (Ground) |
ESP32-C3-DevKitM-1: header J3 (right side), 15 pins
The Arduino pins are the arduino-esp32 core defaults (esp32c3 variant): SDA and SCL land on GPIO8 and GPIO9, both strapping pins. The single micro-USB port goes through the USB-to-UART bridge; the ESP32-C3 native USB (GPIO18, GPIO19) only reaches J3.
| Pin | Signal | Dir. | Silkscreen | ADC / low-power I/O | Other functions | Description |
|---|---|---|---|---|---|---|
| 1 | GND | GND | - | - | Ground (Ground) | |
| 2 | GPIO21 | Out | TX | - | U0TXD | UART0 transmit, wired to the USB-to-UART bridge: console and flashing (Signal) |
| 3 | GPIO20 | In | RX | - | U0RXD | UART0 receive, wired to the USB-to-UART bridge: console and flashing (Signal) |
| 4 | GND | GND | - | - | Ground (Ground) | |
| 5 | GPIO9 | I/O | IO9 | - | Arduino SCL | Strapping pin (internal pull-up): low at reset starts the chip in download mode; Boot button (Configuration) |
| 6 | GPIO8 | I/O | IO8 | - | Arduino SDA | Strapping pin: must be high at reset to enter download mode (10 kOhm pull-up on the board); drives the addressable RGB LED (Configuration) |
| 7 | GND | GND | - | - | Ground (Ground) | |
| 8 | GPIO7 | I/O | IO7 | - | MTDO, FSPID; Arduino SS | General-purpose I/O; pin JTAG TDO (Signal) |
| 9 | GPIO6 | I/O | IO6 | - | MTCK, FSPICLK; Arduino MOSI | General-purpose I/O; pin JTAG TCK (Signal) |
| 10 | GPIO5 | I/O | IO5 | ADC2_CH0 | MTDI, FSPIWP; Arduino MISO | General-purpose I/O; pin JTAG TDI. ESP-IDF no longer supports ADC2 one-shot reads on the ESP32-C3 (errata) (Signal) |
| 11 | GPIO4 | I/O | IO4 | ADC1_CH4 | MTMS, FSPIHD; Arduino SCK | General-purpose I/O, ADC1 input; pin JTAG TMS (Signal) |
| 12 | GND | GND | - | - | Ground (Ground) | |
| 13 | GPIO18 | I/O | IO18 | - | USB_D- | ESP32-C3 USB D- (USB Serial/JTAG by default); not wired to this board micro-USB port, which goes through the USB-to-UART bridge (Signal) |
| 14 | GPIO19 | I/O | IO19 | - | USB_D+ | ESP32-C3 USB D+ (USB Serial/JTAG by default); not wired to this board micro-USB port, which goes through the USB-to-UART bridge (Signal) |
| 15 | GND | GND | - | - | Ground (Ground) |
ESP32-C6-DevKitC-1 v1.2: header J1 (left side), 16 pins
Numbering from the Espressif user guide (board v1.2) and schematics v1.2, v1.3 and v1.4, identical on J1 and J3, with an ESP32-C6-WROOM-1 or 1U module. The LP functions (LP_GPIO, LP_UART, LP_I2C) go through the low-power IO_MUX and stay usable in Deep-sleep.
| Pin | Signal | Dir. | Silkscreen | ADC / low-power I/O | Other functions | Description |
|---|---|---|---|---|---|---|
| 1 | 3V3 | 3V3 | - | - | 3.3 V on the module side of the J5 current-measurement jumper, or a 3.3 V input (one power source at a time) (Power) | |
| 2 | RST (EN) | In | RST | - | CHIP_PU | CHIP_PU: high enables the chip, low disables it (Reset button, 10 kOhm pull-up on the board) (Configuration) |
| 3 | GPIO4 | I/O | 4 | ADC1_CH4, LP_GPIO4 | MTMS, FSPIHD, LP_UART_RXD | MTMS strapping pin (floating by default): with MTDI, sets the SDIO slave clock edges; pin JTAG TMS; ADC1 input (Configuration) |
| 4 | GPIO5 | I/O | 5 | ADC1_CH5, LP_GPIO5 | MTDI, FSPIWP, LP_UART_TXD | MTDI strapping pin (floating by default): with MTMS, sets the SDIO slave clock edges; pin JTAG TDI; ADC1 input (Configuration) |
| 5 | GPIO6 | I/O | 6 | ADC1_CH6, LP_GPIO6 | MTCK, FSPICLK, LP_I2C_SDA | General-purpose I/O, ADC1 input; pin JTAG TCK (Signal) |
| 6 | GPIO7 | I/O | 7 | LP_GPIO7 | MTDO, FSPID, LP_I2C_SCL | General-purpose I/O; pin JTAG TDO (Signal) |
| 7 | GPIO0 | I/O | 0 | ADC1_CH0, LP_GPIO0 | XTAL_32K_P, LP_UART_DTRN | General-purpose I/O, ADC1 input; input of the optional 32.768 kHz crystal (Signal) |
| 8 | GPIO1 | I/O | 1 | ADC1_CH1, LP_GPIO1 | XTAL_32K_N, LP_UART_DSRN | General-purpose I/O, ADC1 input; output of the optional 32.768 kHz crystal (Signal) |
| 9 | GPIO8 | I/O | 8 | - | - | Strapping pin: must be high at reset to enter download mode (board pull-up: 10 kOhm, 3.3 kOhm from schematic v1.3); drives the addressable RGB LED (Configuration) |
| 10 | GPIO10 | I/O | 10 | - | - | General-purpose I/O (Signal) |
| 11 | GPIO11 | I/O | 11 | - | - | General-purpose I/O (Signal) |
| 12 | GPIO2 | I/O | 2 | ADC1_CH2, LP_GPIO2 | FSPIQ, LP_UART_RTSN | General-purpose I/O, ADC1 input (Signal) |
| 13 | GPIO3 | I/O | 3 | ADC1_CH3, LP_GPIO3 | LP_UART_CTSN | General-purpose I/O, ADC1 input (Signal) |
| 14 | 5V | 5V | - | - | 5 V from USB, or a 5 V input to the regulator (one power source at a time) (Power) | |
| 15 | GND | G | - | - | Ground (Ground) | |
| 16 | NC | NC | - | - | No connection (Not connected) |
ESP32-C6-DevKitC-1 v1.2: header J3 (right side), 16 pins
The Arduino pins are the arduino-esp32 core defaults (esp32c6 variant). GPIO12 and GPIO13 are wired to the USB-C port marked USB (the ESP32-C6 native USB); the port marked UART goes through the USB-to-UART bridge on GPIO16 and GPIO17.
| Pin | Signal | Dir. | Silkscreen | ADC / low-power I/O | Other functions | Description |
|---|---|---|---|---|---|---|
| 1 | GND | G | - | - | Ground (Ground) | |
| 2 | GPIO16 | Out | TX | - | U0TXD, FSPICS0 | UART0 transmit, wired to the USB-to-UART bridge: console and flashing (Signal) |
| 3 | GPIO17 | In | RX | - | U0RXD, FSPICS1 | UART0 receive, wired to the USB-to-UART bridge: console and flashing (Signal) |
| 4 | GPIO15 | I/O | 15 | - | - | Strapping pin, no internal pull: JTAG source at boot, only when the JTAG_SEL_ENABLE eFuse is burnt (Configuration) |
| 5 | GPIO23 | I/O | 23 | - | SDIO_DATA3; Arduino SDA | General-purpose I/O (Signal) |
| 6 | GPIO22 | I/O | 22 | - | SDIO_DATA2; Arduino SCL | General-purpose I/O (Signal) |
| 7 | GPIO21 | I/O | 21 | - | SDIO_DATA1, FSPICS5; Arduino SCK | General-purpose I/O (Signal) |
| 8 | GPIO20 | I/O | 20 | - | SDIO_DATA0, FSPICS4; Arduino MISO | General-purpose I/O (Signal) |
| 9 | GPIO19 | I/O | 19 | - | SDIO_CLK, FSPICS3; Arduino MOSI | General-purpose I/O (Signal) |
| 10 | GPIO18 | I/O | 18 | - | SDIO_CMD, FSPICS2; Arduino SS | General-purpose I/O (Signal) |
| 11 | GPIO9 | I/O | 9 | - | - | Strapping pin (internal pull-up): low at reset starts the chip in download mode; Boot button (Configuration) |
| 12 | GND | G | - | - | Ground (Ground) | |
| 13 | GPIO13 | I/O | 13 | - | USB_D+ | ESP32-C6 USB D+ (USB Serial/JTAG by default), wired to the USB-C port marked USB (Signal) |
| 14 | GPIO12 | I/O | 12 | - | USB_D- | ESP32-C6 USB D- (USB Serial/JTAG by default), wired to the USB-C port marked USB (Signal) |
| 15 | GND | G | - | - | Ground (Ground) | |
| 16 | NC | NC | - | - | No connection (Not connected) |
ESP32-WROOM-32E / 32UE module: 38 pads
Numbering from the module datasheet, pads 1 to 14 on the left side, 15 to 24 along the bottom, 25 to 38 on the right, plus a central ground pad. On the older ESP32-WROOM-32, same footprint, pads 17 to 22 carried the flash bus (SD2, SD3, CMD, CLK, SD0, SD1).
| Pin | Signal | Dir. | GPIO | Functions (module datasheet) | Description |
|---|---|---|---|---|---|
| 1 | GND | - | - | Ground (Ground) | |
| 2 | 3V3 | - | - | Module 3.3 V supply (Power) | |
| 3 | EN | In | - | CHIP_PU | High: chip on; low: chip off. Do not leave floating (Configuration) |
| 4 | SENSOR_VP | In | 36 | ADC1_CH0, RTC_GPIO0 | Input only: no output driver, no internal pull-up or pull-down (Signal) |
| 5 | SENSOR_VN | In | 39 | ADC1_CH3, RTC_GPIO3 | Input only: no output driver, no internal pull-up or pull-down (Signal) |
| 6 | IO34 | In | 34 | ADC1_CH6, RTC_GPIO4 | Input only: no output driver, no internal pull-up or pull-down (Signal) |
| 7 | IO35 | In | 35 | ADC1_CH7, RTC_GPIO5 | Input only: no output driver, no internal pull-up or pull-down (Signal) |
| 8 | IO32 | I/O | 32 | XTAL_32K_P, ADC1_CH4, TOUCH9, RTC_GPIO9 | General-purpose I/O (Signal) |
| 9 | IO33 | I/O | 33 | XTAL_32K_N, ADC1_CH5, TOUCH8, RTC_GPIO8 | General-purpose I/O (Signal) |
| 10 | IO25 | I/O | 25 | DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 | General-purpose I/O (Signal) |
| 11 | IO26 | I/O | 26 | DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 | General-purpose I/O (Signal) |
| 12 | IO27 | I/O | 27 | ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV | General-purpose I/O (Signal) |
| 13 | IO14 | I/O | 14 | ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 | General-purpose I/O (Signal) |
| 14 | IO12 | I/O | 12 | ADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3 | MTDI strapping pin: flash voltage at reset (Configuration) |
| 15 | GND | - | - | Ground (Ground) | |
| 16 | IO13 | I/O | 13 | ADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER | General-purpose I/O (Signal) |
| 17 | NC | - | - | Not connected (GPIO6 to 11 go to the internal flash) (Not connected) | |
| 18 | NC | - | - | Not connected (GPIO6 to 11 go to the internal flash) (Not connected) | |
| 19 | NC | - | - | Not connected (GPIO6 to 11 go to the internal flash) (Not connected) | |
| 20 | NC | - | - | Not connected (GPIO6 to 11 go to the internal flash) (Not connected) | |
| 21 | NC | - | - | Not connected (GPIO6 to 11 go to the internal flash) (Not connected) | |
| 22 | NC | - | - | Not connected (GPIO6 to 11 go to the internal flash) (Not connected) | |
| 23 | IO15 | I/O | 15 | ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 | MTDO strapping pin: ROM messages on U0TXD (Configuration) |
| 24 | IO2 | I/O | 2 | ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 | Strapping pin: boot mode, with IO0 (Configuration) |
| 25 | IO0 | I/O | 0 | ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK | Strapping pin: low at reset, download mode (Configuration) |
| 26 | IO4 | I/O | 4 | ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER | General-purpose I/O (Signal) |
| 27 | IO16 | I/O | 16 | HS1_DATA4, U2RXD, EMAC_CLK_OUT | General-purpose I/O, except on the variants with PSRAM: reserved (Signal) |
| 28 | IO17 | I/O | 17 | HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 | General-purpose I/O (Signal) |
| 29 | IO5 | I/O | 5 | VSPICS0, HS1_DATA6, EMAC_RX_CLK | Strapping pin: SDIO slave timing (Configuration) |
| 30 | IO18 | I/O | 18 | VSPICLK, HS1_DATA7 | General-purpose I/O (Signal) |
| 31 | IO19 | I/O | 19 | VSPIQ, U0CTS, EMAC_TXD0 | General-purpose I/O (Signal) |
| 32 | NC | - | - | Not connected (Not connected) | |
| 33 | IO21 | I/O | 21 | VSPIHD, EMAC_TX_EN | General-purpose I/O (Signal) |
| 34 | RXD0 | In | 3 | U0RXD, CLK_OUT2 | UART0 receive: flashing and console (Signal) |
| 35 | TXD0 | Out | 1 | U0TXD, CLK_OUT3, EMAC_RXD2 | UART0 transmit: flashing and console (Signal) |
| 36 | IO22 | I/O | 22 | VSPIWP, U0RTS, EMAC_TXD1 | General-purpose I/O (Signal) |
| 37 | IO23 | I/O | 23 | VSPID, HS1_STROBE | General-purpose I/O (Signal) |
| 38 | GND | - | - | Ground (Ground) |
An ESP32 or ESP32-S3 board to design, from module choice to antenna placement, or ESP-IDF firmware that does not always boot? We design the electronics and the firmware.
ESP32 strapping pins: GPIO0, 2, 5, 12 and 15
The chip reads five pins at reset and latches their level until power-down. GPIO0 (internal pull-up) low, with GPIO2 (pull-down) low or floating, enters download mode; GPIO0 high boots from flash. GPIO15 (MTDO, pull-up) low silences the ROM messages on U0TXD. GPIO5 (pull-up) and MTDO set the SDIO slave timing.
GPIO12 (MTDI, pull-down) is the trap: high at reset, it powers the flash at 1.8 V instead of 3.3 V. With 3.3 V flash such as the WROOM-32E, the chip then fails to boot or to flash. A sensor or a pull-up on GPIO12 is enough to cause it; an eFuse can fix the voltage and make the chip ignore this pin.
ESP32-S3 strapping pins: GPIO0, 3, 45 and 46
On the ESP32-S3, GPIO0 (weak pull-up) and GPIO46 (weak pull-down) set the boot mode: GPIO0 low and GPIO46 low enter UART or USB download. GPIO45 (weak pull-down) high switches VDD_SPI to 1.8 V, which stops a module with 3.3 V flash. GPIO3 has no internal pull and selects the JTAG source only when the STRAP_JTAG_SEL eFuse is burnt.
The datasheet requires the strapping level to hold for at least 3 ms after CHIP_PU rises on the ESP32-S3, against 1 ms on the ESP32. Any external circuit that drives these pins at power-up must respect that window.
GPIO34 to 39: input only on the ESP32
On the ESP32, GPIO34 to GPIO39 have no output stage and no internal pull-up or pull-down. The DevKitC V4 brings out four of them: GPIO36 (VP), GPIO39 (VN), GPIO34 and GPIO35. They make good ADC1 inputs, but a button there needs an external pull resistor, and pinMode(34, OUTPUT) does nothing.
Flash pins: GPIO6 to 11, and GPIO35 to 37 on octal S3
On ESP32 modules, GPIO6 to GPIO11 connect the chip to the SPI flash. The DevKitC V4 still brings them out (D0 to D3, CMD, CLK, near the USB): do not use them. On the WROOM-32E, the module does not bring them out at all (pads 17 to 22 are not connected). On WROVER modules and WROOM-32E modules with PSRAM, GPIO16 (and GPIO17 on WROVER) are also reserved.
On the ESP32-S3, GPIO26 to 32 serve the flash and PSRAM and are not brought out on the DevKitC-1. With octal flash or PSRAM (R8 modules such as the N16R8, WROOM-2), GPIO33 to 37 are taken as well; on the DevKitC-1 that removes GPIO35, 36 and 37 from header J3. On ESP32-S3R8V and S3R16V chips, GPIO47 and 48 run at 1.8 V.
ADC2 is unavailable while Wi-Fi runs
The Wi-Fi driver uses ADC2: the ESP-IDF documentation for the ESP32 and the ESP32-S3 datasheet state that ADC2 inputs cannot be used while Wi-Fi is active. For a measurement in a connected product, put the analog inputs on ADC1: GPIO32 to 39 on the ESP32, GPIO1 to 10 on the ESP32-S3.
ESP32-S3 native USB: GPIO19 and GPIO20
GPIO19 (USB_D-) and GPIO20 (USB_D+) connect by default to the ESP32-S3 USB Serial/JTAG controller, and on the DevKitC-1 to the micro-USB port marked USB. That port gives console, flashing and JTAG debugging without a probe. Reconfiguring these pins as GPIO disables USB-JTAG. The other port, marked UART, goes through the USB-to-UART bridge on GPIO43 and GPIO44.
Pin JTAG (GPIO39 to 42) stays available for an external probe, see our JTAG and SWD pinout. If USB-JTAG is enough, those four pins become general-purpose I/O again.
FAQ
- Which ESP32 pins are safe to use?
- On a DevKitC V4 with a WROOM-32E, the unconstrained I/Os are GPIO4, 13, 14, 16 to 19, 21 to 23, 25 to 27, 32 and 33 (GPIO13 and 14 also serve JTAG). GPIO34 to 39 are input only. Avoid GPIO6 to 11 (flash), keep GPIO1 and 3 for the console, and wire GPIO0, 2, 5, 12 and 15 only in a way that keeps their strapping level at reset.
- Why does my ESP32 stop booting when something is connected to GPIO12?
- GPIO12 is the MTDI strapping pin. If a circuit pulls it high during reset, the chip powers its flash at 1.8 V; 3.3 V flash such as the WROOM-32E one then browns out, and neither boot nor flashing works. Move the signal, keep GPIO12 low at reset, or burn the eFuse that fixes the flash voltage at 3.3 V.
- Which pins are used for I2C and SPI on the ESP32 and ESP32-S3?
- The GPIO matrix lets I2C and SPI sit on almost any I/O. The Arduino core defaults on the ESP32 are SDA 21, SCL 22, and SPI (VSPI) SS 5, MOSI 23, MISO 19, SCK 18. On the ESP32-S3: SDA 8, SCL 9, and SPI (FSPI) SS 10, MOSI 11, SCK 12, MISO 13. Under ESP-IDF, the pins are chosen when the bus is initialized.
- Can ADC2 be read while Wi-Fi is on?
- No. Espressif states that ADC2 inputs cannot be used while Wi-Fi is running, on the ESP32 and the ESP32-S3 alike. Put analog measurements on ADC1 (GPIO32 to 39 on the ESP32, GPIO1 to 10 on the ESP32-S3), or read ADC2 only while Wi-Fi is stopped. ADC1 has eight channels on the ESP32, six of which reach the DevKitC V4 headers, and ten on the ESP32-S3.
- Are ESP32 GPIOs 5 V tolerant?
- No. The ESP32 and ESP32-S3 datasheets cap the high-level input voltage at VDD + 0.3 V, about 3.6 V on a 3.3 V supply. A 5 V sensor or module needs a level shifter or a divider on its outputs. The DevKit 5V pin is a supply, not a logic level.
- How does the ESP32-S3 pinout differ from the ESP32?
- GPIO numbers do not carry over: UART0 moves from GPIO1/3 to GPIO43/44, JTAG from GPIO12 to 15 to GPIO39 to 42, and the strapping pins become GPIO0, 3, 45 and 46. The ESP32-S3 has no DAC and no input-only I/O, adds native USB on GPIO19/20 and carries 20 ADC channels on GPIO1 to 20. Code or a board therefore does not port pin for pin.
- Which are the strapping pins on the ESP32-C3 and ESP32-C6?
- On the ESP32-C3: GPIO2, GPIO8 and GPIO9. On the ESP32-C6: GPIO4 (MTMS), GPIO5 (MTDI), GPIO8, GPIO9 and GPIO15. On both chips, GPIO9 low at reset with GPIO8 high starts download mode, which is what the Boot button does. GPIO8 also drives the RGB LED on both DevKits, so a circuit that pulls it low at reset blocks flashing. On the C6, GPIO15 only selects the JTAG source once an eFuse is burnt.
- Which pins carry the native USB on the ESP32-C3 and ESP32-C6?
- GPIO18 (D-) and GPIO19 (D+) on the ESP32-C3, GPIO12 (D-) and GPIO13 (D+) on the ESP32-C6. By default they belong to the USB Serial/JTAG controller, which gives console, flashing and JTAG debugging without a probe; reconfiguring them as GPIO disables it. The C6-DevKitC-1 wires them to its USB-C port marked USB. The C3-DevKitM-1 does not: its single micro-USB port goes through the USB-to-UART bridge, and the native USB only reaches pins 13 and 14 of J3.
- Espressif, ESP32-DevKitC V4 user guide (Header Block J2/J3, pin layout)
- Espressif, ESP32-DevKitC V4 schematic (connectors J2/J3, module symbol)
- Espressif, ESP32-S3-DevKitC-1 v1.1 user guide (Header Block J1/J3, pin layout)
- Espressif, ESP32-S3-DevKitC-1 v1.1 schematic (connectors J1/J3)
- Espressif, ESP32 Series Datasheet v5.3 (Boot Configurations, IO_MUX, pin list notes, DC characteristics)
- Espressif, ESP32-S3 Series Datasheet v2.2 (Boot Configurations, GPIO restrictions, ADC note, DC characteristics)
- Espressif, ESP32-WROOM-32E and ESP32-WROOM-32UE Datasheet v2.1 (table 3, pin definitions)
- Espressif, ESP32-S3-WROOM-1 and WROOM-1U Datasheet (ordering table: octal PSRAM variants; IO35 to IO37 note)
- ESP-IDF Programming Guide, GPIO and RTC GPIO (ESP32): strapping, SPI0/1, ADC2 and Wi-Fi notes
- ESP-IDF Programming Guide, GPIO and RTC GPIO (ESP32-S3): strapping, octal flash/PSRAM, USB-JTAG notes
- esptool documentation, Boot Mode Selection (ESP32)
- esptool documentation, Boot Mode Selection (ESP32-S3)
- arduino-esp32 core, variants/esp32/pins_arduino.h (cross-check)
- arduino-esp32 core, variants/esp32s3/pins_arduino.h (cross-check)
- Espressif, ESP32-C3-DevKitM-1 user guide (Header Block J1/J3, pin layout, ordering information)
- Espressif, ESP32-C3-DevKitM-1 schematic V1.0 (connectors J1/J3, USB routing)
- Espressif, ESP32-C6-DevKitC-1 v1.2 user guide (Header Block J1/J3, pin layout, hardware revision details)
- Espressif, ESP32-C6-DevKitC-1 schematic v1.4 (connectors J1/J3; same headers as v1.2 and v1.3)
- Espressif, ESP32-C6-DevKitC-1 schematic v1.2 (boards before PW-2023-07-0440)
- Espressif, ESP32-C3 Series Datasheet v2.4 (IO MUX, analog functions, GPIO restrictions, Boot Configurations, DC characteristics)
- Espressif, ESP32-C6 Series Datasheet v1.5 (IO MUX, LP IO MUX, analog functions, Boot Configurations, JTAG source, DC characteristics)
- Espressif, ESP32-C3-MINI-1 and MINI-1U Datasheet v2.2 (table 3-1, pin definitions)
- Espressif, ESP32-C6-WROOM-1 and WROOM-1U Datasheet v1.4 (table 3-1, pin definitions)
- ESP-IDF Programming Guide, GPIO (ESP32-C3): strapping, SPI0/1, USB-JTAG notes
- ESP-IDF Programming Guide, GPIO (ESP32-C6): strapping, SPI0/1, USB-JTAG, LP GPIO notes
- ESP-IDF Programming Guide, ADC oneshot driver (ESP32-C3): ADC2 note
- arduino-esp32 core, variants/esp32c3/pins_arduino.h (cross-check)
- arduino-esp32 core, variants/esp32c6/pins_arduino.h (cross-check)
Tables built from these documents and cross-checked against manufacturer datasheets. Always check the datasheet of the connector you actually use: some manufacturers number differently.
- Embedded firmware development
- Designing an IoT product beyond the dev kit
- IoT electronics design methodology
- JTAG and SWD debug pinout
Other pinouts
- USB-C
- USB-A, USB-B, Mini and Micro
- RJ45 Ethernet
- M12 industrial
- DB9 (DE-9)
- JTAG and SWD
- HDMI
- Raspberry Pi GPIO
- M.2 (keys M, B and E)
- SD and microSD card
- PCI Express card edge
- SATA
- DDR4 DIMM and SO-DIMM
- DDR5 DIMM and SO-DIMM
- OBD2 (OBD-II, J1962)
- Bosch ECUs EDC15P+, EDC16C34, MD1CS006
- RJ11, RJ14, RJ12 (6P6C)
- VGA (DE-15) and DVI
- RS-485 (Modbus)
- Arduino Uno, Nano and Mega