ESP32 DevKit V1 (originally from DOIT) is the most widespread low-cost board with the ESP32-WROOM-32 module. You will find it in every other ESP32 tutorial.
It has 30 pins – unlike the official DevKitC, it does not break out the flash memory pins, and GPIO0 is only available on the BOOT button. Clones differ in USB-serial converter, color and board width, but the pin layout stays the same.
Specifications
- ESP32: 2× Xtensa LX6 up to 240 MHz, 520 kB SRAM
- 4 MB flash (ESP32-WROOM-32 module)
- Wi-Fi 4 (2.4 GHz), Bluetooth Classic and BLE 4.2
- 25 GPIO on the headers, 15 channels of 12-bit ADC, 2× DAC, 9 touch inputs
- 3× UART, 2× I2C, 2× free SPI, PWM on all output pins
- micro USB, CP2102 or CH340 converter
- blue LED on GPIO2, EN (reset) and BOOT buttons
In the Arduino IDE, select the DOIT ESP32 DEVKIT V1 board or the generic ESP32 Dev Module. UART, I2C and SPI can be remapped to almost any pin through the GPIO matrix – the table shows the default Arduino assignments.
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 | Name | Direction | UART | I2C | SPI | ADC | DAC | Touch | Note |
|---|---|---|---|---|---|---|---|---|---|
| 1 | 3V3 | output | 3.3 V output from the regulator | ||||||
| 2 | GND | – | |||||||
| 3 | GPIO15 | input/output | ADC2_CH3 | T3 | Strapping pin – logic 0 at boot disables bootloader output. JTAG MTDO | ||||
| 4 | GPIO2 | input/output | ADC2_CH2 | T2 | Blue LED. Strapping pin – for download mode must be logic 0 or floating at boot | ||||
| 5 | GPIO4 | input/output | RX2 | ADC2_CH0 | T0 | UART2 RX (Serial2, default in Arduino 3.x). ADC2 cannot be used with Wi-Fi enabled | |||
| 6 | GPIO16 | input/output | Silkscreened 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 | ||||||
| 7 | GPIO17 | input/output | Silkscreened 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 | ||||||
| 8 | GPIO5 | input/output | SS | Strapping pin (SDIO timing) – logic 1 at boot (internal pull-up) | |||||
| 9 | GPIO18 | input/output | SCK | ||||||
| 10 | GPIO19 | input/output | MISO | ||||||
| 11 | GPIO21 | input/output | SDA | ||||||
| 12 | GPIO3 | input/output | RX | UART0 RX – connected to the USB-serial converter | |||||
| 13 | GPIO1 | input/output | TX | UART0 TX – connected to the USB-serial converter | |||||
| 14 | GPIO22 | input/output | SCL | ||||||
| 15 | GPIO23 | input/output | MOSI | ||||||
| 16 | EN | input | Reset – connecting to GND restarts the chip (EN button) | ||||||
| 17 | GPIO36 | input | ADC1_CH0 | SENSOR_VP – input only, no internal pull-up/pull-down | |||||
| 18 | GPIO39 | input | ADC1_CH3 | SENSOR_VN – input only, no internal pull-up/pull-down | |||||
| 19 | GPIO34 | input | ADC1_CH6 | Input only, no internal pull-up/pull-down | |||||
| 20 | GPIO35 | input | ADC1_CH7 | Input only, no internal pull-up/pull-down | |||||
| 21 | GPIO32 | input/output | ADC1_CH4 | T9 | |||||
| 22 | GPIO33 | input/output | ADC1_CH5 | T8 | |||||
| 23 | GPIO25 | input/output | TX2 | ADC2_CH8 | DAC1 | DAC1 (8-bit); UART2 TX (Serial2, default in Arduino 3.x). ADC2 cannot be used with Wi-Fi on | |||
| 24 | GPIO26 | input/output | RX1 | ADC2_CH9 | DAC2 | DAC2 (8-bit); UART1 RX (Serial1, default in Arduino 3.x). ADC2 cannot be used with Wi-Fi on | |||
| 25 | GPIO27 | input/output | TX1 | ADC2_CH7 | T7 | UART1 TX (Serial1, default in Arduino 3.x). ADC2 cannot be used with Wi-Fi enabled | |||
| 26 | GPIO14 | input/output | ADC2_CH6 | T6 | JTAG MTMS; ADC2 cannot be used with Wi-Fi on | ||||
| 27 | GPIO12 | input/output | ADC2_CH5 | T5 | Strapping pin (flash voltage) – must be logic 0 at boot, otherwise the board will not boot. JTAG MTDI | ||||
| 28 | GPIO13 | input/output | ADC2_CH4 | T4 | JTAG MTCK; ADC2 cannot be used with Wi-Fi on | ||||
| 29 | GND | – | |||||||
| 30 | VIN | input/output | 5 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.
- GPIO34, 35, 36 (VP) and 39 (VN) are input-only and have no internal pull-up or pull-down.
- ADC2 (GPIO2, 4, 12–15, 25–27) does not work while Wi-Fi is on – use ADC1 (GPIO32–39) for analog inputs.
- Strapping pins: GPIO12 must be at logic 0 at boot, otherwise the wrong flash voltage is set and the board will not start. GPIO0 and GPIO2 select the download mode, GPIO5 and GPIO15 control timing and the bootloader log output.
- If uploading fails with “Failed to connect”, hold the BOOT button when the upload starts.
- Feed 5 V into VIN – a higher voltage only heats up the linear regulator.
ESP32 projects on chiptron.eu/
Projects and guides on chiptron.eu/:
- SEN66 with ESP32 – air quality sensor connected to an ESP32 DevKit, code and tips
- Wokwi – online simulator where you can try the ESP32 DevKit V1 without hardware
- YoRadio – internet radio with an ESP32 WROOM and an I2S DAC, Home Assistant support
- ESP32 chip comparison – which ESP32 to choose based on peripherals and project needs
More pinouts
See all pinouts on the Pinouts page.