Skip to main content

ESP32 Simulation

The ESP32 is a popular WiFi and Bluetooth-enabled microcontroller, widely used for IoT Projects. Wokwi simulates the ESP32, ESP32-S2 and ESP32-C3 (beta).

ESP32 boards​

NameChipDescription
ESP32 DevKit v1ESP32Popular ESP32 development board
TinyPICOESP32Small ESP32 board by UnexpectedMaker
ESP32-S2-DevKitM-1ESP32-S2Entry-level ESP32-S2 development board
Franzininho WiFiESP32-S2Board by the Franzininho Community
ESP32-C3-DevKitM-1ESP32-C3Entry-level ESP32-C3 development board
Rust Board ESP32-C3ESP32-C3ESP32-C3 board for Rust development

You can contribute additional boards by sending a pull request to wokwi-boards.

Getting Started​

You can use the ESP32 simulator in three ways:

  1. Build projects using the ESP32 Arduino Core (including ESP-IDF projects)
  2. Run MicroPython projects (also CircuitPython on the ESP32-S2)
  3. Simulate bin application files you built on your machine (e.g. using ESP-IDF)

Arduino Core​

Start from the Arduino-ESP32 Project Template, or from the ESP32 Blink Example.

If you want to use third-party Arduino libraries, add a libraries.txt file with the list of libraries that you use.

MicroPython​

Start from the MicroPython ESP32 Project Template, or from the MicroPython ESP32 Blink Example.

Note: While the simulation is running, press Ctrl+C inside the Serial Terminal to get into the MicroPython REPL. Alternatively, you can edit the Blink Example code and remove the while loop. For more information, check out the MicroPython Guide.

Custom Application (.bin) File​

Open the ESP32 custom application project template, and press "F1" in the code editor. Then choose "Load HEX File and Start Simulation…". Choose any .bin file from your computer and the simulation will start.

Simulator Examples​

Arduino Examples​

MicroPython Examples​

ESP-IDF Examples​

The following examples use the ESP-IDF functions. They are compiled using Arduino ESP32 Core:

Simulation Features​

PeripheralESP32S2C3Notes
Processor core(s)βœ”οΈβœ”οΈβœ”οΈ
GPIOβœ”οΈβœ”οΈβœ”οΈInterrupts supported
IOMUX🟑🟑🟑
PSRAMβœ”οΈβœ”οΈβ€”4MB of external SRAM
UARTβœ”οΈβœ”οΈβœ”οΈ
USBβ€”βœ”οΈβŒSupport for UART over USB (CDC)
I2Cβœ”οΈβœ”οΈβœ”οΈMaster only. 10-bit addressing not supported.
I2S❌❌❌Open for voting
SPIβœ”οΈβœ”οΈβœ”οΈ
TWAI❌❌❌
RMT🟑🟑🟑Transmit-only, use to control NeoPixels
LEDC PWMβœ”οΈβœ”οΈβœ”οΈUsed by analogWrite(), Servo, Buzzer, etc.
MCPWMβŒβ€”β€”
DMA🟑🟑❌
WiFiβœ”οΈβœ”οΈβœ”οΈSee the ESP32 WiFi Guide
BluetoothβŒβ€”βŒOpen for voting
TimersπŸŸ‘βœ”οΈβœ”οΈ
Watchdog❌❌❌
RTC🟑🟑🟑Only RTC Pull-up / Pull-down resistors
ADCβœ”οΈβœ”οΈβŒNote: analogRead() returns values up to 4095
RNGβœ”οΈβœ”οΈβ€”Random Number Generator
AES Acceleratorβœ”οΈβœ”οΈβœ”οΈ
SHA Acceleratorβœ”οΈβœ”οΈβœ”οΈ
RSA Acceleratorβœ”οΈβœ”οΈβœ”οΈ
Hall Effect SensorβŒβ€”β€”
ULP Processor❌❌❌
GDB Debugging🟑🟑🟑Only through wokwi-gdbserver

Legend:
βœ”οΈ - Simulated
🟑 - Partial implementation/work in progress
❌ - Not implemented (but if you need it, please open a feature request)
β€” - Not available on this chip

WiFi Simulation​

See the ESP32 WiFi Guide.