DOIT ESP32 DevKit V1 Wi-Fi Development Board – Pinout Diagram & Arduino Reference

Complete pinout reference for DOIT ESP32 DevKit V1 Wi-Fi development board including Arduino pin and interface references.
DOIT-ESP32-DevKit-V1-Pinout-Diagram-and-Reference-CIRCUITSTATE-Electronics-Featured-Image-01-2
DOIT ESP32 DevKit V1 Pinout Diagram & Reference

The DOIT ESP32 DevKit V1 is probably the most famous development board based on the equally popular ESP32 Wi-Fi SoC from Espressif. In fact, the DevKit V1 is more popular than any official board from Espressif. On this page, you will find a beautiful pinout diagram crafted by CIRCUITSTATE and other pin references for the ESP32 DevKit V1 board. If you are new to the ESP32 Wi-Fi and Bluetooth SoC, we have a great tutorial to get you started.

Gettgin Started with Espressif ESP32 WiFi BLE SoC Using DOIT-ESP32-DevKit-V1 CIRCUITSTATE Electronics Featured Image

Getting Started with Espressif ESP32 Wi-Fi & Bluetooth SoC using DOIT-ESP32-DevKit-V1 Development Board

Learn how to use Espressif ESP32 SoC for Wi-Fi and Bluetooth development using DOIT ESP32 DevKit V1 development board. Use Arduino, ESP-IDF, PlatformIO and VS Code for software development.

Pinout Diagram

Latest Revision: r0.1, 17-12-2022
Design by: Vishnu Mohanan
License: CC-BY-SA 4.0

Pinouts are based on the latest documentation from Espressif. While we try our best to be accurate and up-to-date here, we can not guarantee correctness. Please also double-check the pin assignments with that from the official documentation. If you found any errors here, please let us know in the comments. We will update our designs ASAP.

PNG

ESP32-DevKit-V1-Pinout-Diagram-r0.1-CIRCUITSTATE-Electronics-2
DOIT ESP32 DevKit V1 pinout diagram.

Even though this pinout is specifically created based on the particular board we have in hand, there are many variants of the same board in the market. The first ever ESP32 DevKit V1 we bought has the DOIT company logo, the line “ESP32 DEVKIT V1” and the website address www.doit.am. But that variant has all pins of the ESP-WROOM-32 module broken out including the SPI interface used for the flash memory. Most of the boards we can get from online shops today do not have those unused pins which shorten the board length. Regardless of the type of board you have, our pinout diagrams will be still applicable as long as they use an ESP32 chip or module.

Also since these boards did not come with official pin numbering or pinouts, there is no consensus over where to start counting. So to make it easier for you to identify the pins by simply counting, we have numbered each row of pins on either side from 1 to 15. But you should not rely on the pin numbering alone. Always use the GPIO number to identify the pins and their functions. We have limited this pinout diagram to include only those references that are relevant to the Arduino ESP32 core. We have not used any of the official pin names. For that, you can always refer to the official documentation.

PDF

PDF preview may not load on mobile devices. Click the link to open an interactive preview, or download it directly.

Pinout Reference

Power & Control

There are two positive power supply input pins and one control pin on the DOIT ESP32 DevKit V1.

Pin NameFunction
VINThe input of the 3.3V positive voltage regulator. Supply voltage in the range of 4 to 12V.
3.3VOutput from the voltage regulator. You can also supply 3.3V to this pin if you have one. But do not supply both VIN and 3V3 together.
GNDGround (Negative) supply pins.
ENABLEThis is the reset pin. Connecting this pin to GND will reset the ESP32. This pin is normally pulled-up. The EN button will pull it LOW when you press it.
ESP32 power supply and reset pins

GPIO

There are 34 GPIO pins available on the ESP32 chip. These pins are named from 0 to 39. But doesn’t that make the count 40? No, because GPIOs 20, 24, 28, 29, 30, and 31 are not accessible. Also, not all of these pins are broken from the module or the board. But it is good to have a reference to know what is what. Below is the default ESP32 GPIO function matrix taken from the official documentation. Note that, many of the peripheral functions can be mapped to any of the GPIO pins using the GPIO Mux block of the ESP32.

