The ESP32-WROOM-32E is the current production standard for Espressif’s flagship Wi-Fi/Bluetooth module, replacing the older non-E variant with improved RF performance and a 4MB external SPI flash. Because the WROOM package exposes 38 pads (with 25 usable GPIOs), memorizing the wroom esp32 pinout is impossible and unnecessary. What matters is knowing which pins control boot behavior, which are strictly inputs, and how to safely interface the module’s 3.3V logic with external sensor wiring standards.

The Core WROOM ESP32 Pinout Table

Below is the definitive reference for the ESP32-WROOM-32/32E module. This table maps the physical pin number (counting counter-clockwise from Pin 1 at the top-left when the antenna is pointing up) to the internal GPIO number and its default hardware function.

Pin #GPIODefault / Primary FunctionPractical Notes & Constraints
1GNDGroundConnect to system ground. Multiple GND pins exist; use any.
23V3Power InputStrictly 3.3V. Do not exceed 3.6V or the silicon will die.
3ENEnable (Chip On)Internal pull-up. Pull LOW to reset, HIGH to run.
4VP / 36ADC1_CH0 / RTC_GPIO0Input only. No internal pull-ups. Requires external resistor for buttons.
5VN / 39ADC1_CH3 / RTC_GPIO3Input only. Often used for Hall effect sensor internal routing.
634ADC1_CH6 / RTC_GPIO4Input only. No internal pull-ups.
735ADC1_CH7 / RTC_GPIO5Input only. No internal pull-ups.
832ADC1_CH4 / XTAL_32K_PCan drive outputs. Safe for I2C SDA or general PWM.
933ADC1_CH5 / XTAL_32K_NCan drive outputs. Safe for I2C SCL or general PWM.
1025ADC2_CH8 / DAC_1One of two true Digital-to-Analog (DAC) output pins.
1126ADC2_CH9 / DAC_2Second DAC output pin.
1227ADC2_CH7 / RTC_GPIO17General purpose I/O. Note: ADC2 conflicts with Wi-Fi.
1314ADC2_CH6 / RTC_GPIO16General purpose I/O.
1412ADC2_CH5 / MTDIStrapping Pin. Must be LOW at boot for 3.3V flash operation.
15GNDGroundSystem ground.
1613ADC2_CH4 / MTCKGeneral purpose I/O.
179U1TXD / SD_DATA2Connected to internal flash on some revisions; avoid for general use.
1810U1RXD / SD_DATA3Connected to internal flash on some revisions; avoid for general use.
1911VDD_SPI / SD_CMDSPI flash power. Never use as GPIO.
206SPI_CLK / SD_CLKIntegrated SPI flash clock. Never use as GPIO.
217SPI_Q / SD_DATA0Integrated SPI flash data. Never use as GPIO.
228SPI_D / SD_DATA1Integrated SPI flash data. Never use as GPIO.
2315ADC2_CH3 / MTDOStrapping Pin. Must be HIGH at boot for normal log output.
242ADC2_CH2 / RTC_GPIO12Strapping Pin. Must be LOW or floating at boot to enter flash mode.
250ADC2_CH1 / RTC_GPIO11Strapping Pin. Must be HIGH at boot for normal execution.
264ADC2_CH0 / RTC_GPIO10General purpose I/O. Often used for onboard LED on dev kits.
2716U2RXD / HS1_DATA4Free GPIO on WROOM (used for PSRAM on WROVER modules).
2817U2TXD / HS1_DATA5Free GPIO on WROOM (used for PSRAM on WROVER modules).
295VDD_RTC / HS1_DATA6General purpose I/O. Default VSPI Chip Select (CS).
3018HS1_DATA7 / VSPI_SCKDefault VSPI Clock pin.
3119U0RXD / VSPI_MISODefault VSPI MISO pin. Also primary UART RX.
3221SDA / I2C MasterDefault hardware I2C SDA pin for ESP32 Arduino core.
3322SCL / I2C MasterDefault hardware I2C SCL pin for ESP32 Arduino core.
3423VSPI_MOSIDefault VSPI MOSI pin.
35GNDGroundSystem ground.
361U0TXD / RTC_GPIO1Primary UART TX. Outputs boot logs at 115200 baud.
373U0RXD / RTC_GPIO2Primary UART RX. Pulled HIGH internally.
38GNDGroundSystem ground.

Rows People Get Wrong: Strapping Pins and 5V Tolerance

When debugging a dead WROOM module, 90% of the time the issue traces back to misinterpreting three specific rows in the table above. Let's break down the hardware traps that brick boot sequences and fry silicon.

The Boot-Killing Strapping Pins

The ESP32 samples specific pins during the first few milliseconds of power-on to determine its boot mode. If your external circuit fights the required boot state, the chip will hang or enter the wrong voltage mode.

  • GPIO 0 (Pin 25): Must be HIGH at boot for normal flash execution. If you wire a button to GPIO0 to ground for a 'flash mode' trigger, ensure it has a 10kΩ pull-up resistor to 3.3V. If left floating, RF noise can pull it low, causing random boot failures.
  • GPIO 2 (Pin 24): Must be LOW or floating at boot. Never connect an external pull-up resistor or an active-high sensor to this pin. If GPIO2 is high during power-on, the ESP32 will refuse to boot from the external SPI flash.
  • GPIO 12 (Pin 14 / MTDI): This is the most dangerous strapping pin. It dictates the flash voltage. On the WROOM-32E (which uses a 3.3V flash chip), GPIO12 must be LOW at boot. If you accidentally pull GPIO12 high, the ESP32 switches its internal voltage regulator to 1.8V, which will cause the 3.3V flash chip to brownout, resulting in a continuous boot loop.
  • GPIO 15 (Pin 23 / MTDO): Must be HIGH at boot for normal UART log output. If pulled low, the chip boots silently, making serial debugging impossible.

