The standard 30-pin ESP32-WROOM-32E dev board features 25 usable GPIOs, 3.3V logic (strictly not 5V tolerant), and specific strapping pins that dictate boot modes. Whether you are wiring an I2C sensor or debugging a boot loop, the exact pin behavior matters. Below is the complete pinout reference, followed by the critical edge cases that brick boards and halt projects.

The Standard 30-Pin ESP32 Dev Board Pinout Table

This table maps the ubiquitous 30-pin DevKit V1 layout (often sold by HiLetgo, NodeMCU, or generic brands in 2026). Note that while the physical board has 30 pins, the underlying Espressif ESP32-WROOM-32E datasheet exposes 34 physical GPIO pads, some of which are not broken out to the headers.

Pin # GPIO Primary Function Boot / Strapping Role 5V Tolerant?
13V33.3V Power OutputN/ANo
2ENChip Enable (Active High)Must be HIGH to runNo
3GPIO36 (SVP)ADC1_CH0 / Input OnlyN/ANo
4GPIO39 (SVN)ADC1_CH3 / Input OnlyN/ANo
5GPIO34ADC1_CH6 / Input OnlyN/ANo
6GPIO35ADC1_CH7 / Input OnlyN/ANo
7GPIO32ADC1_CH4 / DAC1 / XTALN/ANo
8GPIO33ADC1_CH5 / DAC2 / XTALN/ANo
9GPIO25ADC2_CH8 / DAC1N/ANo
10GPIO26ADC2_CH9 / DAC2N/ANo
11GPIO27ADC2_CH7 / Touch7N/ANo
12GPIO14ADC2_CH6 / Touch6 / HSPI_SCKN/ANo
13GPIO12ADC2_CH5 / Touch5 / HSPI_MISOSelects Flash VDD (Must be LOW for 3.3V)No
14GNDGroundN/AN/A
15GPIO13ADC2_CH4 / Touch4 / HSPI_MOSIN/ANo
16GPIO9SD2 (Flash SPI)Internal Flash use onlyNo
17GPIO10SD3 (Flash SPI)Internal Flash use onlyNo
18GPIO11CMD (Flash SPI)Internal Flash use onlyNo
195V5V Input (USB VBUS)N/AYes (Input)
20GPIO8SD1 (Flash SPI)Internal Flash use onlyNo
21GPIO7SD0 (Flash SPI)Internal Flash use onlyNo
22GPIO6SCK (Flash SPI)Internal Flash use onlyNo
23GPIO15ADC2_CH3 / Touch3 / HSPI_CSBoot log output (Must be LOW for normal boot)No
24GPIO2ADC2_CH2 / Touch2 / HSPI_WPBoot mode select (Must be LOW or floating)No
25GPIO4ADC2_CH0 / Touch0 / HSPI_HDN/ANo
26GPIO16U2RXD / HS1_CSN/ANo
27GPIO17U2TXD / HS1_MOSIN/ANo
28GPIO5VSP_CS / PWMSDIO timing selectNo
29GPIO18VSP_SCK / PWMN/ANo
30GPIO19VSP_MISO / PWMN/ANo

Note: Pins 16-18 and 20-22 (GPIO6-11) are connected to the internal SPI flash on the WROOM module. ESP-IDF documentation explicitly warns against using these for external peripherals, as doing so will crash the chip or corrupt the firmware.

Rows People Get Wrong: Strapping Pins and 5V Hazards

The most common reasons an ESP32 dev board fails to boot or permanently dies trace back to misinterpreting three specific rows in the table above.

The Strapping Pins (GPIO0, GPIO2, GPIO12, GPIO15)

During the reset sequence, the ESP32 samples these pins to determine its boot mode and flash voltage. If you wire a sensor or relay directly to these pins without considering their boot state, the chip will hang.

  • GPIO12 (MTDI): This is the most dangerous strapping pin for beginners. It selects the flash voltage. If GPIO12 is pulled HIGH during boot, the ESP32 expects a 1.8V flash chip. Since the WROOM-32E uses a 3.3V flash, pulling GPIO12 high will cause a brownout or permanent flash corruption. Rule: Never wire external pull-up resistors to GPIO12.
  • GPIO0 & GPIO2: These dictate the boot mode (Flash vs. Download). GPIO2 has an onboard LED on most DevKits. If you connect a low-impedance load to GPIO2 that pulls it HIGH, the chip will fail to enter the UART bootloader when you press the flash button.
  • GPIO15: Controls boot log output. If pulled HIGH, it outputs SDIO debug logs, which can interfere with standard UART communication if you are multiplexing pins.
