ESP32-WROOM

Compact Wi-Fi and Bluetooth module based on the ESP32-D0WDQ6 chip, suitable for integration into various embedded systems.

ESP32-WROOM board
25.5 × 18 mm
ESP32
MCU
240MHz
clock
4MB
flash
520KB
SRAM
32· 16 ADC
GPIO
BLE 4.2+ WiFi
radio
On this page

ESP32-WROOM Pinout

35 pins
ESP32-WROOM pinout diagram
PinGPIOLabelsStatusCapabilitiesNotes
136SENSOR_VPGPIO36strappingadcADC1_CH0, RTC_GPIO0
239SENSOR_VNGPIO39strappingadcADC1_CH3, RTC_GPIO3
334IO34GPIO34strappingadcADC1_CH6, RTC_GPIO4
435IO35GPIO35strappingadcADC1_CH7, RTC_GPIO5
532IO32GPIO32safeadc · touchXTAL_32K_P (32.768 kHz crystal oscillator input), ADC1_CH4, TOUCH9, RTC_GPIO9
633IO33GPIO33safeadc · touchXTAL_32K_N (32.768 kHz crystal oscillator output), ADC1_CH5, TOUCH8, RTC_GPIO8
725IO25GPIO25safeadc · dacDAC_1, ADC2_CH8, RTC_GPIO6, EMAC_RXD0
826IO26GPIO26safeadc · dacDAC_2, ADC2_CH9, RTC_GPIO7, EMAC_RXD1
927IO27GPIO27safeadc · touchADC2_CH7, TOUCH7, RTC_GPIO17, EMAC_RX_DV
1014IO14GPIO14strappingadc · touch · spiADC2_CH6, TOUCH6, RTC_GPIO16, MTMS, HSPICLK, HS2_CLK, SD_CLK, EMAC_TXD2
1112IO12GPIO12strappingadc · touch · spiADC2_CH5, TOUCH5, RTC_GPIO15, MTDI, HSPIQ, HS2_DATA2, SD_DATA2, EMAC_TXD3
12-GNDN/Aground-Ground connection
1313IO13GPIO13strappingadc · touch · spiADC2_CH4, TOUCH4, RTC_GPIO14, MTCK, HSPID, HS2_DATA3, SD_DATA3, EMAC_RX_ER
149SHD/SD2GPIO9strappingspiSD_DATA2, SPIHD, HS1_DATA2, U1RXD
1510SWP/SD3GPIO10strappingspiSD_DATA3, SPIWP, HS1_DATA3, U1TXD
1611SCS/CMDGPIO11strappingspiSD_CMD, SPICS0, HS1_CMD, U1RTS
176SCK/CLKGPIO6strappingspiSD_CLK, SPICLK, HS1_CLK, U1CTS
187SDO/SD0GPIO7strappingspiSD_DATA0, SPIQ, HS1_DATA0, U2RTS
198SDI/SD1GPIO8strappingspiSD_DATA1, SPID, HS1_DATA1, U2CTS
2015IO15GPIO15strappingadc · touch · spiADC2_CH3, TOUCH3, MTDO, HSPICS0, RTC_GPIO13, HS2_CMD, SD_CMD, EMAC_RXD3
212IO2GPIO2strappingadc · touch · spiADC2_CH2, TOUCH2, RTC_GPIO12, HSPIWP, HS2_DATA0, SD_DATA0
220IO0GPIO0strappingadc · touchADC2_CH1, TOUCH1, RTC_GPIO11, CLK_OUT1, EMAC_TX_CLK
234IO4GPIO4safeadc · touch · spiADC2_CH0, TOUCH0, RTC_GPIO10, HSPIHD, HS2_DATA1, SD_DATA1, EMAC_TX_ER
2416IO16GPIO16safe-HS1_DATA4, U2RXD, EMAC_CLK_OUT
2517IO17GPIO17safe-HS1_DATA5, U2TXD, EMAC_CLK_OUT_180
265IO5GPIO5strappingspiVSPICS0, HS1_DATA6, EMAC_RX_CLK
2718IO18GPIO18safespiVSPICLK, HS1_DATA7
2819IO19GPIO19safespiVSPIQ, U0CTS, EMAC_TXD0
29-NCN/Asafe-No connection
3021IO21GPIO21safespiVSPIHD, EMAC_TX_EN
313RXD0GPIO3uart-U0RXD, CLK_OUT2
321TXD0GPIO1uart-U0TXD, CLK_OUT3, EMAC_RXD2
3322IO22GPIO22safespiVSPIWP, U0RTS, EMAC_TXD1
3423IO23GPIO23safespiVSPID, HS1_STROBE
35-GNDN/Aground-Ground connection
32 GPIOs broken out 13 free · 13 need care · 6 to avoid