GPIOPad NameFunction 0Function 1Function 2Function 3Function 4Function 5ResetNotes
0GPIO0GPIO0CLK_OUT1GPIO0EMAC_TX_CLK3R
1U0TXDU0TXDCLK_OUT3GPIO1EMAC_RXD23
2GPIO2GPIO2HSPIWPGPIO2HS2_DATA0SD_DATA02R
3U0RXDU0RXDCLK_OUT2GPIO33
4GPIO4GPIO4HSPIHDGPIO4HS2_DATA1SD_DATA1EMAC_TX_ER2R
5GPIO5GPIO5VSPICS0GPIO5HS1_DATA6EMAC_RX_CLK3
6SD_CLKSD_CLKSPICLKGPIO6HS1_CLKU1CTS3
7SD_DATA_0SD_DATA0SPIQGPIO7HS1_DATA0U2RTS3
8SD_DATA_1SD_DATA1SPIDGPIO8HS1_DATA1U2CTS3
9SD_DATA_2SD_DATA2SPIHDGPIO9HS1_DATA2U1RXD3
10SD_DATA_3SD_DATA3SPIWPGPIO10HS1_DATA3U1TXD3
11SD_CMDSD_CMDSPICS0GPIO11HS1_CMDU1RTS3
12MTDIMTDIHSPIQGPIO12HS2_DATA2SD_DATA2EMAC_TXD32R
13MTCKMTCKHSPIDGPIO13HS2_DATA3SD_DATA3EMAC_RX_ER2R
14MTMSMTMSHSPICLKGPIO14HS2_CLKSD_CLKEMAC_TXD23R
15MTDOMTDOHSPICS0GPIO15HS2_CMDSD_CMDEMAC_RXD33R
16GPIO16GPIO16GPIO16HS1_DATA4U2RXDEMAC_CLK_OUT1
17GPIO17GPIO17GPIO17HS1_DATA5U2TXDEMAC_CLK_1801
18GPIO18GPIO18VSPICLKGPIO18HS1_DATA71
19GPIO19GPIO19VSPIQGPIO19U0CTSEMAC_TXD01
21GPIO21GPIO21VSPIHDGPIO21EMAC_TX_EN1
22GPIO22GPIO22VSPIWPGPIO22U0RTSEMAC_TXD11
23GPIO23GPIO23VSPIDGPIO23HS1_STROBE1
25GPIO25GPIO25GPIO25EMAC_RXD00R
26GPIO26GPIO26GPIO26EMAC_RXD10R
27GPIO27GPIO27GPIO27EMAC_RX_DV0R
3232K_XPGPIO32GPIO320R
3332K_XNGPIO33GPIO330R
34VDET_1GPIO34GPIO340R, I
35VDET_2GPIO35GPIO350R, I
36SENSOR_VPGPIO36GPIO360R, I
37SENSOR_CAPPGPIO37GPIO370R, I
38SENSOR_CAPNGPIO38GPIO380R, I
39SENSOR_VNGPIO39GPIO390R, I
ESP32 GPIO function matrix

The ”Reset” column shows each pad’s default configurations after reset:

  • 0 – IE = 0 (input disabled)
  • 1 – IE =1 (input enabled)
  • 2 – IE = 1, WPD = 1 (input enabled, pull-down resistor)
  • 3 – IE = 1, WPU = 1 (input enabled, pull-up resistor)

Notes column indicates,

  • R – Pad has RTC/analog functions via RTC_MUX
  • I – Pad can only be configured as input GPIO. These input-only pads do not feature an output driver or internal pull-up/pull-down circuitry.

In the Arduino environment, you can invoke the pins just using their respective numbers from 0 to 39. Below is the list of pins you can use safely.

GPIOInput?Output?Notes
0NOYESPull LOW to enter bootloader mode.
1NOYESTX0 of serial port for programming and printing debug messages.
2YESYESConnected to the onboard LED, must be left floating or LOW to enter flashing mode.
3YESNORX0 of serial port for programming and printing debug messages.
4YESYES
5YESYESStrapping pin
6NONOFlash memory interface. Do not use.
7NONOFlash memory interface. Do not use.
8NONOFlash memory interface. Do not use.
9NONOFlash memory interface. Do not use.
10NONOFlash memory interface. Do not use.
11NONOFlash memory interface. Do not use.
12YESYESStrapping pin. Booting can fail if pulled HIGH (for 3.3V memories) due to brownout.
13YESYES
14YESYES
15YESYESPulling LOW mutes the debug messages through the serial port.
16YESYES
17YESYES
18YESYES
19YESYES
21YESYES
22YESYES
23YESYES
25YESYES
26YESYES
27YESYES
32YESYES
33YESYES
34YESNOInput only
35YESNOInput only
36YESNOInput only
39YESNOInput only
ESP32 Arduino GPIO pins

Strapping

