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? |
|---|---|---|---|---|
| 1 | 3V3 | 3.3V Power Output | N/A | No |
| 2 | EN | Chip Enable (Active High) | Must be HIGH to run | No |
| 3 | GPIO36 (SVP) | ADC1_CH0 / Input Only | N/A | No |
| 4 | GPIO39 (SVN) | ADC1_CH3 / Input Only | N/A | No |
| 5 | GPIO34 | ADC1_CH6 / Input Only | N/A | No |
| 6 | GPIO35 | ADC1_CH7 / Input Only | N/A | No |
| 7 | GPIO32 | ADC1_CH4 / DAC1 / XTAL | N/A | No |
| 8 | GPIO33 | ADC1_CH5 / DAC2 / XTAL | N/A | No |
| 9 | GPIO25 | ADC2_CH8 / DAC1 | N/A | No |
| 10 | GPIO26 | ADC2_CH9 / DAC2 | N/A | No |
| 11 | GPIO27 | ADC2_CH7 / Touch7 | N/A | No |
| 12 | GPIO14 | ADC2_CH6 / Touch6 / HSPI_SCK | N/A | No |
| 13 | GPIO12 | ADC2_CH5 / Touch5 / HSPI_MISO | Selects Flash VDD (Must be LOW for 3.3V) | No |
| 14 | GND | Ground | N/A | N/A |
| 15 | GPIO13 | ADC2_CH4 / Touch4 / HSPI_MOSI | N/A | No |
| 16 | GPIO9 | SD2 (Flash SPI) | Internal Flash use only | No |
| 17 | GPIO10 | SD3 (Flash SPI) | Internal Flash use only | No |
| 18 | GPIO11 | CMD (Flash SPI) | Internal Flash use only | No |
| 19 | 5V | 5V Input (USB VBUS) | N/A | Yes (Input) |
| 20 | GPIO8 | SD1 (Flash SPI) | Internal Flash use only | No |
| 21 | GPIO7 | SD0 (Flash SPI) | Internal Flash use only | No |
| 22 | GPIO6 | SCK (Flash SPI) | Internal Flash use only | No |
| 23 | GPIO15 | ADC2_CH3 / Touch3 / HSPI_CS | Boot log output (Must be LOW for normal boot) | No |
| 24 | GPIO2 | ADC2_CH2 / Touch2 / HSPI_WP | Boot mode select (Must be LOW or floating) | No |
| 25 | GPIO4 | ADC2_CH0 / Touch0 / HSPI_HD | N/A | No |
| 26 | GPIO16 | U2RXD / HS1_CS | N/A | No |
| 27 | GPIO17 | U2TXD / HS1_MOSI | N/A | No |
| 28 | GPIO5 | VSP_CS / PWM | SDIO timing select | No |
| 29 | GPIO18 | VSP_SCK / PWM | N/A | No |
| 30 | GPIO19 | VSP_MISO / PWM | N/A | No |
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.
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) | Brown | Red or Blue (Class 2) | Red | Red |
| DC Positive (3.3V) | Brown (w/ Orange tracer) | Orange | Orange | Orange |
| DC Negative / GND | Blue | Black or Blue | Black | Black |
| 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).
- Locate the large metal shielding can (the WROOM module). The metal can is tied to GND. Probe the can with your black lead.
- Use the red lead to test the header pins. The pins that beep are your GND pins. Mark them with a silver paint pen.
- 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.