The Input-Only Illusion

GPIOs 34, 35, 36, and 39 are physically disconnected from output drivers inside the silicon. They are strictly analog/digital inputs. Furthermore, they lack internal pull-up and pull-down resistors. If you wire a momentary push-button to GPIO34 without an external 10kΩ pull-up resistor to 3.3V, the pin will float, and your code will register hundreds of phantom button presses per second.

WARNING: The 5V Tolerance Myth
Unlike the Arduino Uno (ATmega328P) which tolerates 5V on its I/O pins, the ESP32-WROOM-32E is strictly a 3.3V device. Feeding a 5V signal from a standard HC-SR04 ultrasonic sensor or a 5V Arduino directly into an ESP32 GPIO will permanently destroy the input pad. Always use a bidirectional logic level converter (like the BSS138 MOSFET circuit) or a simple resistor voltage divider (e.g., 1kΩ series, 2kΩ to ground) to step 5V signals down to a safe ~3.3V.

Sensor Wiring Standards: IEC vs. NEC vs. Old UK Color Codes

While the ESP32 operates at 3.3V DC, integrating it into home automation, industrial relay boards, or external sensor arrays means interfacing with higher-voltage DC feeds or AC mains control circuits. The wire colors you use for the external power feeds and relay control sides must follow your regional electrical standards to ensure safe maintenance and troubleshooting.

Here is how the major regional standards map to external wiring connected to ESP32-driven relay modules and industrial sensors. Never connect these AC/High-Voltage lines directly to the ESP32 GPIO pins; always use optocouplers or mechanical relay isolation.

Standard / RegionLine / Hot (Ext VCC)Neutral / Return (GND)Earth / ShieldApplication to ESP32 Projects
IEC 60446 (EU, UK, Global Industrial) Brown Blue Green/Yellow Use for M12 sensor cables and external 24V DC relay coil feeds driven by ESP32 transistors.
NEC (US / North America AC) Black (or Red) White (or Grey) Bare / Green Applies to the 120V AC side of the power supply feeding your ESP32 enclosure. Keep strictly isolated from the 3.3V DC logic side.
Old UK (Pre-2004 Legacy) Red Black Green/Yellow Found in retrofits. Caution: Old UK Black is Neutral, but in modern IEC DC wiring, Black is often used for Data or Ground. Always verify with a multimeter.
US DC Hobbyist (EIA/TIA / Maker Standard) Red Black N/A (or Shield) The universal standard for 5V/12V DC jumper wires on breadboards feeding the ESP32's VIN or external sensor VCC.

Which standard applies to you? If you are wiring the 3.3V logic side on a breadboard, use the US DC Hobbyist standard (Red=VCC, Black=GND). If you are wiring an ESP32-based controller into a 24V industrial cabinet or a 120V/230V AC relay enclosure, you must follow IEC 60446 (EU/Global) or NEC (US) for the high-voltage side to pass inspection and prevent lethal maintenance hazards. For deeper code compliance, always defer to your local Authority Having Jurisdiction (AHJ) and reference the NFPA NEC guidelines.

Safe Interpretation When Module Markings Are Faded or Missing

On the workbench, you will eventually encounter a bare ESP32-WROOM-32E module where the silkscreen on the carrier board is scratched off, or you are soldering directly to the raw module pads for a custom PCB. If the pin numbers are missing, you can safely identify the pinout using physical landmarks.

Locating Pin 1 on the Bare Module

When looking down at the raw WROOM module with the PCB antenna trace pointing straight up (away from you):

  1. The Dimple: Look at the large metal RF shield. In the top-left corner, near the edge of the PCB, there is a tiny laser-etched dimple or dot. This marks Pin 1 (GND).
  2. The Chamfered Pad: Flip the module over. The bottom copper pads are rectangular, but the pad for Pin 1 has a slightly chamfered (angled) corner or a distinct white silkscreen dot next to it on the module's substrate.
  3. Counting Sequence: Once Pin 1 is identified at the top-left, the pins count counter-clockwise. The left side runs from Pin 1 (GND) down to Pin 15 (GND). The bottom edge contains Pins 16 through 22. The right side runs from Pin 23 up to Pin 38 (GND).

Verifying with a Multimeter

If visual inspection fails due to flux residue or physical damage, use your multimeter's continuity mode.

  • Identify the large ground pour on the host PCB. Probe the pads on the module until you find the ones that beep continuous to ground. Pins 1, 15, 35, and 38 are GND.
  • Pin 2 (3V3) will typically show a diode drop (around 0.3V to 0.6V) to ground when measured in diode-test mode, due to the internal ESD protection diodes and the decoupling capacitors on the power rail.
  • For comprehensive electrical characteristics and absolute maximum ratings, always consult the official Espressif ESP32-WROOM-32E Datasheet before finalizing a custom PCB layout.

By anchoring your design to the physical realities of the strapping pins, respecting the 3.3V logic threshold, and mapping your external wiring to the correct regional color codes, you eliminate the most common hardware bugs before you even write a line of C++.