Skip to content
AESTECHNO
Pinout

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.

ESP32, S3, C3 and C6 · ESP32-DevKitC V4: header J2 (left side), 19 pins. Board seen from above, antenna at the top. J2 is the left-hand row, drawn here horizontally: pin 1 (3V3) at the antenna end on the left, pin 19 (5V) at the USB end on the right..
Board seen from above, antenna at the top. J2 is the left-hand row, drawn here horizontally: pin 1 (3V3) at the antenna end on the left, pin 19 (5V) at the USB end on the right.
Pin Signal Dir. SilkscreenADC / touch / RTCOther 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 VPADC1_CH0, RTC_GPIO0SENSOR_VP Input only: no output driver, no internal pull-up or pull-down (Signal)
4 GPIO39 In VNADC1_CH3, RTC_GPIO3SENSOR_VN Input only: no output driver, no internal pull-up or pull-down (Signal)
5 GPIO34 In 34ADC1_CH6, RTC_GPIO4VDET_1 Input only: no output driver, no internal pull-up or pull-down (Signal)
6 GPIO35 In 35ADC1_CH7, RTC_GPIO5VDET_2 Input only: no output driver, no internal pull-up or pull-down (Signal)
7 GPIO32 I/O 32ADC1_CH4, TOUCH9, RTC_GPIO9XTAL_32K_P General-purpose I/O; input of the optional 32.768 kHz crystal (Signal)
8 GPIO33 I/O 33ADC1_CH5, TOUCH8, RTC_GPIO8XTAL_32K_N General-purpose I/O; output of the optional 32.768 kHz crystal (Signal)
9 GPIO25 I/O 25ADC2_CH8, DAC_1, RTC_GPIO6- General-purpose I/O; DAC 1 output (8-bit) (Signal)
10 GPIO26 I/O 26ADC2_CH9, DAC_2, RTC_GPIO7- General-purpose I/O; DAC 2 output (8-bit) (Signal)
11 GPIO27 I/O 27ADC2_CH7, TOUCH7, RTC_GPIO17- General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal)
12 GPIO14 I/O 14ADC2_CH6, TOUCH6, RTC_GPIO16MTMS, HSPICLK General-purpose I/O; JTAG TMS (Signal)
13 GPIO12 I/O 12ADC2_CH5, TOUCH5, RTC_GPIO15MTDI, 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 13ADC2_CH4, TOUCH4, RTC_GPIO14MTCK, 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.

ESP32, S3, C3 and C6 · ESP32-DevKitC V4: header J3 (right side), 19 pins. Board seen from above, antenna at the top. J3 is the right-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 19 (CLK) at the USB end on the right..
Board seen from above, antenna at the top. J3 is the right-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 19 (CLK) at the USB end on the right.
Pin Signal Dir. SilkscreenADC / touch / RTCOther 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 4ADC2_CH0, TOUCH0, RTC_GPIO10HSPIHD General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal)
14 GPIO0 I/O 0ADC2_CH1, TOUCH1, RTC_GPIO11CLK_OUT1 Strapping pin (internal pull-up): low at reset starts the chip in download mode; Boot button (Configuration)
15 GPIO2 I/O 2ADC2_CH2, TOUCH2, RTC_GPIO12HSPIWP Strapping pin (internal pull-down): must be low or floating to enter download mode (Configuration)
16 GPIO15 I/O 15ADC2_CH3, TOUCH3, RTC_GPIO13MTDO, 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.