Start with these

13 pins with no boot or system involvement
IO32IO33IO25IO26IO27IO4IO16IO17IO18IO19IO21IO22IO23

Freely assignable - no strapping, flash, USB or JTAG duties. Ideal first picks for buttons, sensors and LEDs.

Fine - with a little care

13 pins · 12 things to know
SENSOR_VPGPIO36 Input-only GPIO (no output); ADC1 channel 0, Hall sensor VP. Other

Cannot be used as output; only suitable for input (e.g., analog read).

SENSOR_VNGPIO39IO35 Input-only GPIOs with ADC1 channels - no output driver Other

Cannot be used as output; only suitable for input.

  • SENSOR_VNInput-only GPIO (no output); ADC1 channel 3, Hall sensor VN.
  • IO35Input-only GPIO (no output driver); ADC1 channel 7.
IO34 Input-only GPIO (no output driver); ADC1 channel 6. Other

Cannot be used as output (no drive capability); only suitable for analog/digital input.

IO14 JTAG mode select pin (TMS); also HSPI CLK and PWM-capable GPIO. JTAG

Used for JTAG debugging (TMS); driving it as GPIO may interfere with JTAG or produce spurious signals at boot.

IO12 Bootstrapping pin; JTAG TDI; sets flash voltage (VDD_SDIO); also HSPIQ (flash data line). Strapping

Keep LOW during boot (internal PD); pulling HIGH at reset selects 1.8V flash mode, causing flash brownout if 3.3V flash is used.

IO13 JTAG clock pin (TCK); also ADC2 channel 4 / Touch4 input. JTAG

Used for JTAG debugging (TCK); avoid using as GPIO if JTAG is needed.

IO15 Bootstrapping pin; JTAG TDO; controls UART0 boot log output; also HSPICS0 (secondary SPI CS). Strapping

Keep HIGH during boot (internal PU); if LOW on reset, bootloader log is silenced and boot mode may change.

IO2 Bootstrapping pin (must be low or floating at reset); internal pull-down. Strapping

If driven HIGH on reset (while IO0 is LOW), selects an unsupported SDIO boot mode, causing boot failure.

IO0 Bootstrapping pin (enter bootloader when low); internal pull-up. Strapping

Must be HIGH during boot for normal startup; if held LOW on reset, forces flash programming mode.

IO5 Bootstrapping pin; internal pull-up; VSPI CS0 (default SPI chip-select); acts as FSPIWP (flash write-protect) on internal-flash variants. Strapping

Must be HIGH during boot; if pulled LOW at reset, alters SDIO slave timing and may prevent normal boot.

RXD0GPIO3 Default UART0 RX pin for USB-serial programming (console input). UART

Used for receiving data from USB-UART (programming); also pulled HIGH at boot for console communication, so using as GPIO can disrupt uploads.

TXD0GPIO1 Default UART0 TX pin for USB-serial programming and console. UART

Connected to on-board USB-UART for uploading and logs; drives serial output at boot, so using as GPIO can disrupt programming or console.

Only if you know the tricks

6 pins · 4 things to know
SHD/SD2GPIO9SWP/SD3GPIO10 SPI flash/PSRAM data lines SD2 and SD3 (flash HOLD and WP) Flash

Used by internal flash/PSRAM; typically not exposed on modules, avoid using as GPIO.

  • SHD/SD2Connected to SPI flash/PSRAM data 2 (SD2, flash HOLD).
  • SWP/SD3Connected to SPI flash/PSRAM data 3 (SD3, flash WP).
SCS/CMDGPIO11 Connected to SPI flash command/CS (CMD/CS0). Flash

Used by internal flash (chip select/command); not available for general use.

SCK/CLKGPIO6 Connected to SPI flash clock (SCK/CLK). Flash

Used for internal flash/PSRAM communication; not available for general GPIO.

SDO/SD0GPIO7SDI/SD1GPIO8 SPI flash data lines SD0 and SD1 Flash