Every ESP32 chips have a bootloader inside the Read-Only-Memory (ROM) which is a program that monitors the state of the chip when you power it on. The bootloader can check for different inputs and put the chip into different configurations. The pins monitored by the bootloader are called strapping pins. There are five strapping pins in ESP32. These strapping pins exhibit other behaviors during the booting process. So you should be careful not to interfere with the pins.

Pin NameFunction
GPIO0ESP32 will enter the serial bootloader when GPIO0 is held low on reset. Otherwise, it will run the program in flash memory. This pin is internally pulled-up.
GPIO2This pin must also be either left unconnected/floating, or driven LOW, in order to enter the serial bootloader. In normal boot mode (GPIO0 = HIGH), GPIO2 is ignored. This pin is also connected to the onboard LED.
GPIO12 / MTDIThis pin selects the flash voltage during boot. If driven HIGH, the flash voltage (VDD_SDIO) is 1.8V and not the default 3.3V. The pin has an internal pull-down, so unconnected means the flash voltage is 3.3V. May prevent flashing and/or booting if 3.3V flash is used and this pin is pulled HIGH, causing the flash to brownout.
GPIO15 / MTDOThis pin can be used to mute the debug messages printed by ESP32 during booting. If driven LOW, silences the boot messages printed by the ROM bootloader. The pins have an internal pull-up, so if the pin is unconnected the normal message will be printed to serial.
GPIO5This pin along with the MTDO pins determines the bus timing of the SDIO peripheral. This is internally pulled up.
ESP32 strapping pins

After the booting process, all strapping pins return to their default normal functions. Additionally, the TX0 (GPIO1) and RX0 (GPIO3) pins will output the boot message during booting. Read more about the ESP32 bootloader here.

Pull-Up & Pull-Down

All GPIO pins support internal pull-up and pull-down configurations, as well as a high-impedance state. This makes the pin tristate compatible.

LED

The onboard LED is connected to GPIO2 which can be used for debugging. In the Arduino environment, you can invoke this pin as LED_BUILTIN.

UART

ESP32 has three UARTs inside (asynchronous only) with hardware and software flow control. The UARTs are named UART0, UART1, and UART2. UART0 is used for serial programming and to print debug messages. This is the UART we use with the USB serial port to print messages from the ESP32. UART0 is the default Serial instance in the Arduino environment.

Serial1 is UART1 and its default pins are mixed with the QSPI interface (GPIO pins 6-11). So it is not recommended to use Serial1 without remapping the pins. Remapping of the pins can be done by passing the new pins to the begin() function. That said, you can still use Serial1 with the default GPIOs 9 (RX1, SD2) and 10 (TX1, SD3) but you will only be able to transmit. The receive function won’t work. Only a few types of ESP32 boards have GPIOs 9 and 10 broken out.

UART2 is assigned to Serial2 in the Arduino sketch. All UART functions can be assigned to any GPIO pins you like. The default ones are listed below.

Arduino InstanceUARTRX PinTX PinCTSRTS
SerialUART0GPIO 3 (RX0)GPIO 1 (TX0)N/AN/A
Serial1UART1GPIO 9 (RX1)GPIO 10 (TX1)GPIO 6GPIO 11
Serial2UART2GPIO 16 (RX2)GPIO 17 (TX2)GPIO 8GPIO 7
ESP32 Arduino Serial UART pins

SPI

There are four SPI peripheral blocks inside the ESP32. SPI0 and SPI1 have special functions including communicating with the flash memory and therefore we don’t use them. SPI2 and SPI3 are general-purpose SPI interfaces called HSPI and VSPI respectively. Similar to UART, SPI functions can be mapped to any GPIO pins. Below we have the default pins and their respective Arduino instances. Only one SPI is defined in the Arduino framework, but you can easily add the second one.

Arduino InstanceSPICOPICIPOSCKCS
SPIVSPIGPIO 23GPIO 19GPIO 18GPIO 5
HSPIGPIO 13GPIO 12GPIO 14GPIO 15
ESP32 Arduino SPI pins

For some reason, the Arduino environment and the ESP32 HAL driver assign HSPI’s default pins to VSPI.

ADC

Analog to Digital Converters (ADC) are used to convert analog voltages to digital values. There are two 12-bit SAR ADCs available on ESP32 with 18 input channels. But only 16 channels are available on Arduino. Following is the list of ADC channels and their Arduino instances. ADC channels ADC1_CH1 and ADC1_CH2 are not used.

