ESP32-WROOM-32E: Your Gateway to IoT and Beyond
A powerful and versatile Wi-Fi and Bluetooth enabled microcontroller module perfect for a wide range of embedded projects.

The ESP32-WROOM-32E is a compact and highly integrated module designed by Espressif Systems. It's built around the ESP32-D0WDQ6 chip, a dual-core Tensilica LX6 microprocessor, and includes built-in Wi-Fi and Bluetooth connectivity. This module is a successor to the popular ESP32-WROOM-32, offering minor improvements and a slightly different antenna design for potentially better RF performance in certain scenarios. It's a popular choice for makers, students, and professional engineers due to its low cost, extensive features, and robust community support.
At its heart, the ESP32-D0WDQ6 SoC is a powerhouse for its size and price point. It features two processing cores that can be individually controlled or run at different speeds, allowing for flexible power management. The integrated Wi-Fi (802.11 b/g/n) and Bluetooth (v4.2 BR/EDR and BLE) make it ideal for Internet of Things (IoT) applications, enabling devices to connect to networks and communicate wirelessly with other devices or cloud services.
The ESP32-WROOM-32E sits as a mainstream offering within Espressif's ESP32 family. While there are more specialized variants (like the ESP32-S2 or ESP32-S3 with USB OTG or AI acceleration, or the ESP32-C3 with RISC-V and Wi-Fi 4), the WROOM-32E remains a go-to for general-purpose projects requiring reliable wireless communication and a good balance of processing power and I/O. Its history is rooted in the success of the original ESP32, refining the module design and antenna placement for broader compatibility and performance.
This module is exceptionally well-suited for makers who want to build connected devices, from smart home sensors and controllers to robotics and data logging systems. Its dual-core nature allows for complex tasks to be handled efficiently, while the extensive peripherals mean you can interface with a wide array of sensors and actuators. Beginners will appreciate the ease of use with platforms like the Arduino IDE, while experienced engineers can leverage the full power of the ESP-IDF for highly optimized applications.
Watch
Related video, embedded from YouTube.
Specifications
| Microcontroller / SoC | ESP32-D0WDQ6 |
| Architecture | Dual-core Tensilica LX6 microprocessor |
| Clock speed | Up to 240 MHz |
| Flash / Storage | 4MB onboard SPI flash (typically) |
| RAM / SRAM | 520 KB SRAM |
| Operating voltage | 3.0V - 3.6V (typically 3.3V) |
| Digital I/O pins | Up to 34 GPIO pins (depending on module configuration and usage) |
| Analog / ADC | 12-bit SAR ADCs (up to 18 channels) |
| PWM | Up to 16 channels (General Purpose PWM) |
| Connectivity | Wi-Fi 802.11 b/g/n, Bluetooth v4.2 BR/EDR and BLE |
| USB | โ (UART via USB-to-Serial converter on development boards) |
| Power input | Typically 5V via micro-USB or VIN pin on development boards; module operates at 3.3V |
| Dimensions | 18.0mm x 25.5mm x 2.8mm (module itself) |
Pinout & pin functions
| Pin | Function |
|---|---|
| 3V3 | Power output (regulated 3.3V) |
| GND | Ground |
| EN | Enable pin (active high) |
| GPIO34 | Input only, ADC1_CH6 |
| GPIO35 | Input only, ADC1_CH7 |
| GPIO36 | Input only, ADC1_CH0 (VP) |
| GPIO39 | Input only, ADC1_CH3 (VN) |
| GPIO32 | GPIO, ADC1_CH4 |
| GPIO33 | GPIO, ADC1_CH2 |
| GPIO25 | GPIO, DAC_1, ADC1_CH8 |
| GPIO26 | GPIO, DAC_2, ADC1_CH9 |
| GPIO27 | GPIO, ADC1_CH5 |
| GPIO14 | GPIO, HSPI_CLK |
| GPIO12 | GPIO, HSPI_MISO, ADC1_CH5 |
| GPIO13 | GPIO, HSPI_MOSI, ADC1_CH4 |
| GPIO15 | GPIO, HSPI_CS, ADC1_CH3 |
| GPIO2 | GPIO, ADC2_CH2 |
| GPIO4 | GPIO, ADC2_CH4 |
| GPIO0 | GPIO, Boot button input, ADC2_CH1 |
| GPIO16 | GPIO, RXD2 |
| GPIO17 | GPIO, TXD2 |
| GPIO5 | GPIO, VSPI_CS |
| GPIO18 | GPIO, VSPI_SCK |
| GPIO19 | GPIO, VSPI_MISO |
| GPIO21 | GPIO, VSPI_MOSI, I2C SDA |
| GPIO22 | GPIO, VSPI_SCK, I2C SCL |
| GPIO23 | GPIO, VSPI_MOSI, ADC1_CH5 |
| GPIO6 | Internal SPI Flash CS |
| GPIO7 | Internal SPI Flash D0 |
| GPIO8 | Internal SPI Flash D1 |
| GPIO9 | Internal SPI Flash D2 |
| GPIO10 | Internal SPI Flash D3 |
| GPIO11 | Internal SPI Flash CLK |
| TX0 | UART0 TXD (connected to USB-to-Serial) |
| RX0 | UART0 RXD (connected to USB-to-Serial) |
| ADC1_CH0 | (GPIO36) |
| ADC1_CH2 | (GPIO33) |
| ADC1_CH3 | (GPIO39, GPIO15) |
| ADC1_CH4 | (GPIO32, GPIO13) |
| ADC1_CH5 | (GPIO33, GPIO23, GPIO27) |
| ADC1_CH6 | (GPIO34) |
| ADC1_CH7 | (GPIO35) |
| ADC1_CH8 | (GPIO25) |
| ADC1_CH9 | (GPIO26) |
| ADC2_CH0 | โ |
| ADC2_CH1 | (GPIO0) |
| ADC2_CH2 | (GPIO2) |
| ADC2_CH3 | โ |
| ADC2_CH4 | (GPIO4) |
| ADC2_CH5 | โ |
| ADC2_CH6 | โ |
| ADC2_CH7 | โ |
| I2C SDA | GPIO21 |
| I2C SCL | GPIO22 |
| SPI MOSI | GPIO23 (VSPI), GPIO13 (HSPI) |
| SPI MISO | GPIO19 (VSPI), GPIO12 (HSPI) |
| SPI SCK | GPIO18 (VSPI), GPIO14 (HSPI) |
| SPI CS | GPIO5 (VSPI), GPIO15 (HSPI) |
| UART0 TX | GPIO1 |
| UART0 RX | GPIO3 |
| UART2 TX | GPIO17 |
| UART2 RX | GPIO16 |
Wiring & circuit basics
Powering the ESP32-WROOM-32E module requires careful attention to voltage levels. The module itself operates at 3.3V. Most development boards featuring the WROOM-32E will have a voltage regulator to step down a 5V input (usually from a USB port or a VIN pin) to the required 3.3V. Always use the provided USB port or the designated VIN pin for power. Avoid directly supplying 5V to the 3V3 pin, as this will likely damage the module. Ensure your power supply can provide at least 500mA, especially when Wi-Fi or Bluetooth is actively transmitting, to prevent brownouts and ensure stable operation.
All GPIO pins on the ESP32 operate at 3.3V logic levels. This means they are incompatible with standard 5V logic devices without a level shifter. Connecting a 5V output directly to an ESP32 input pin can damage the microcontroller. When interfacing with 5V devices, use a bi-directional logic level converter or a voltage divider for inputs. For outputs from the ESP32 to 5V devices, a simple transistor circuit can be used to switch the higher voltage.
A common beginner project is to control an LED. To do this, connect a digital output pin (e.g., GPIO2) to the anode (longer leg) of an LED. Connect the cathode (shorter leg) of the LED to one end of a current-limiting resistor (typically 220-330 Ohms for a standard LED). Connect the other end of the resistor to a GND pin on the ESP32. When you set GPIO2 HIGH (3.3V), current flows through the resistor and LED to ground, turning it on. Setting GPIO2 LOW (0V) turns the LED off.
Programming & getting started
The ESP32-WROOM-32E is exceptionally well-supported across several popular development environments. For beginners and rapid prototyping, the Arduino IDE is an excellent choice. After installing the ESP32 board support package, you can write C++ code using familiar Arduino functions. MicroPython and CircuitPython also offer Python-based programming, which is more beginner-friendly and allows for dynamic code updates. For advanced users and production environments, Espressif's official ESP-IDF (Espressif IoT Development Framework) provides the most control and optimization, using C/C++ and FreeRTOS.
To upload your first program using the Arduino IDE: 1. Install the Arduino IDE. 2. Go to File > Preferences and add 'https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json' to the Additional Boards Manager URLs. 3. Go to Tools > Board > Boards Manager, search for 'esp32', and install the ESP32 package by Espressif Systems. 4. Select your ESP32-WROOM-32E board (e.g., 'ESP32 Dev Module') from the Tools > Board menu. 5. Connect your ESP32 board to your computer via USB. 6. Select the correct COM port from the Tools > Port menu. 7. Write your code (e.g., a simple 'Blink' sketch) and click the Upload button.