ESP32, S3, C3 and C6 · ESP32-S3-DevKitC-1 v1.1: header J1 (left side), 22 pins. Board seen from above, antenna at the top. J1 is the left-hand row, drawn here horizontally: pin 1 (3V3) at the antenna end on the left, pin 22 (GND) at the USB end on the right..
Board seen from above, antenna at the top. J1 is the left-hand row, drawn here horizontally: pin 1 (3V3) at the antenna end on the left, pin 22 (GND) at the USB end on the right.
Pin Signal Dir. SilkscreenADC / touch / RTCOther 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 4ADC1_CH3, TOUCH4, RTC_GPIO4- General-purpose I/O, ADC1 input usable with Wi-Fi (Signal)
5 GPIO5 I/O 5ADC1_CH4, TOUCH5, RTC_GPIO5- General-purpose I/O, ADC1 input usable with Wi-Fi (Signal)
6 GPIO6 I/O 6ADC1_CH5, TOUCH6, RTC_GPIO6- General-purpose I/O, ADC1 input usable with Wi-Fi (Signal)
7 GPIO7 I/O 7ADC1_CH6, TOUCH7, RTC_GPIO7- General-purpose I/O, ADC1 input usable with Wi-Fi (Signal)
8 GPIO15 I/O 15ADC2_CH4, RTC_GPIO15U0RTS, XTAL_32K_P General-purpose I/O; input of the optional 32.768 kHz crystal (Signal)
9 GPIO16 I/O 16ADC2_CH5, RTC_GPIO16U0CTS, XTAL_32K_N General-purpose I/O; output of the optional 32.768 kHz crystal (Signal)
10 GPIO17 I/O 17ADC2_CH6, RTC_GPIO17U1TXD General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal)
11 GPIO18 I/O 18ADC2_CH7, RTC_GPIO18U1RXD, CLK_OUT3 General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal)
12 GPIO8 I/O 8ADC1_CH7, TOUCH8, RTC_GPIO8SUBSPICS1; Arduino SDA General-purpose I/O, ADC1 input usable with Wi-Fi (Signal)
13 GPIO3 I/O 3ADC1_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 9ADC1_CH8, TOUCH9, RTC_GPIO9FSPIHD, SUBSPIHD; Arduino SCL General-purpose I/O, ADC1 input usable with Wi-Fi (Signal)
16 GPIO10 I/O 10ADC1_CH9, TOUCH10, RTC_GPIO10FSPICS0, FSPIIO4, SUBSPICS0; Arduino SS General-purpose I/O, ADC1 input usable with Wi-Fi (Signal)
17 GPIO11 I/O 11ADC2_CH0, TOUCH11, RTC_GPIO11FSPID, FSPIIO5, SUBSPID; Arduino MOSI General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal)
18 GPIO12 I/O 12ADC2_CH1, TOUCH12, RTC_GPIO12FSPICLK, FSPIIO6, SUBSPICLK; Arduino SCK General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal)
19 GPIO13 I/O 13ADC2_CH2, TOUCH13, RTC_GPIO13FSPIQ, FSPIIO7, SUBSPIQ; Arduino MISO General-purpose I/O; ADC2 input unavailable while Wi-Fi runs (Signal)
20 GPIO14 I/O 14ADC2_CH3, TOUCH14, RTC_GPIO14FSPIWP, 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).

ESP32, S3, C3 and C6 · ESP32-S3-DevKitC-1 v1.1: header J3 (right side), 22 pins. Board seen from above, antenna at the top. J3 is the right-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 22 (GND) at the USB end on the right..
Board seen from above, antenna at the top. J3 is the right-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 22 (GND) at the USB end on the right.
Pin Signal Dir. SilkscreenADC / touch / RTCOther 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 1ADC1_CH0, TOUCH1, RTC_GPIO1- General-purpose I/O, ADC1 input usable with Wi-Fi (Signal)
5 GPIO2 I/O 2ADC1_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 0RTC_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 21RTC_GPIO21- General-purpose I/O (Signal)
19 GPIO20 I/O 20ADC2_CH9, RTC_GPIO20USB_D+, U1CTS, CLK_OUT1 ESP32-S3 USB D+ (USB Serial/JTAG by default), wired to the board USB port (Signal)
20 GPIO19 I/O 19ADC2_CH8, RTC_GPIO19USB_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.

ESP32, S3, C3 and C6 · ESP32-C3-DevKitM-1: header J1 (left side), 15 pins. Board seen from above, antenna at the top. J1 is the left-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 15 (GND) at the USB end on the right..
Board seen from above, antenna at the top. J1 is the left-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 15 (GND) at the USB end on the right.
Pin Signal Dir. SilkscreenADC / low-power I/OOther 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 IO2ADC1_CH2FSPIQ Strapping pin (floating by default): the datasheet recommends pulling it high at reset; ADC1 input (Configuration)
5 GPIO3 I/O IO3ADC1_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 IO0ADC1_CH0XTAL_32K_P General-purpose I/O, ADC1 input; input of the optional 32.768 kHz crystal (Signal)
10 GPIO1 I/O IO1ADC1_CH1XTAL_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.

ESP32, S3, C3 and C6 · ESP32-C3-DevKitM-1: header J3 (right side), 15 pins. Board seen from above, antenna at the top. J3 is the right-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 15 (GND) at the USB end on the right..
Board seen from above, antenna at the top. J3 is the right-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 15 (GND) at the USB end on the right.
Pin Signal Dir. SilkscreenADC / low-power I/OOther 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 IO5ADC2_CH0MTDI, 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 IO4ADC1_CH4MTMS, 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.

