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.
TutorialsGetting Started with Espressif ESP32 Wi-Fi & Bluetooth SoC using DOIT-ESP32-DevKit-V1 Development BoardLearn 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.ContentsPinout DiagramPNGPDFPinout ReferencePower & ControlGPIOStrappingPull-Up & Pull-DownLEDUARTSPIADCDACTouch SensorI2CPWMI2SCAN/TWAIJTAGExternal InterruptsEthernet MACLinksShort LinkPinout DiagramLatest Revision: r0.1, 17-12-2022Design by: Vishnu MohananLicense: 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.
PNGDOIT 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.
PDFPDF preview may not load on mobile devices. Click the link to open an interactive preview, or download it directly.
ESP32-DevKit-V1-Pinout-r0.1-CIRCUITSTATE-ElectronicsDownloadPinout ReferencePower & ControlThere are two positive power supply input pins and one control pin on the DOIT ESP32 DevKit V1.
Pin NameFunctionVINThe 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 pinsGPIOThere 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 5ResetNotes0GPIO0GPIO0CLK_OUT1GPIO0––EMAC_TX_CLK3R1U0TXDU0TXDCLK_OUT3GPIO1––EMAC_RXD23–2GPIO2GPIO2HSPIWPGPIO2HS2_DATA0SD_DATA0–2R3U0RXDU0RXDCLK_OUT2GPIO3–––3–4GPIO4GPIO4HSPIHDGPIO4HS2_DATA1SD_DATA1EMAC_TX_ER2R5GPIO5GPIO5VSPICS0GPIO5HS1_DATA6–EMAC_RX_CLK3–6SD_CLKSD_CLKSPICLKGPIO6HS1_CLKU1CTS–3–7SD_DATA_0SD_DATA0SPIQGPIO7HS1_DATA0U2RTS–3–8SD_DATA_1SD_DATA1SPIDGPIO8HS1_DATA1U2CTS–3–9SD_DATA_2SD_DATA2SPIHDGPIO9HS1_DATA2U1RXD–3–10SD_DATA_3SD_DATA3SPIWPGPIO10HS1_DATA3U1TXD–3–11SD_CMDSD_CMDSPICS0GPIO11HS1_CMDU1RTS–3–12MTDIMTDIHSPIQGPIO12HS2_DATA2SD_DATA2EMAC_TXD32R13MTCKMTCKHSPIDGPIO13HS2_DATA3SD_DATA3EMAC_RX_ER2R14MTMSMTMSHSPICLKGPIO14HS2_CLKSD_CLKEMAC_TXD23R15MTDOMTDOHSPICS0GPIO15HS2_CMDSD_CMDEMAC_RXD33R16GPIO16GPIO16–GPIO16HS1_DATA4U2RXDEMAC_CLK_OUT1–17GPIO17GPIO17–GPIO17HS1_DATA5U2TXDEMAC_CLK_1801–18GPIO18GPIO18VSPICLKGPIO18HS1_DATA7––1–19GPIO19GPIO19VSPIQGPIO19U0CTS–EMAC_TXD01–21GPIO21GPIO21VSPIHDGPIO21––EMAC_TX_EN1–22GPIO22GPIO22VSPIWPGPIO22U0RTS–EMAC_TXD11–23GPIO23GPIO23VSPIDGPIO23HS1_STROBE––1–25GPIO25GPIO25–GPIO25––EMAC_RXD00R26GPIO26GPIO26–GPIO26––EMAC_RXD10R27GPIO27GPIO27–GPIO27––EMAC_RX_DV0R3232K_XPGPIO32–GPIO32–––0R3332K_XNGPIO33–GPIO33–––0R34VDET_1GPIO34–GPIO34–––0R, I35VDET_2GPIO35–GPIO35–––0R, I36SENSOR_VPGPIO36–GPIO36–––0R, I37SENSOR_CAPPGPIO37–GPIO37–––0R, I38SENSOR_CAPNGPIO38–GPIO38–––0R, I39SENSOR_VNGPIO39–GPIO39–––0R, IESP32 GPIO function matrixThe ”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_MUXI – 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?Notes0NOYESPull 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.4YESYES5YESYESStrapping pin6NONOFlash 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.13YESYES14YESYES15YESYESPulling LOW mutes the debug messages through the serial port.16YESYES17YESYES18YESYES19YESYES21YESYES22YESYES23YESYES25YESYES26YESYES27YESYES32YESYES33YESYES34YESNOInput only35YESNOInput only36YESNOInput only39YESNOInput onlyESP32 Arduino GPIO pinsStrappingEvery 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 NameFunctionGPIO0ESP32 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 pinsAfter 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-DownAll GPIO pins support internal pull-up and pull-down configurations, as well as a high-impedance state. This makes the pin tristate compatible.
LEDThe onboard LED is connected to GPIO2 which can be used for debugging. In the Arduino environment, you can invoke this pin as LED_BUILTIN.
UARTESP32 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 PinCTSRTSSerialUART0GPIO 3 (RX0)GPIO 1 (TX0)N/AN/ASerial1UART1GPIO 9 (RX1)GPIO 10 (TX1)GPIO 6GPIO 11Serial2UART2GPIO 16 (RX2)GPIO 17 (TX2)GPIO 8GPIO 7ESP32 Arduino Serial UART pinsSPIThere 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 InstanceSPICOPICIPOSCKCSSPIVSPIGPIO 23GPIO 19GPIO 18GPIO 5–HSPIGPIO 13GPIO 12GPIO 14GPIO 15ESP32 Arduino SPI pinsFor some reason, the Arduino environment and the ESP32 HAL driver assign HSPI’s default pins to VSPI.
ADCAnalog 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_CH036YESA3ADC1_CH339YESA4ADC1_CH432YESA5ADC1_CH533YESA6ADC1_CH634YESA7ADC1_CH735YESA10ADC2_CH04YESA11ADC2_CH10NOA12ADC2_CH22NO (LED Connected)A13ADC2_CH315YESA14ADC2_CH413YESA15ADC2_CH512NOA16ADC2_CH614YESA17ADC2_CH727YESA18ADC2_CH825YESA19ADC2_CH926YESESP32 Arduino ADC pinsDACESP32 has two 8-bit Digital to Analog Converters (DAC).
Arduino PinGPIODAC125DAC226ESP32 Arduino DAC pinsTouch SensorThere are 10 capacitive touch channels in ESP32.
Arduino PinTouch ChannelGPIOUsable?T0TOUCH04YEST1TOUCH10NOT2TOUCH22NO (LED Connected)T3TOUCH315YEST4TOUCH413YEST5TOUCH512NOT6TOUCH614YEST7TOUCH727YEST8TOUCH833YEST9TOUCH932YESESP32 Arduino Touch Sensor pinsI2CThere 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 InstanceI2CSDASCLWireI2C0GPIO 21GPIO 22Wire1I2C1––ESP32 Arduino I2C pinsPWMESP32 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.
I2SInter-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/TWAIController 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.
TutorialsWhat is CAN Bus & How to use CAN Interface with ESP32 and ArduinoLearn 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).JTAGJTAG (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 NameGPIOFunctionMTDI12Test Data InMTCK13Test ClockMTMS14Test Mode SelectMTDO15Test Data OutESP32 JTAG pinsIf you want to learn more about ESP32 debugging through JTAG using the ESP-Prog, we have a complete tutorial on it.
TutorialsDebugging ESP32 Arduino & ESP-IDF Projects using ESP-Prog and PlatformIOLearn how to use the official Espressif ESP-Prog to debug your ESP32 Arduino and ESP-IDF projects with the help of PlatformIO.External InterruptsESP32 supports external interrupts on all GPIO pins. The interrupt types can be level-triggered, edge-triggered, or state change.
Ethernet MACESP32 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.
LinksESP32 Technical Reference Manual [PDF]ESP32 Datasheet [PDF]ESP Bootloader and Strapping PinsIntroduction to the ESP-Prog BoardShort LinkShort URL to this page – https://circuitstate.com/esp32dkpinref