ESP32 boards
| Name | Chip | Description |
|---|---|---|
| ESP32-DevKitC V4 | ESP32 | Entry-level ESP32 development board |
| ESP32 DevKit v1 | ESP32 | Popular ESP32 development board |
| ESP32-S2-DevKitM-1 | ESP32-S2 | Entry-level ESP32-S2 development board |
| Franzininho WiFi | ESP32-S2 | Board by the Franzininho Community |
| Wemos S2 mini | ESP32-S2 | Small ESP32-S2 board by Wemos |
| ESP32-S3-DevKitC-1 | ESP32-S3 | Entry-level ESP32-S3 development board |
| ESP32-C3-DevKitM-1 | ESP32-C3 | Entry-level ESP32-C3 development board |
| Rust Board ESP32-C3 | ESP32-C3 | ESP32-C3 board designed for Rust trainings |
| ESP32-C5-DevKitC-1 | ESP32-C5 | Entry-level ESP32-C5 development board |
| ESP32-C6-DevKitC-1 | ESP32-C6 | Entry-level ESP32-C6 development board |
| ESP32-H2-DevKitM-1 | ESP32-H2 | Entry-level ESP32-H2 development board |
| ESP32-P4-Preview-DevKitC-1 | ESP32-P4 | ESP32-P4 pre-release virtual evaluation board (beta) |
| XIAO ESP32-C3 | ESP32-C3 | ESP32-C3 board by Seeed Studio |
| XIAO ESP32-C6 | ESP32-C6 | ESP32-C6 board by Seeed Studio |
| XIAO ESP32-S3 | ESP32-S3 | ESP32-S3 board by Seeed Studio |
Getting Started
You can use the ESP32 simulator to run different kinds of applications:- ESP32 Arduino Core projects (including ESP-IDF projects)
- MicroPython and CircuitPython projects (examples at https://wokwi.com/micropython)
- Rust projects (see https://wokwi.com/rust)
- Custom application firmware files (e.g. applications built using the ESP-IDF)
Arduino Core
Start from the Arduino-ESP32 Project Template, or from the ESP32 Blink Example.MicroPython
Start from the MicroPython ESP32 Project Template, or from the MicroPython ESP32 Blink Example.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 Firmware
Open template
Simulator Examples
Arduino Examples
Blink
Simple LED blinking
Seven segment counter
Count on a 7-segment display
FastLED NeoPixel Blink
Control NeoPixels with FastLED
WiFi Scanning
Scan for WiFi networks
MicroPython Examples
SSD1306 Example
OLED display with MicroPython
NeoPixels
Control NeoPixels
AES256 Encryption
Hardware-accelerated encryption
WiFi Scanning
Scan for WiFi networks
ESP-IDF Examples
The following examples use the ESP-IDF functions. They are compiled using Arduino ESP32 Core:Blink using FreeRTOS API
FreeRTOS task example
Binary LED counter using FreeRTOS tasks
Multiple FreeRTOS tasks
GPIO button input + interrupts
Handle button interrupts
WiFi Example
Connect to WiFi with ESP-IDF
Sming Framework
Sming Framework Guide
Follow this guide to simulate Sming Framework projects
Simulation Features
| Peripheral | ESP32 | S2 | S3 | C3 | C6 | H2 | Notes |
|---|---|---|---|---|---|---|---|
| Processor core(s) | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| GPIO | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Interrupts supported |
| IOMUX | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| PSRAM | ✔️ | ✔️ | ✔️ | — | — | — | 4MB of external SRAM * |
| UART | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| USB | — | ✔️ | ✔️ | — | — | — | Support for UART over USB (CDC) |
| USB Serial + JTAG | — | — | ✔️ | ✔️ | ✔️ | ✔️ | Serial supported, JTAG not. |
| I2C | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Master only. 10-bit addressing not supported. |
| I2S | 🟡 | 🟡 | ❌ | ❌ | ❌ | ❌ | Implementation in progress |
| SPI | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| TWAI | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ✔️ | |
| RMT | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | ✔️ | Transmit-only, use to control WS2812 LED strips |
| LEDC PWM | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Used by analogWrite(), Servo, Buzzer, etc. |
| MCPWM | ❌ | — | ❌ | — | ❌ | ❌ | |
| PCNT | ✔️ | ✔️ | ✔️ | — | ✔️ | ✔️ | |
| DMA | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| WiFi | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | — | See the ESP32 WiFi Guide |
| Bluetooth | ❌ | — | ❌ | ❌ | ❌ | ❌ | |
| Timers | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| Watchdog | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| RTC | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | 🟡 | Only RTC Pull-up / Pull-down resistors |
| ADC | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| RNG | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Random Number Generator |
| AES Accelerator | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| SHA Accelerator | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| RSA Accelerator | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | |
| ECC Accelerator | — | — | — | — | ✔️ | ✔️ | |
| Hall Effect Sensor | ❌ | — | ❌ | — | — | — | |
| ULP Processor | ❌ | ❌ | ❌ | — | ✔️ | — | |
| GDB Debugging | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | Works with Wokwi for VS Code |
✔️ Simulated
🟡 Partial implementation/work in progress
❌ Not implemented (but if you need it, please open a feature request)
— Not available on this chip * The amount of SRAM can be customized using the “psramSize” attribute.
WiFi Simulation
See the ESP32 WiFi Guide.Advanced Usage
Flash and memory size
You can customize the size of flash and PSRAM by adding the following attributes to the chip: | Attribute | Description | Default | |-----------|------------------------------------------------------------|---------|| | flashSize | Flash size in MB. Valid values: “2”, “4”, “8”, “16”, “32”. | “4” | | psramSize | PSRAM size in MB. Valid values: “2”, “4”, “8”. | “4” | | psramType | PSRAM type. Valid values: “quad”, “octal”. | “quad” |ESP32 Custom flash size example
See how to configure custom flash size
USB CDC (Serial over USB) support
Some chips have a built-in USB CDC (Serial over USB) + JTAG peripheral. These chips include the ESP32-S3, ESP32-C3/C5/C6, and ESP32-H2. You can configure USB CDC support in Wokwi by adding the following attribute to the chip:You also need to remove any connections to the
$serialMonitor pins from the connections section in your diagram.json file.Custom Partition Table
You can specify a custom partition table by adding a “partitions.csv” file to your project. Check out the ESP32 Partition Table Guide for the exact format of this file.ESP32 Custom partition table code example
See how to use custom partition tables
Custom firmware offset
When loading a custom firmware, you can specify the offset of the firmware in the flash memory. By default, Wokwi will look at the firmware binary and try to figure out the offset automatically, based on the presence of the bootloader and the type of the chip. If Wokwi can’t figure out the offset, it will assume that your firmware is an application firmware and load it at offset 0x10000. You can specify the offset manually by adding the following attribute to the chip: | Attribute | Description | Default | |----------------|-------------------------------------------------------|---------|| | firmwareOffset | Offset of the firmware in the flash memory, in bytes. | "" |Changing the MAC address
You can change the MAC address of the WiFi interface by adding the following attribute to the chip:| Attribute | Description | Default |
|---|---|---|
| macAddress | MAC address of the WiFi interface, e.g. “24:0a:c4:12:45:56" | "24:0a:c4:00:01:10” |