ESP32, S3, C3 and C6 · ESP32-C6-DevKitC-1 v1.2: header J1 (left side), 16 pins. Board seen from above, antenna at the top. J1 is the left-hand row, drawn here horizontally: pin 1 (3V3) at the antenna end on the left, pin 16 (NC) at the USB end on the right..
Board seen from above, antenna at the top. J1 is the left-hand row, drawn here horizontally: pin 1 (3V3) at the antenna end on the left, pin 16 (NC) at the USB end on the right.
Pin Signal Dir. SilkscreenADC / low-power I/OOther 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 4ADC1_CH4, LP_GPIO4MTMS, 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 5ADC1_CH5, LP_GPIO5MTDI, 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 6ADC1_CH6, LP_GPIO6MTCK, FSPICLK, LP_I2C_SDA General-purpose I/O, ADC1 input; pin JTAG TCK (Signal)
6 GPIO7 I/O 7LP_GPIO7MTDO, FSPID, LP_I2C_SCL General-purpose I/O; pin JTAG TDO (Signal)
7 GPIO0 I/O 0ADC1_CH0, LP_GPIO0XTAL_32K_P, LP_UART_DTRN General-purpose I/O, ADC1 input; input of the optional 32.768 kHz crystal (Signal)
8 GPIO1 I/O 1ADC1_CH1, LP_GPIO1XTAL_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 2ADC1_CH2, LP_GPIO2FSPIQ, LP_UART_RTSN General-purpose I/O, ADC1 input (Signal)
13 GPIO3 I/O 3ADC1_CH3, LP_GPIO3LP_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.

ESP32, S3, C3 and C6 · ESP32-C6-DevKitC-1 v1.2: header J3 (right side), 16 pins. Board seen from above, antenna at the top. J3 is the right-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 16 (NC) at the USB end on the right..
Board seen from above, antenna at the top. J3 is the right-hand row, drawn here horizontally: pin 1 (GND) at the antenna end on the left, pin 16 (NC) at the USB end on the right.
Pin Signal Dir. SilkscreenADC / low-power I/OOther 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. GPIOFunctions (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 36ADC1_CH0, RTC_GPIO0 Input only: no output driver, no internal pull-up or pull-down (Signal)
5 SENSOR_VN In 39ADC1_CH3, RTC_GPIO3 Input only: no output driver, no internal pull-up or pull-down (Signal)
6 IO34 In 34ADC1_CH6, RTC_GPIO4 Input only: no output driver, no internal pull-up or pull-down (Signal)
7 IO35 In 35ADC1_CH7, RTC_GPIO5 Input only: no output driver, no internal pull-up or pull-down (Signal)
8 IO32 I/O 32XTAL_32K_P, ADC1_CH4, TOUCH9, RTC_GPIO9 General-purpose I/O (Signal)
9 IO33 I/O 33XTAL_32K_N, ADC1_CH5, TOUCH8, RTC_GPIO8 General-purpose I/O (Signal)
10 IO25 I/O 25DAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0 General-purpose I/O (Signal)
11 IO26 I/O 26DAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1 General-purpose I/O (Signal)
12 IO27 I/O 27ADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV General-purpose I/O (Signal)
13 IO14 I/O 14ADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2 General-purpose I/O (Signal)
14 IO12 I/O 12ADC2_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 13ADC2_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 15ADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3 MTDO strapping pin: ROM messages on U0TXD (Configuration)
24 IO2 I/O 2ADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0 Strapping pin: boot mode, with IO0 (Configuration)
25 IO0 I/O 0ADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK Strapping pin: low at reset, download mode (Configuration)
26 IO4 I/O 4ADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER General-purpose I/O (Signal)
27 IO16 I/O 16HS1_DATA4, U2RXD, EMAC_CLK_OUT General-purpose I/O, except on the variants with PSRAM: reserved (Signal)
28 IO17 I/O 17HS1_DATA5, U2TXD, EMAC_CLK_OUT_180 General-purpose I/O (Signal)
29 IO5 I/O 5VSPICS0, HS1_DATA6, EMAC_RX_CLK Strapping pin: SDIO slave timing (Configuration)
30 IO18 I/O 18VSPICLK, HS1_DATA7 General-purpose I/O (Signal)
31 IO19 I/O 19VSPIQ, U0CTS, EMAC_TXD0 General-purpose I/O (Signal)
32 NC -- Not connected (Not connected)
33 IO21 I/O 21VSPIHD, EMAC_TX_EN General-purpose I/O (Signal)
34 RXD0 In 3U0RXD, CLK_OUT2 UART0 receive: flashing and console (Signal)
35 TXD0 Out 1U0TXD, CLK_OUT3, EMAC_RXD2 UART0 transmit: flashing and console (Signal)
36 IO22 I/O 22VSPIWP, U0RTS, EMAC_TXD1 General-purpose I/O (Signal)
37 IO23 I/O 23VSPID, HS1_STROBE General-purpose I/O (Signal)
38 GND -- Ground (Ground)
An interface to design?

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.

Frequently asked questions

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.
Sources

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.

Further reading

Other pinouts