The ESP32-WROOM-32 exposes 38 physical pins on standard DevKit V1 carrier boards, but treating them as generic I/O will result in boot loops, WiFi dropouts, and dead sensors. Below is the definitive bench reference for mapping, wiring, and debugging this specific module.
The Complete ESP32-WROOM-32 Pinout Reference Table
This table maps the physical DevKit V1 board pins to the internal WROOM-32 module GPIOs. Use this as your primary lookup when wiring sensors, relays, or communication buses.
| DevKit Pin | GPIO | Primary Function | Strapping Pin? | Bench Notes & Restrictions |
|---|---|---|---|---|
| 3V3 | - | Power Output | No | Max 500mA draw (limited by onboard AMS1117 LDO). |
| GND | - | Ground | No | Common ground for all logic and power returns. |
| GPIO 36 (SVP) | 36 | Input / ADC1 | No | Input only. No internal pull-up/pull-down. |
| GPIO 39 (SVN) | 39 | Input / ADC1 | No | Input only. No internal pull-up/pull-down. |
| GPIO 34 | 34 | Input / ADC1 | No | Input only. No internal pull-up/pull-down. |
| GPIO 35 | 35 | Input / ADC1 | No | Input only. No internal pull-up/pull-down. |
| GPIO 32 | 32 | I/O / ADC1 / Touch | No | Safe for general use. Supports PWM and ADC1. |
| GPIO 33 | 33 | I/O / ADC1 / Touch | No | Safe for general use. Supports PWM and ADC1. |
| GPIO 25 | 25 | I/O / DAC1 / ADC2 | No | DAC output capable. ADC2 conflicts with WiFi. |
| GPIO 26 | 26 | I/O / DAC2 / ADC2 | No | DAC output capable. ADC2 conflicts with WiFi. |
| GPIO 27 | 27 | I/O / ADC2 / Touch | No | Safe for I/O, but ADC2 blocked during WiFi TX. |
| GPIO 14 | 14 | I/O / ADC2 / Touch | No | Outputs PWM boot message. ADC2 blocked by WiFi. |
| GPIO 12 | 12 | I/O / ADC2 / Touch | YES | Boot fail risk. Must be LOW at boot for 3.3V flash. |
| GPIO 13 | 13 | I/O / ADC2 / Touch | No | ADC2 blocked by WiFi. Safe for digital I/O. |
| GPIO 15 | 15 | I/O / ADC2 / Touch | YES | Outputs boot debug. Pulled high internally at boot. |
| GPIO 2 | 2 | I/O / ADC2 / Touch | YES | Boot fail risk. Must be LOW or floating to boot. |
| GPIO 4 | 4 | I/O / ADC2 / Touch | No | Safe for general use. ADC2 blocked by WiFi. |
| GPIO 0 | 0 | I/O / ADC2 / Touch | YES | Boot mode select. Pulled high. LOW enters flash mode. |
Note: Pins like GPIO 6-11 are connected to the internal SPI flash on the WROOM module and are strictly forbidden for external wiring. They are omitted from standard DevKit headers to prevent shorts.
Rows People Get Wrong: Strapping Pins and ADC Gotchas
The most common bench failures with the ESP32-WROOM-32 stem from ignoring the electrical state of specific pins during the 800ms boot window. Here is what the datasheet implies but rarely spells out in plain English.
The GPIO 12 Flash Voltage Trap
GPIO 12 (MTDI) is a strapping pin that selects the SPI flash voltage. If GPIO 12 is pulled HIGH during boot, the ESP32 configures its internal LDO to output 1.8V to the flash chip. Because the WROOM-32 uses a 3.3V SPI flash, the chip will brownout, and the module will enter a continuous boot loop. Never wire a relay, LED, or pull-up resistor to GPIO 12 unless you are certain it will remain LOW during power-on.
The ADC2 vs WiFi Conflict
If your analog sensor reads perfect values until you call WiFi.begin(), you have wired it to an ADC2 pin (GPIO 0, 2, 4, 12, 13, 14, 15, 25, 26, 27). The ESP32's WiFi stack monopolizes the ADC2 hardware for internal RF power calibration. The fix: Move all analog sensors to ADC1 pins (GPIO 32, 33, 34, 35, 36, 39).
Real-World ADC Voltage Thresholds
The official Espressif datasheet claims the ADC can read up to 3.9V with 11dB attenuation. On the bench, this is overly optimistic. Due to internal LDO droop and non-linearity at the top of the scale, the reliable maximum readable voltage on a standard WROOM-32 at 11dB attenuation is ~3.1V. If you need to measure a 3.3V battery, use a simple voltage divider (e.g., 10kΩ and 10kΩ) to scale it down to ~1.65V.
Wire Color and Schematic Symbol Standards in Embedded
When building harnesses for ESP32 projects, applying the wrong regional wiring standard can lead to catastrophic shorts. Mains AC wiring and low-voltage DC embedded logic follow entirely different rulebooks.
Mains AC (NEC vs IEC) vs Embedded DC
Never use IEC 60446 or NEC mains color codes for your 3.3V logic wiring. In the EU/UK (IEC), Brown is Live (230V AC). If you use a brown wire for your ESP32's 3.3V VCC out of habit, a future maintainer might trace it to a mains relay and assume it's high voltage, or worse, accidentally cross it with a true mains line.
| Function | US Mains (NEC) | EU/UK Mains (IEC 60446) | Embedded DC (De-facto / EIA) |
|---|---|---|---|
| Line / Positive | Black (120V) / Red (240V) | Brown | Red (5V) / Orange (3.3V) |
| Neutral / Return | White / Grey | Blue | Black (GND) |
| Earth / Shield | Green / Bare | Green/Yellow Stripe | Bare Copper / Drain Wire |
| Signal / Data | N/A | N/A | Yellow, Green, Blue, White |
Schematic Symbols: IEEE 315 vs IEC 60617
When reading ESP32 reference schematics from Espressif's Hardware Design Guidelines, note the regional symbol differences. US-based documentation typically uses IEEE 315 symbols (e.g., a zig-zag line for resistors, a solid rectangle for logic gates). European datasheets often default to IEC 60617 (a simple rectangle for resistors, specific Boolean shapes for gates). The pinout logic remains identical, but recognizing the symbol standard prevents misidentifying a pull-up resistor as a capacitor on foreign reference designs.
Faded Markings and Safe Pin Interpretation
Cheap clone DevKit boards frequently suffer from poorly cured silkscreen that rubs off after a few weeks of bench handling. If your pin labels are faded or missing, do not guess.
Step 1: Locate Pin 1 on the bare module. If you are wiring directly to the WROOM-32 castellations, look at the top RF shield. There is a small semi-circular notch or a laser-etched dot near the top-left corner. The pad immediately below this marker is GPIO 36 (SVP). From there, the pins descend sequentially down the left side, and ascend up the right side.
Step 2: The USB Port Orientation Trick. On a standard 30-pin or 38-pin DevKit V1, hold the board so the Micro-USB or USB-C port is facing down (towards you). The left column will always start with 3V3, GND, GPIO 36, and GPIO 39 at the top. The right column will start with GND, GPIO 23, GPIO 22 at the top.
Step 3: Continuity Testing. Set your multimeter to continuity mode. With the board unpowered, probe the suspected GND pins against the metal USB port shell or the RF shield (which is grounded). A reading of < 1 ohm confirms a ground pin. Never probe for voltage on an unverified pin while the board is powered via the mains USB adapter.
Frequently Asked Questions
Which ESP32-WROOM-32 pins are strictly input-only?
GPIO 34, 35, 36 (SVP), and 39 (SVN) are physically disconnected from the output drivers on the silicon die. They can only read signals. Furthermore, they lack internal pull-up and pull-down resistors. If you wire a button or open-drain sensor to these pins, you must add an external 10kΩ pull-up resistor to 3.3V to prevent floating logic states.
Why does my analog sensor read garbage when WiFi connects?
You have wired the sensor to an ADC2 pin. The ESP32's WiFi and Bluetooth stacks use the ADC2 hardware internally to measure RF transmission power and calibrate the radio. When the radio is active, ADC2 readings will return erratic values or fail entirely. Move your analog sensor to an ADC1 pin (GPIO 32, 33, 34, 35, 36, or 39) to resolve this.
Can I use GPIO 12 for a relay on the ESP32-WROOM-32?
It is highly discouraged. GPIO 12 is a strapping pin that dictates the internal flash voltage. If your relay circuit or optocoupler pulls GPIO 12 HIGH during the boot sequence, the ESP32 will switch to 1.8V flash mode, fail to read its 3.3V memory, and boot-loop. Use GPIO 27, 26, or 25 for relays instead.
What is the maximum current draw per GPIO pin?
The absolute maximum rating per pin is 40mA, but operating at this limit causes excessive heat and voltage droop. The recommended safe continuous current is 20mA per pin. Additionally, the total combined current draw across all GPIO pins should not exceed 120mA. For driving high-current loads like LED strips or motors, always use a logic-level MOSFET (like the IRLZ44N) or a dedicated relay driver.






