The ESP32-WROVER module features 38 physical castellated pins, but unlike the standard WROOM, GPIO 16 and GPIO 17 are internally routed to the 8MB PSRAM and cannot be used as general-purpose I/O. If you are using a WROVER DevKit (like the DevKitC V4), you will see 38 or 42 broken-out header pins. Below is the complete raw module pinout reference, followed by the hardware traps that brick most first-time builds.
Complete ESP32-WROVER Module Pinout Table
This table maps the 38 pins of the raw ESP32-WROVER-E / WROVER-IE module. If you are using a development board, the header pins map to these internal module pins, though dev boards often break out duplicate GND and 3V3 pins for convenience.
| Pin # | Name | Type | Function / Critical Notes |
|---|---|---|---|
| 1 | GND | Power | Ground reference (0V). |
| 2 | 3V3 | Power | 3.3V power input. Max draw ~500mA depending on regulator. |
| 3 | EN | Input | Chip enable. Active high. Requires external 10kΩ pull-up. |
| 4 | VP (IO36) | Input | ADC1_CH0. Input only. No internal pull-up. |
| 5 | VN (IO39) | Input | ADC1_CH3. Input only. No internal pull-up. |
| 6 | IO34 | Input | ADC1_CH6. Input only. No internal pull-up. |
| 7 | IO35 | Input | ADC1_CH7. Input only. No internal pull-up. |
| 8 | IO32 | I/O | ADC1_CH4, Touch9, XTAL_32K_N. |
| 9 | IO33 | I/O | ADC1_CH5, Touch8, XTAL_32K_P. |
| 10 | IO25 | I/O | ADC2_CH8, DAC1. |
| 11 | IO26 | I/O | ADC2_CH9, DAC2. |
| 12 | IO27 | I/O | ADC2_CH7, Touch7. |
| 13 | IO14 | I/O | ADC2_CH6, Touch6, MTMS. |
| 14 | IO12 | I/O | Strapping Pin. ADC2_CH5, Touch5, MTDI. |
| 15 | GND | Power | Ground reference (0V). |
| 16 | IO13 | I/O | ADC2_CH4, Touch4, MTCK. |
| 17 | SD2 (IO9) | I/O | Internal SPI Flash data pin. Do not use. |
| 18 | SD3 (IO10) | I/O | Internal SPI Flash data pin. Do not use. |
| 19 | CMD (IO11) | I/O | Internal SPI Flash command pin. Do not use. |
| 20 | CLK (IO6) | I/O | Internal SPI Flash clock pin. Do not use. |
| 21 | SD0 (IO7) | I/O | Internal SPI Flash data pin. Do not use. |
| 22 | SD1 (IO8) | I/O | Internal SPI Flash data pin. Do not use. |
| 23 | IO15 | I/O | Strapping Pin. ADC2_CH3, Touch3, MTDO. |
| 24 | IO2 | I/O | Strapping Pin. ADC2_CH2, Touch2. Must be LOW to boot from flash. |
| 25 | IO0 | I/O | Strapping Pin. ADC2_CH1, Touch1. LOW enters download mode. |
| 26 | IO4 | I/O | ADC2_CH0, Touch0. |
| 27 | IO16 | I/O | PSRAM Reserved. Routed to external PSRAM CS/CLK on WROVER. |
| 28 | IO17 | I/O | PSRAM Reserved. Routed to external PSRAM data on WROVER. |
| 29 | IO5 | I/O | Strapping Pin. VSPI_SS, boot log output. |
| 30 | IO18 | I/O | VSPI_SCK. |
| 31 | IO19 | I/O | VSPI_MISO. |
| 32 | NC | None | No connection internally. |
| 33 | IO21 | I/O | Default I2C SDA. |
| 34 | RXD0 (IO3) | I/O | Default UART0 RX. Used for serial monitor. |
| 35 | TXD0 (IO1) | I/O | Default UART0 TX. Used for serial monitor. |
| 36 | IO22 | I/O | Default I2C SCL. |
| 37 | IO23 | I/O | VSPI_MOSI. |
| 38 | GND | Power | Ground reference (0V). |
Rows People Get Wrong (The Strapping & PSRAM Traps)
When transitioning from a WROOM to a WROVER, or moving from a breadboard prototype to a custom PCB, builders consistently fall into three hardware traps. Understanding these prevents the dreaded "brownout detector was triggered" serial error.
The PSRAM Trap: GPIO 16 and 17
On the standard ESP32-WROOM, GPIO 16 and 17 are free to use for UART, PWM, or digital I/O. On the WROVER, the silicon die routes these pins directly to the 8MB PSRAM chip sitting on the module's internal PCB. If you attempt to use pinMode(16, OUTPUT) and toggle it, you will corrupt the PSRAM bus, leading to immediate memory allocation crashes or a hard freeze. Treat pins 16 and 17 as non-existent on the WROVER.
The Flash Voltage Trap: GPIO 12
GPIO 12 (MTDI) is a strapping pin that dictates the internal flash VDD_SDIO voltage on boot. If GPIO 12 is pulled HIGH during reset, the ESP32 assumes the external flash is a 1.8V chip. Because almost all WROVER modules use 3.3V flash, the internal regulator drops the voltage, the flash starves, and the module enters a continuous boot loop. Never place a pull-up resistor on GPIO 12, and avoid connecting it to sensors that default HIGH on startup.
The Input-Only Illusion: GPIO 34-39
Pins 34, 35, 36 (VP), and 39 (VN) lack internal pull-up/pull-down resistors and output drivers. If you wire a button to GPIO 34 without an external 10kΩ pull-up resistor, the pin will float, generating hundreds of phantom interrupts per second. Always add physical pull-ups for these pins.
Hardware Variants & Faded Silkscreen Recovery
On the bench, you will frequently encounter WROVER modules where the white Pin 1 indicator dot or the silkscreen text has been rubbed off by flux cleaning or thermal cycling. Because reversing the power pins (applying 5V to GND or 3V3 to a GPIO) will instantly destroy the internal LDO and the silicon die, safe identification is critical.
How to identify Pin 1 without silkscreen:
- The Castellated Pad Shape: Pin 1 is the only corner pin on the bottom-left (when the RF shield is facing up and text is readable). The castellated half-hole for Pin 1 is slightly wider and forms a distinct square corner compared to the rounded inner pads.
- The RF Shield Chamfer: The metal RF can has a tiny chamfered (cut) corner. This cut corner always aligns with Pin 1.
- Multimeter Continuity Test: Set your meter to continuity. Probe the suspected Pin 1 pad and the large exposed ground pad on the bottom of the module. Pin 1, Pin 15, and Pin 38 are all tied directly to the ground plane. If you get a dead short (< 0.5Ω) to the bottom thermal pad, you have found a ground pin. Pin 2 (3V3) will show a diode drop (usually ~0.4V to 0.6V) to ground due to the internal decoupling capacitors and LDO.
ESP32 WROVER Pinout FAQ
What is the difference between the ESP32 WROVER and WROOM pinout?
Physically, the WROVER module is wider (18mm vs 18mm but longer at 31.4mm vs 25.5mm) to accommodate the PSRAM chip. Electrically, the pinout is nearly identical, except GPIO 16 and GPIO 17 are consumed by the PSRAM on the WROVER. Additionally, the WROVER draws more peak current (up to ~240mA during heavy TX + PSRAM access) compared to the WROOM, requiring a robust 3.3V LDO (like the AMS1117-3.3 or AP2112K-3.3) capable of 600mA+ on your custom carrier board.
Can I use GPIO 16 and 17 for standard I/O on the WROVER?
No. On the WROVER, these pins are hardwired to the external PSRAM die inside the metal can. Attempting to use them for standard I/O will cause bus contention, corrupt your heap allocations, and trigger a Guru Meditation Error: Core 1 panic'ed (Cache disabled but cached memory region accessed) in the serial monitor. Use GPIO 13, 14, or 15 instead.
Why does my WROVER fail to boot when GPIO 12 is connected to a sensor?
GPIO 12 is a strapping pin that selects the internal flash voltage regulator. If your sensor pulls GPIO 12 HIGH during the first 100ms of boot, the ESP32 switches the flash VDD to 1.8V. Since the WROVER uses 3.3V flash, the chip starves and resets. Fix this by adding a 10kΩ pull-down resistor on GPIO 12, or rewire the sensor to a non-strapping pin like GPIO 27 or 33.
How do I safely probe WROVER pins if the module markings are completely missing?
Never apply power until you have verified Pin 1 and Pin 2. Use a multimeter in continuity mode to find the ground pins (1, 15, 38) by checking against the bottom thermal pad. Once ground is established, identify Pin 2 (3V3) by checking for a ~0.5V diode drop to ground. Apply 3.3V to Pin 2 and Ground to Pin 1. If the module draws a baseline current of ~20mA and the onboard regulator does not overheat, you have the orientation correct. For detailed hardware design rules, always consult the Espressif Hardware Design Guidelines.
For the exact electrical characteristics and timing diagrams of the WROVER-E series, refer to the official ESP32-WROVER-E Datasheet.