Used for internal flash/PSRAM data; not available for general GPIO.

  • SDO/SD0Connected to SPI flash data 0 (SD0).
  • SDI/SD1Connected to SPI flash data 1 (SD1).
These are recommendations, not hard rules - with the right pull-ups, timing and boot-state awareness most pins can be made to work. When in doubt, start green.

The ESP32-WROOM breaks out 35 pins in total: 32 GPIO for your project, with GND handling power.

On the analog side there are 16 ADC-capable pins for sensors and battery monitoring, 10 capacitive-touch inputs and 2 true DAC outputs.

If you want zero surprises, IO32, IO33, IO25, IO26 and 9 more are free of any such role - the safest first picks. 13 of the exposed pins carry boot-time or system duties on the ESP32 (SENSOR_VP, SENSOR_VN, IO34 and 10 more).

Getting started

flash your first firmware in ~2 minutes
Tool:
1
Connect over USB
Install your USB-serial driver (CH340 / CP210x) if no port appears. Not detected? Hold BOOT while plugging in.
2
Match & flash
Set the Tools options shown, then click Upload.
3
Verify it runs
GPIO32 toggles - wire an LED and resistor to it, or change the pin to your board's own LED.
Set these in Tools · leave everything else at default
Arduino IDE 2.x - Tools Copy
Board: "ESP32 Dev Module"▸
Flash Size: "4MB (32Mb)"▸
Flash Mode: "DIO"▸
Partition Scheme: "Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)" (default)▸
Upload Speed: "921600"▸
▸ every other Tools option - leave at default
Board: ESP32 Dev Module
Flash Size: 4MB (32Mb)
Flash Mode: DIO
Partition Scheme: Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS)
Upload Speed: 921600
Find it: Tools ▸ Board ▸ ESP32 Arduino ▸ ESP32 Dev Module
blink.ino Copy
// toggle GPIO32 - wire an LED and resistor to it
void setup() {
  pinMode(32, OUTPUT);
}
void loop() {
  digitalWrite(32, HIGH); delay(500);
  digitalWrite(32, LOW);  delay(500);
}
board to selectesp32dev⧉ copy
platformio.ini Copy
[env:esp32-wroom]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
upload_speed = 921600
Find it: PlatformIO Home ▸ Boards, search esp32dev - or type it after board =.
board to selectesp32dev⧉ copy
device.yaml Copy
esp32:
  board: esp32dev
  variant: esp32
  framework:
    type: esp-idf

# blink - GPIO32
output:
  - platform: gpio
    pin: 32
    id: led_out
light:
  - platform: binary
    name: "LED"
    output: led_out
Find it: search ESPHome's board list for esp32dev (same ids as PlatformIO).
esptool doesn't pick board settings - a prebuilt .bin already has them baked in. This is just the raw flash command.
terminal Copy
esptool.py --chip esp32 --port /dev/ttyACM0 \
  --baud 921600 write_flash 0x1000 firmware.bin
--port = your /dev/tty* (macOS/Linux) or COMx (Windows).
Build details: sketch space 1310720 B · data 327680 B · DIO

Specifications

ESP32 · 25.5 × 18 mm · vs other ESP32 chips →
Compute
MCU
ESP32
Clock
240 MHz
SRAM · Flash
520 KB · 4MB
Radio
Wi-Fi
802.11 b/g/n
Bluetooth
4.2 LE
Antenna
PCB
I/O
GPIO · ADC
32 · 16
UART · I²C · SPI
3 · 2 · 2
PWM
16 channels
Power
USB
-
Serial
-
Boot address
0x1000
Flashing
Upload · OTA
esptool_py · esp_ota
Flash · Boot mode
DIO · DIO
Sketch · Data
1.25 MB · 320 KB

Dimensions

18 mm25.5 mm
25.5 × 18 mm
The ESP32-WROOM uses esptool_py for firmware uploads, esp_ota for over-the-air (OTA) updates. Flash mode is DIO with DIO boot mode. The maximum sketch size is 1.25 MB with 320 KB available for data.

About this board

At 25.5 × 18 mm it's among the smallest boards in the whole ESP32 family.

At its core is the ESP32 - a dual-core Xtensa with both Bluetooth Classic and BLE.

32 GPIO are broken out - more than most ESP32 boards, so the pin budget is rarely the constraint.

Resources

Similar boards