WARNING: The 5V Tolerance Myth
Unlike the Arduino Uno (ATmega328P) which tolerates 5V on its I/O pins, the ESP32 is strictly a 3.3V logic device. Feeding a 5V signal into GPIO13 or GPIO27 will punch through the internal ESD protection diodes, shorting the 3.3V rail and permanently bricking the module. Always use a logic level shifter (like the BSS138 MOSFET circuit or a TXB0108 IC) when interfacing with 5V sensors like the HC-SR04 ultrasonic module.

Input-Only Pins (GPIO34, 35, 36, 39)

These pins lack internal pull-up or pull-down resistors and cannot be configured as outputs. If you try to drive an LED from GPIO34, nothing will happen. Furthermore, because they lack internal pull-ups, reading a button on these pins requires an external 10kΩ resistor to 3.3V, otherwise the pin will float and trigger phantom interrupts.

Peripheral Wiring Color Codes: IEC vs NEC vs Old UK

When wiring external sensors to the ESP32's I2C, SPI, or UART buses, maintaining a consistent wire color scheme prevents catastrophic cross-wiring. While data lines (SDA, SCL, MOSI, MISO) generally follow universal hobbyist conventions (Yellow/Orange for data, Green for clock), the power and ground wiring colors vary drastically by regional electrical standards.

When building enclosures or running wire harnesses from the ESP32 to external terminal blocks, align your DC low-voltage colors with your region's governing standard to ensure safe interpretation by other technicians.

Function IEC 60445 / 60446 (EU/Global) NEC / NFPA 79 (US Industrial) Old UK Standard (Pre-2004) Hobbyist Default
DC Positive (5V)BrownRed or Blue (Class 2)RedRed
DC Positive (3.3V)Brown (w/ Orange tracer)OrangeOrangeOrange
DC Negative / GNDBlueBlack or BlueBlackBlack
I2C SDA (Data)N/A (Use Yellow)N/A (Use Yellow)N/A (Use Yellow)Blue or Yellow
I2C SCL (Clock)N/A (Use Green)N/A (Use Green)N/A (Use Green)Green or Purple

Which standard applies to you? If you are building a consumer product for the European market, you must adhere to IEC standards where Blue is strictly reserved for the grounded/negative conductor. If you are wiring a control panel in the US under NFPA 79, Blue is often used for DC control circuits, but Black remains the standard for DC common (GND). Never mix IEC Blue (GND) with US Black (GND) in the same harness without clear labeling, as a European technician will assume the Black wire is a live AC phase.

Safe Interpretation When Silkscreen Markings Are Faded

Cheap clone boards from overseas marketplaces frequently suffer from rubbed-off silkscreen, misprinted pin labels, or completely blank PCBs. Guessing the pinout by looking at adjacent boards is a reliable way to short the 5V rail to a GPIO. Here is the bench-tested procedure to safely map an unmarked ESP32 dev board.

Step 1: Identify the Power and Ground Rails

Do not plug the board into USB yet. Set your multimeter to continuity mode (the diode/beep setting).

  1. Locate the large metal shielding can (the WROOM module). The metal can is tied to GND. Probe the can with your black lead.
  2. Use the red lead to test the header pins. The pins that beep are your GND pins. Mark them with a silver paint pen.
  3. Locate the AMS1117-3.3 voltage regulator (a small SOT-223 package near the USB port). Pin 3 (or the large tab) is the 3.3V output. Trace the continuity from the tab to the header pins to find your 3V3 pin.

Step 2: Locate the EN and Boot Pins

The EN (Enable) pin is almost always routed through a 10kΩ pull-up resistor to the 3.3V rail, and a 100nF capacitor to GND. If you have a component view, find the capacitor tied to the EN button; the trace leading to the header is your EN pin. Similarly, the GPIO0 pin is routed to the 'BOOT' tactile switch. Tracing the switch leg will reliably identify GPIO0, giving you a fixed reference point to count the remaining pins against the standard 30-pin layout.

Step 3: Verify with a Safe Power-Up

Once GND, 3V3, and 5V are identified and marked, power the board via USB. Use the multimeter in DC voltage mode to verify the 3V3 pin reads between 3.25V and 3.35V. If it reads 5V, the board has a catastrophic regulator failure or a non-standard pinout—discard it immediately to protect your sensors.

Bench Tip: When mapping faded boards, write the GPIO numbers directly on the plastic header shroud using a fine-tip white paint marker. Silkscreen wears off, but paint on the black plastic housing survives years of plugging and unplugging jumper wires.