Opens in a new tab

ESP32-DevKitC Pinout (38 pins)

ESP32-DevKitC is the official Espressif development board with the ESP32-WROOM-32 module (or WROVER with PSRAM). It has 38 pins – unlike the cheap DevKit V1, it also breaks out GPIO0 and the flash memory pins.

The NodeMCU-32S and many 38-pin clones share the same layout.

Specifications

  • ESP32: 2× Xtensa LX6 up to 240 MHz, 520 kB SRAM
  • 4 MB flash, plus PSRAM on the version with the WROVER module
  • Wi-Fi 4 (2.4 GHz), Bluetooth Classic and BLE 4.2
  • all module GPIO including flash, 16 channels of 12-bit ADC, 2× DAC, 10 touch inputs
  • 3× UART, 2× I2C, 2× free SPI, PWM on all output pins
  • micro USB, CP2102N or CH9102F converter
  • EN (reset) and BOOT buttons, power LED only

The board is wide – on a single standard breadboard there is no free row left on one side. Two breadboards side by side are more convenient. In the Arduino IDE, the generic ESP32 Dev Module board is all you need.

Pinout and pin table

Hover over a pin in the diagram or a table row; use the filter to highlight a bus. You can download the pinout as PNG or SVG.

Pin names:
ESP32-DevKitC (38pin) – pinoutESP32-DevKitC (38pin) – pinoutchiptron.eu · CC BY 4.0micro USBBOOTENESP32-WROOM-32 19 GPIO6 flash CLK 18 GPIO7 flash D0 17 GPIO8 flash D1 16 GPIO15 ADC2_CH3 T3 15 GPIO2 ADC2_CH2 T2 14 GPIO0 ADC2_CH1 T1 BOOT button 13 GPIO4 ADC2_CH0 T0 RX2 12 GPIO16 11 GPIO17 10 GPIO5 SS 9 GPIO18 SCK 8 GPIO19 MISO 7 GND 6 GPIO21 SDA 5 GPIO3 RX 4 GPIO1 TX 3 GPIO22 SCL 2 GPIO23 MOSI 1 GND 19 5V ↔ 5 V from USB, or 5 V power input 18 GPIO11 flash CMD 17 GPIO10 flash D3 16 GPIO9 flash D2 15 GPIO13 ADC2_CH4 T4 14 GND 13 GPIO12 ADC2_CH5 T5 12 GPIO14 ADC2_CH6 T6 11 GPIO27 ADC2_CH7 T7 TX1 10 GPIO26 ADC2_CH9 DAC2 RX1 9 GPIO25 ADC2_CH8 DAC1 TX2 8 GPIO33 ADC1_CH5 T8 7 GPIO32 ADC1_CH4 T9 6 GPIO35 ADC1_CH7 input only 5 GPIO34 ADC1_CH6 input only 4 GPIO39 ADC1_CH3 VN · input only 3 GPIO36 ADC1_CH0 VP · input only 2 EN ← Reset – connecting to GND restarts the chip (EN button) 1 3V3 → 3.3 V output from the regulator GPIO UART I2C SPI ADC (analog) DAC Touch Power Ground (GND) Control / reset Strapping pin Used by flash
Download:PNGSVG
Pin table – ESP32-DevKitC (38pin)
PinNameDirectionUARTI2CSPIADCDACTouchNote
J3-1GND–
J3-2GPIO23input/outputMOSI
J3-3GPIO22input/outputSCL
J3-4GPIO1input/outputTXUART0 TX – connected to the USB-serial converter
J3-5GPIO3input/outputRXUART0 RX – connected to the USB-serial converter
J3-6GPIO21input/outputSDA
J3-7GND–
J3-8GPIO19input/outputMISO
J3-9GPIO18input/outputSCK
J3-10GPIO5input/outputSSStrapping pin (SDIO timing) – logic 1 at boot (internal pull-up)
J3-11GPIO17input/outputSilkscreened TX2 on DOIT boards – in Arduino 3.x the default Serial2 is on GPIO4/25, specify this pin in Serial2.begin(…); used by PSRAM on WROVER modules
J3-12GPIO16input/outputSilkscreened RX2 on DOIT boards – in Arduino 3.x the default Serial2 is on GPIO4/25, specify this pin in Serial2.begin(…); used by PSRAM on WROVER modules
J3-13GPIO4input/outputRX2ADC2_CH0T0UART2 RX (Serial2, default in Arduino 3.x). ADC2 cannot be used with Wi-Fi enabled
J3-14GPIO0input/outputADC2_CH1T1BOOT button. Strapping pin – logic 0 at boot = download mode
J3-15GPIO2input/outputADC2_CH2T2Strapping pin – must be logic 0 or unconnected at boot for download mode
J3-16GPIO15input/outputADC2_CH3T3Strapping pin – logic 0 at boot disables bootloader output. JTAG MTDO
J3-17GPIO8input/outputConnected to flash memory (SD1) – do not use
J3-18GPIO7input/outputConnected to flash memory (SD0) – do not use
J3-19GPIO6input/outputConnected to flash memory (CLK) – do not use
J2-13V3output3.3 V output from the regulator
J2-2ENinputReset – connecting to GND restarts the chip (EN button)
J2-3GPIO36inputADC1_CH0SENSOR_VP – input only, no internal pull-up/pull-down
J2-4GPIO39inputADC1_CH3SENSOR_VN – input only, no internal pull-up/pull-down
J2-5GPIO34inputADC1_CH6Input only, no internal pull-up/pull-down
J2-6GPIO35inputADC1_CH7Input only, no internal pull-up/pull-down
J2-7GPIO32input/outputADC1_CH4T9
J2-8GPIO33input/outputADC1_CH5T8
J2-9GPIO25input/outputTX2ADC2_CH8DAC1DAC1 (8-bit); UART2 TX (Serial2, default in Arduino 3.x). ADC2 cannot be used with Wi-Fi on
J2-10GPIO26input/outputRX1ADC2_CH9DAC2DAC2 (8-bit); UART1 RX (Serial1, default in Arduino 3.x). ADC2 cannot be used with Wi-Fi on
J2-11GPIO27input/outputTX1ADC2_CH7T7UART1 TX (Serial1, default in Arduino 3.x). ADC2 cannot be used with Wi-Fi enabled
J2-12GPIO14input/outputADC2_CH6T6JTAG MTMS; ADC2 cannot be used with Wi-Fi on
J2-13GPIO12input/outputADC2_CH5T5Strapping pin (flash voltage) – must be logic 0 at boot, otherwise the board will not boot. JTAG MTDI
J2-14GND–
J2-15GPIO13input/outputADC2_CH4T4JTAG MTCK; ADC2 cannot be used with Wi-Fi on
J2-16GPIO9input/outputConnected to flash memory (SD2) – do not use
J2-17GPIO10input/outputConnected to flash memory (SD3) – do not use
J2-18GPIO11input/outputConnected to flash memory (CMD) – do not use
J2-195Vinput/output5 V from USB, or 5 V power input

What to watch out for

  • The GPIO are not 5V tolerant. Use a level shifter for 5V signals.
  • GPIO6–11 (CLK, SD0–SD3, CMD) are connected to the module’s flash memory – if you use them, the ESP32 will crash.
  • GPIO34, 35, 36 (VP) and 39 (VN) are input-only with no internal pull-up resistors.
  • ADC2 (GPIO0, 2, 4, 12–15, 25–27) does not work while Wi-Fi is on – use ADC1 (GPIO32–39) for analog.
  • Strapping pins: GPIO12 must be at logic 0 at boot, GPIO0 and GPIO2 select the download mode, GPIO5 and GPIO15 control timing and the bootloader log output.
  • On the WROVER module, GPIO16 and GPIO17 are taken by the PSRAM.

ESP32 projects on chiptron.eu/

Projects and guides on chiptron.eu/:

  • ESP32 DevKit LiPo – Olimex board pin-compatible with the ESP32-DevKitC, with LiPo charging
  • YoRadio – internet radio with an ESP32 WROOM and an I2S DAC, Home Assistant support
  • SEN66 with ESP32 – air quality sensor connected to an ESP32 DevKit, code and tips

More pinouts

See all pinouts on the Pinouts page.

Related Articles