MakerLab
ESP32ESP32-WROOM-32E

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.

ESP32-WROOM-32E

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 / SoCESP32-D0WDQ6
ArchitectureDual-core Tensilica LX6 microprocessor
Clock speedUp to 240 MHz
Flash / Storage4MB onboard SPI flash (typically)
RAM / SRAM520 KB SRAM
Operating voltage3.0V - 3.6V (typically 3.3V)
Digital I/O pinsUp to 34 GPIO pins (depending on module configuration and usage)
Analog / ADC12-bit SAR ADCs (up to 18 channels)
PWMUp to 16 channels (General Purpose PWM)
ConnectivityWi-Fi 802.11 b/g/n, Bluetooth v4.2 BR/EDR and BLE
USBโ€” (UART via USB-to-Serial converter on development boards)
Power inputTypically 5V via micro-USB or VIN pin on development boards; module operates at 3.3V
Dimensions18.0mm x 25.5mm x 2.8mm (module itself)

Pinout & pin functions

PinFunction
3V3Power output (regulated 3.3V)
GNDGround
ENEnable pin (active high)
GPIO34Input only, ADC1_CH6
GPIO35Input only, ADC1_CH7
GPIO36Input only, ADC1_CH0 (VP)
GPIO39Input only, ADC1_CH3 (VN)
GPIO32GPIO, ADC1_CH4
GPIO33GPIO, ADC1_CH2
GPIO25GPIO, DAC_1, ADC1_CH8
GPIO26GPIO, DAC_2, ADC1_CH9
GPIO27GPIO, ADC1_CH5
GPIO14GPIO, HSPI_CLK
GPIO12GPIO, HSPI_MISO, ADC1_CH5
GPIO13GPIO, HSPI_MOSI, ADC1_CH4
GPIO15GPIO, HSPI_CS, ADC1_CH3
GPIO2GPIO, ADC2_CH2
GPIO4GPIO, ADC2_CH4
GPIO0GPIO, Boot button input, ADC2_CH1
GPIO16GPIO, RXD2
GPIO17GPIO, TXD2
GPIO5GPIO, VSPI_CS
GPIO18GPIO, VSPI_SCK
GPIO19GPIO, VSPI_MISO
GPIO21GPIO, VSPI_MOSI, I2C SDA
GPIO22GPIO, VSPI_SCK, I2C SCL
GPIO23GPIO, VSPI_MOSI, ADC1_CH5
GPIO6Internal SPI Flash CS
GPIO7Internal SPI Flash D0
GPIO8Internal SPI Flash D1
GPIO9Internal SPI Flash D2
GPIO10Internal SPI Flash D3
GPIO11Internal SPI Flash CLK
TX0UART0 TXD (connected to USB-to-Serial)
RX0UART0 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 SDAGPIO21
I2C SCLGPIO22
SPI MOSIGPIO23 (VSPI), GPIO13 (HSPI)
SPI MISOGPIO19 (VSPI), GPIO12 (HSPI)
SPI SCKGPIO18 (VSPI), GPIO14 (HSPI)
SPI CSGPIO5 (VSPI), GPIO15 (HSPI)
UART0 TXGPIO1
UART0 RXGPIO3
UART2 TXGPIO17
UART2 RXGPIO16

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.

Project ideas

Smart Home Weather StationMonitor temperature, humidity, and barometric pressure using sensors like the BME280 (connected via I2C on GPIO21/22). The ESP32-WROOM-32E publishes data wirelessly via Wi-Fi to a cloud platform (like ThingSpeak or MQTT broker), allowing you to view it remotely. This project teaches sensor interfacing, I2C communication, and Wi-Fi networking.
Bluetooth Low Energy (BLE) BeaconConfigure the ESP32-WROOM-32E to broadcast its presence as a BLE beacon. This is useful for proximity detection, asset tracking, or triggering actions on a smartphone when it comes near. It utilizes the BLE peripheral and requires understanding advertising packets.
Web-Controlled RGB LED StripDrive an addressable RGB LED strip (like WS2812B) using a digital GPIO pin. Create a simple web server on the ESP32 that allows you to control the color and patterns of the LED strip from any device on your local network via a web browser. This project combines web server development, GPIO control, and potentially a bit-banging protocol for the LED strip.
ESP32-based Robot ControllerBuild a simple wheeled robot controlled remotely. Use motor driver ICs (like L298N) connected to PWM-capable GPIO pins for motor speed control and direction. Implement Wi-Fi or Bluetooth for wireless control commands from a smartphone app or computer. This project involves motor control, PWM, and wireless communication.
IoT Data Logger with SD CardLog sensor data (e.g., from an analog soil moisture sensor connected to an ADC pin) to an SD card for offline storage. The ESP32-WROOM-32E can periodically upload this data via Wi-Fi when a connection is available. This project teaches SPI communication for the SD card and file system management.
Voice Controlled Assistant (Basic)Integrate a simple voice recognition module or use cloud-based services (via Wi-Fi) to control devices connected to the ESP32. For example, use a voice command to turn on a relay connected to a GPIO pin. This project explores audio input, cloud integration, and device control.

Buying tips & gotchas

When purchasing an ESP32-WROOM-32E, it's often easier to buy a development board (like a NodeMCU-32S or ESP32-DevKitC) which includes USB-to-serial conversion, a voltage regulator, and easily accessible pin headers. Be wary of extremely cheap clones that may use older or less reliable chip variants. Ensure your power supply is adequate; brownouts are a common pitfall when using Wi-Fi or Bluetooth heavily. For antenna performance, the 'E' variant typically uses a PCB antenna, which is generally robust, but always test in your intended environment. Accessories like breadboards, jumper wires, a logic level converter, and various sensors will greatly expand your project possibilities.