Arduino PinADC ChannelGPIOUsable?
A0ADC1_CH036YES
A3ADC1_CH339YES
A4ADC1_CH432YES
A5ADC1_CH533YES
A6ADC1_CH634YES
A7ADC1_CH735YES
A10ADC2_CH04YES
A11ADC2_CH10NO
A12ADC2_CH22NO (LED Connected)
A13ADC2_CH315YES
A14ADC2_CH413YES
A15ADC2_CH512NO
A16ADC2_CH614YES
A17ADC2_CH727YES
A18ADC2_CH825YES
A19ADC2_CH926YES
ESP32 Arduino ADC pins

DAC

ESP32 has two 8-bit Digital to Analog Converters (DAC).

Arduino PinGPIO
DAC125
DAC226
ESP32 Arduino DAC pins

Touch Sensor

There are 10 capacitive touch channels in ESP32.

Arduino PinTouch ChannelGPIOUsable?
T0TOUCH04YES
T1TOUCH10NO
T2TOUCH22NO (LED Connected)
T3TOUCH315YES
T4TOUCH413YES
T5TOUCH512NO
T6TOUCH614YES
T7TOUCH727YES
T8TOUCH833YES
T9TOUCH932YES
ESP32 Arduino Touch Sensor pins

I2C

There are two I2C peripherals inside ESP32. I2C is also called Two Wire Interface (TWI). Similar to UART and SPI, I2C pins can also be mapped to any GPIO pins. There are two I2C interfaces defined for Arduino; Wire (I2C0) and Wire1 (I2C1) but only Wire has the pins defined. You need to manually set the pins for Wire1.

Arduino InstanceI2CSDASCL
WireI2C0GPIO 21GPIO 22
Wire1I2C1
ESP32 Arduino I2C pins

PWM

ESP32 supports up to 16 independent PWM (Pulse Width Modulation) channels with 16-bit precision. PWM outputs can be mapped to any GPIO pins that support output mode.

I2S

Inter-Integrated Sound (I2S) is a digital audio interface supported by ESP32. I2S pin functions can also be mapped to any GPIO pins except the clock pins I2S0_CLK and I2S1_CLK which can only be mapped to either GPIO0, U0RXD or U0TXD.

CAN/TWAI

Controller Area Network (CAN) or Two Wire Automotive Interface (TWAI) is a two-wire communication interface that mainly finds application in the automotive industry. CAN functions can be mapped to any GPIO pins. We have a complete tutorial for using CAN interface with ESP32 which you can find below.

Featured image of CAN bus tutorial for ESP32 microcontroller board using Arduino

What is CAN Bus & How to use CAN Interface with ESP32 and Arduino

Learn the basics of CAN bus interface and learn how to make two ESP32 boards communicate through CAN bus using Arduino and with the help of TJA1051 CAN transceivers (CJMCU-1051).

JTAG

JTAG (Joint Test Action Group) is a standard interface used for programming and debugging microcontrollers. ESP32 supports JTAG programming and debugging. JTAG has four main signals and an optional reset line. You can use supported debuggers like the ESP-Prog to debug your ESP chips.

Pin NameGPIOFunction
MTDI12Test Data In
MTCK13Test Clock
MTMS14Test Mode Select
MTDO15Test Data Out
ESP32 JTAG pins

If you want to learn more about ESP32 debugging through JTAG using the ESP-Prog, we have a complete tutorial on it.

Debugging ESP32 Arduino and ESP-IDF Projects using ESP-Prog and PlatformIO CIRCUITSTATE Electronics Featured Image

Debugging ESP32 Arduino & ESP-IDF Projects using ESP-Prog and PlatformIO

Learn how to use the official Espressif ESP-Prog to debug your ESP32 Arduino and ESP-IDF projects with the help of PlatformIO.

External Interrupts

ESP32 supports external interrupts on all GPIO pins. The interrupt types can be level-triggered, edge-triggered, or state change.

Ethernet MAC

ESP32 has a single Ethernet MAC (Medium Access Control) controller. This controller can be combined with an external Ethernet PHY (Physical Layer) to accomplish Ethernet communication. Ethernet pins can only be mapped to their assigned ones shown in the GPIO function matrix.

  1. ESP32 Technical Reference Manual [PDF]
  2. ESP32 Datasheet [PDF]
  3. ESP Bootloader and Strapping Pins
  4. Introduction to the ESP-Prog Board
Share to your friends
Vishnu Mohanan

Vishnu Mohanan

Founder and CEO at CIRCUITSTATE Electronics

Articles: 93

2 Comments

  1. Hello,

    I am looking for electrical schematic for DEVKIT V1, I am wondering do you know where I can find this, because I was searching a big part of internet and this PCB board that you presented is that hardware what schematic I was looking for.

    Best regards.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

The reCAPTCHA verification period has expired. Please reload the page.