ESP32-WROOM-32D: Your Gateway to Powerful IoT Projects
A versatile and cost-effective development board featuring Espressif's popular ESP32 chip, ideal for Wi-Fi and Bluetooth enabled embedded applications.

The ESP32-WROOM-32D is a highly integrated Wi-Fi and Bluetooth System-on-Chip (SoC) module designed by Espressif Systems. It's built around the ESP32, a dual-core Tensilica Xtensa LX6 microprocessor, offering a robust platform for a wide range of embedded applications. This module is a successor to the ESP8266, providing significantly more processing power, peripherals, and advanced connectivity options, making it a favorite among hobbyists, students, and professional engineers alike.
At the heart of the ESP32-WROOM-32D is the ESP32 chip itself, which boasts two processing cores, a dedicated ULP (Ultra-Low Power) co-processor, and a rich set of peripherals including ADCs, DACs, touch sensors, SPI, I2C, UART, and more. The 'WROOM-32D' designation specifically refers to a module that includes the ESP32 chip, a flash memory (typically 4MB), and an antenna, all integrated onto a compact PCB. The 'D' variant often indicates specific antenna characteristics or manufacturing revisions.
Released around 2018, the ESP32-WROOM-32D quickly became a de facto standard for makers venturing into IoT projects. Its combination of Wi-Fi, Bluetooth (Classic and BLE), ample processing power, and a generous array of GPIO pins at an affordable price point made it an attractive alternative to more expensive microcontrollers. It excels in applications requiring wireless communication, sensor data logging, smart home devices, and complex control systems.
This board is particularly well-suited for makers who need to connect their projects to the internet or communicate wirelessly with other devices. Whether you're building a weather station that reports data online, a remote-controlled robot, or a custom smart home hub, the ESP32-WROOM-32D provides the necessary hardware and flexibility. Its dual-core nature also allows for more complex tasks to be handled concurrently, such as running a web server while simultaneously processing sensor inputs.
Watch
Related video, embedded from YouTube.
Specifications
| Microcontroller / SoC | ESP32-D0WD (Dual-core Tensilica Xtensa LX6) |
| Architecture | 32-bit LX6 |
| Clock speed | Up to 240 MHz |
| Flash / Storage | 4 MB (on-module) |
| RAM / SRAM | 520 KB SRAM |
| Operating voltage | 3.0 - 3.6 V (typically 3.3 V) |
| Digital I/O pins | Up to 34 |
| Analog / ADC | 12-bit SAR ADCs (up to 18 channels) |
| PWM | Up to 16 channels (LED PWM, timer-based) |
| Connectivity | Wi-Fi 802.11 b/g/n, Bluetooth v4.2 BR/EDR and BLE |
| USB | None directly on module (requires external USB-to-UART converter for programming) |
| Power input | Typically via 3.3V pin or USB-to-UART adapter's 5V input (regulated on-board) |
| Dimensions | 24 x 16 x 3 mm (module) |
Pinout & pin functions
| Pin | Function |
|---|---|
| 3V3 | 3.3V Power Output |
| GND | Ground |
| EN | Enable Pin (High for operation) |
| GPIO0 | Boot Mode Selection (Low during boot for flashing) |
| GPIO1 (TXD0) | UART0 Transmit |
| GPIO2 | General Purpose I/O, strapping pin |
| GPIO3 (RXD0) | UART0 Receive |
| GPIO4 | General Purpose I/O |
| GPIO5 | General Purpose I/O, strapping pin |
| GPIO12 (MTDI) | General Purpose I/O, strapping pin (Low during boot for 40MHz flash clock) |
| GPIO13 | General Purpose I/O, ADC2_CH4 |
| GPIO14 | General Purpose I/O, SPI2 CLK |
| GPIO15 | General Purpose I/O, strapping pin (High during boot for flash voltage) |
| GPIO16 (RXD2) | UART2 Receive |
| GPIO17 (TXD2) | UART2 Transmit |
| GPIO18 | General Purpose I/O, SPI2 MOSI |
| GPIO19 | General Purpose I/O, SPI2 MISO, I2S0 WS |
| GPIO21 | General Purpose I/O, I2C SDA |
| GPIO22 | General Purpose I/O, I2C SCL |
| GPIO23 | General Purpose I/O, SPI2 SCK, I2S0 MCK |
| GPIO25 | General Purpose I/O, DAC1, ADC1_CH8 |
| GPIO26 | General Purpose I/O, DAC2, ADC1_CH9 |
| GPIO27 | General Purpose I/O, ADC1_CH7 |
| GPIO32 | General Purpose I/O, ADC1_CH4 |
| GPIO33 | General Purpose I/O, ADC1_CH2 |
| GPIO34 | Input Only, ADC1_CH6 |
| GPIO35 | Input Only, ADC1_CH5 |
| VP (GPIO36) | ADC1_CH0 |
| VN (GPIO39) | ADC1_CH3 |
Wiring & circuit basics
The ESP32-WROOM-32D operates at a logic level of 3.3V. Connecting 5V devices directly to its GPIO pins can cause permanent damage. If you need to interface with 5V components, use a logic level shifter or a voltage divider for inputs. Powering the module is typically done via the 3V3 pin, which should receive a stable 3.3V supply capable of at least 500mA, or via the VIN/5V pin on development boards that include a 5V input and an onboard 3.3V regulator.
When powering the module, ensure your power supply can handle the peak current draw, especially when Wi-Fi or Bluetooth is active, which can surge up to 300-400mA. A common beginner mistake is using a weak power source that causes brownouts and unpredictable behavior. For simple LED projects, connect the LED's anode to a GPIO pin through a current-limiting resistor (e.g., 220-330 ohms) and the cathode to GND. This ensures the LED doesn't draw too much current from the GPIO.
For more complex peripherals like I2C sensors (e.g., an MPU6050 accelerometer), connect the sensor's VCC to the ESP32's 3V3 pin, GND to GND, SDA to GPIO21, and SCL to GPIO22. Remember to include pull-up resistors (typically 4.7k ohm) on both the SDA and SCL lines, connecting them to the 3V3 power rail, as required by the I2C protocol. Always consult the datasheet of any external component before wiring.
Programming & getting started
The ESP32-WROOM-32D is widely supported by various development environments. The most popular for beginners is the Arduino IDE, which can be configured to support ESP32 boards by installing the ESP32 board package via the Board Manager. This allows you to write C++ code using familiar Arduino libraries. Alternatively, MicroPython and CircuitPython offer Python-based programming, which can be easier for those new to embedded systems.
For flashing your first program, you'll typically need a USB-to-TTL serial adapter (like a CP2102 or FTDI adapter). Connect the adapter's TX to the ESP32's RXD0 (GPIO3), RX to TXD0 (GPIO1), GND to GND, and 3.3V (if the adapter provides it and you're powering the ESP32 through it). To enter bootloader mode for flashing, hold down the 'BOOT' or 'FLASH' button (often GPIO0 connected to a button) while pressing and releasing the 'RESET' button, then release the 'BOOT' button. Upload your sketch through the Arduino IDE or your chosen tool.