The ESP32 DevKit V1 (housing the ESP32-WROOM-32E module) is the baseline for modern embedded projects, but its 38-pin layout hides critical hardware traps that routinely brick boards. Below is the definitive functional pinout map, prioritized by how you will actually wire it on the bench.
Complete ESP32 DevKit V1 Functional Pinout Table
This matrix groups the 38 physical pins by their hardware function. Use this instead of a sequential 1-38 list to avoid routing signals into dedicated flash memory or input-only pads.
| Category | GPIO / Pin Name | 5V Tolerant? | Practical Bench Meaning & Constraints |
|---|---|---|---|
| Power | 3V3, GND (x3), VIN | N/A | VIN accepts 5V-12V (check your specific board's AMS1117 regulator). 3V3 pin outputs max ~500mA. Never backfeed 5V into the 3V3 pin. |
| Input-Only | GPIO 34, 35, 36 (VP), 39 (VN) | No (3.3V max) | ADC and touch inputs only. No internal pull-up/pull-down resistors. You must add external 10kΩ resistors if reading buttons. |
| Strapping Pins | GPIO 0, 2, 12, 15 | No (3.3V max) | Determine boot mode and flash voltage. Must be left floating or pulled to specific states during reset. (See 'Rows People Get Wrong' below). |
| SPI Flash | GPIO 6, 7, 8, 9, 10, 11 | No | Hardwired to the internal SPI flash chip on the WROOM module. Do not use. Connecting loads here causes immediate boot crashes. |
| Default I2C | GPIO 21 (SDA), 22 (SCL) | No (3.3V max) | Hardware I2C0 defaults. Requires 4.7kΩ pull-ups to 3.3V if your sensor module lacks them. |
| Default UART | GPIO 1 (TX0), 3 (RX0) | No | Connected to the onboard CP2102 USB-to-UART bridge. Used for Serial Monitor. Disconnect external devices here when flashing firmware. |
| General GPIO | 4, 5, 13, 14, 16, 17, 18, 19, 23, 25, 26, 27, 32, 33 | No (3.3V max) | Safe for PWM, digital I/O, and external interrupts. GPIO 25, 26, 27 are connected to the internal DAC (Digital-to-Analog). |
Unlike the Arduino Uno (ATmega328P), the ESP32 is a 3.3V logic device. Feeding 5V into any GPIO pin will degrade the silicon and eventually destroy the SoC. If you are interfacing with 5V sensors (like the HC-SR04 ultrasonic or standard 5V relays), you must use a logic level shifter (like the BSS138 bidirectional module) or a simple voltage divider (1kΩ and 2kΩ resistors) on the ESP32's RX lines.
Rows Makers Get Wrong: Strapping Pins & Faded Silkscreen
The most common support tickets in embedded forums stem from misinterpreting the ESP32 dev pinout during the boot sequence. Here is where the hardware bites back.
The Strapping Pin Trap
GPIO 0, 2, 12, and 15 are sampled by the internal bootloader the millisecond the EN (Reset) pin goes HIGH. If you wire a relay or a low-impedance sensor to these pins, you alter the boot configuration.
- GPIO 12 (MTDI): This is the most dangerous. It selects the flash VDD voltage. If GPIO 12 is pulled HIGH during boot, the ESP32 attempts to power the internal flash at 1.8V instead of 3.3V, resulting in a continuous boot loop or corrupted firmware. Rule: Never wire a default-HIGH sensor to GPIO 12.
- GPIO 0: Must be HIGH for normal execution. If pulled LOW during reset, the chip enters the UART serial bootloader (flash mode). This is why dev boards have a 'BOOT' button wired to GPIO 0.
- GPIO 2: Must be LOW or floating to boot from the internal SPI flash. Do not attach an active-high LED here without a pulldown.
Safe Interpretation When Silkscreen is Faded
DevKit V1 boards are notorious for cheap silkscreen that rubs off after a few months on the bench. If your pin labels are gone, do not guess. Use these physical landmarks:
- The USB Port Anchor: Orient the board with the micro-USB port facing down toward you. The left row starts with 3V3 (Pin 1) and GND (Pin 2). The right row starts with GPIO 27 (Pin 20) and GPIO 14 (Pin 21).
- The WROOM Shield Notch: Look at the metal RF shield on the ESP32-WROOM-32E module. There is a tiny physical notch or dot on the bottom-left corner of the shield. This aligns exactly with GPIO 23 on the left bank and GPIO 13 on the right bank.
- Verify with a Multimeter: Power the board via USB. Set your meter to DC Voltage. Probe the suspected 3V3 pin against GND. You should read 3.28V–3.35V. If you read ~5.0V, you are on the VIN pin.
Board Variant Standards: DevKit V1 vs NodeMCU-32S vs ESP32-C3
Assuming all 'ESP32 dev boards' share the same pinout is a critical error. The term 'ESP32' refers to the silicon die, but the carrier board standards vary wildly. Always verify your exact board variant before ordering PCBs or wiring harnesses.
| Feature | Espressif DevKit V1 (Standard) | NodeMCU-32S (AI-Thinker) | ESP32-C3 SuperMini |
|---|---|---|---|
| Pin Count | 38 pins (19 per side) | 30 pins (15 per side, wider spacing) | 20 pins (Castellated edges or headers) |
| Core Architecture | Xtensa Dual-Core 32-bit LX6 | Xtensa Dual-Core 32-bit LX6 | RISC-V Single-Core (No analog DACs) |
| Default I2C Pins | SDA: 21, SCL: 22 | SDA: 21, SCL: 22 | SDA: 8, SCL: 9 (Software mapped) |
| Physical Footprint | Fits standard 900mil breadboard (blocks one side) | Fits standard 900mil breadboard (leaves one row free) | Ultra-compact, requires custom breakout or careful breadboarding |
| Best Use Case | General prototyping, high I/O count | Breadboard-friendly projects, battery-powered nodes | Ultra-low-cost IoT nodes, simple MQTT sensors |
For authoritative hardware design guidelines and exact pin mappings across all Espressif modules, always cross-reference the official ESP32-WROOM-32E datasheet and the ESP-IDF GPIO API documentation. For practical wiring diagrams, Random Nerd Tutorials maintains an excellent, frequently updated visual guide.
FAQ: ESP32 Dev Pinout Long-Tail Questions
Which ESP32 dev pinout supports 5V logic inputs directly?
None of them. The ESP32 SoC operates strictly at 3.3V logic. While some older forum posts claim certain GPIOs are '5V tolerant' due to internal ESD diodes, relying on this is a fast track to silicon degradation. If your project requires reading a 5V digital signal (like a 5V rotary encoder), use an optocoupler (like the PC817) or a dedicated logic level shifter IC (like the TXS0108E) to step the voltage down to 3.3V before it hits the ESP32 GPIO.
How do I read the ESP32 dev pinout when the silkscreen is rubbed off?
If the white text on your PCB is gone, orient the board with the USB port facing you. On a standard 38-pin DevKit V1, the top-left pin is always 3V3, and the top-right pin is GPIO 27. You can also identify the GND pins by using a multimeter in continuity mode: probe the outer metal shield of the micro-USB port (which is grounded) and test the header pins. The pins that beep are your grounds. For a permanent fix, print a pinout cheat sheet and tape it to the inside of your project enclosure.
Why does my ESP32 boot loop when I connect a sensor to GPIO 12?
GPIO 12 is a strapping pin that dictates the internal flash voltage (VDD_SDIO). If your sensor outputs a HIGH signal (or has an internal pull-up) on GPIO 12 during the exact millisecond the ESP32 resets, the bootloader misinterprets this as a command to switch the flash voltage to 1.8V. Since the WROOM module uses 3.3V flash, the chip brownouts and loops. To fix this, either move the sensor to a safe GPIO (like GPIO 13 or 14), or add a 10kΩ pulldown resistor between GPIO 12 and GND to force it LOW during boot.






