Board

ESP32-S3 simulator, on an Xtensa LX7 core

Mokxi models the ESP32-S3-DevKitC-1: an ESP32-S3-WROOM-1 with its Xtensa LX7 at 240 MHz, the GPIO matrix, IO MUX, UART0, the chip’s own USB serial port, SYSTIMER, ADC1, the LEDC PWM controller and the RMT that drives the board’s RGB LED, at the addresses in Espressif’s technical reference manual. One core, not two, and no radio (WiFi here is simulated, and says so), and the contract says which numbers were checked and which are believed.

Sign up free
  • 9peripheral areas modeled
  • 6projects ready to run
  • Real timeon your own machine
ESP32-S3-DevKitC-1: blinklive0.000 s 0.00x
Click to open it in the editor
The board is running real firmware right now. Click it to open the circuit in the editor.
The model

What is modeled

Taken from the board's own contract document and put in plain words, with what is missing listed underneath.

Core
Xtensa LX7 in the windowed ABI: for everything the compiler emits it is the LX6’s instruction set, with the S3’s own interrupt levels. One instruction per cycle at 240 MHz
Memory
416 KB of SRAM1 seen through both buses, at 0x4037_8000 for code and 0x3FC8_8000 for data, the same bytes, and SRAM2 after it
GPIO matrix and IO MUX
GPIO 0 to 48 with the real two-register split, the manual’s reset pulls on every pad, and the function table that makes 26 to 32 the flash
UART0 and USB serial
UART0 paced at the configured baud rate, and the USB Serial/JTAG port a 64-byte packet at a time; the serial monitor hears both
SYSTIMER
Unit 0 at 16 MHz behind millis() and micros(); delay() parks the core on CCOMPARE0 rather than spinning
ADC1
Twelve bits on ten channels, GPIO 1 to 10, with the four attenuations
LEDC
Eight channels and four timers on any pin, with the update bits the S3 needs, behind analogWrite, ledcAttach and ledcWrite
RMT and the RGB LED
Four transmit channels with their RAM, wrap mode and carrier; rgbLedWrite sends a WS2812 frame and the board’s LED on GPIO48 (GPIO38 on v1.1) lights with it
WiFi, simulated
WiFi.h, HTTPClient.h and WebServer.h over a network written in software: no radio, no 802.11, no real internet

Not in the model

  • A radio of any kind. There is no 802.11 and no Bluetooth in the model. WiFi is simulated instead, and every page that mentions it says so.
  • The second core. A real S3 has two LX7 cores; this model runs core 0, so anything that starts a task on core 1 will not run.
  • The FPU and the S3’s vector instructions: both fault rather than returning a wrong number, and the runtime is soft float.
  • SRAM0, the cache, flash and PSRAM, the RTC and the ULP coprocessors, deep sleep, ADC2, the touch sensor, the timer groups, and the I2C and SPI controllers (Wire and SPI here are software on ordinary pins, as on every board).
  • A few numbers are this model’s belief rather than a page of the manual: the UART clock divider’s plus one, the RMT RAM’s layout per channel, the carrier’s phase, the USB packet timing and the ADC’s full scale. Section 6 of the contract names every one.
Start here

Open one and press Run

Each of these opens in the editor exactly as it is drawn here.

Projects

Every built-in project on the ESP32-S3-DevKitC-1

Each has its own page with the circuit running, the code and a parts list.

Questions

Is it free?

Yes. Every board and every part is on the free plan, with no account needed.

Can I compile my own sketch for it?

Yes. Edit the sketch and press Run: it compiles in the tab with clang for Xtensa, and the build panel shows every step. Nothing is uploaded. Floating-point math is the one thing to avoid: this model has no FPU, so a float multiply faults rather than returning a wrong number.

Which revision is it, v1.0 or v1.1?

Either: the board’s revision property picks. The only difference Espressif lists is the RGB LED, on GPIO48 on the first boards and on GPIO38 on v1.1. The examples are built for GPIO48, as the Arduino core’s board definition is, so on a v1.1 the LED stays dark, as it would on a desk.

Which port is Serial on?

UART0, the "UART" socket with the USB-to-UART bridge, which is what Serial is in the Arduino core with USB CDC On Boot off. USBSerial is the chip’s own USB port. The serial monitor here listens to both.

Does it simulate WiFi or Bluetooth?

Bluetooth, no. WiFi, yes: simulated, and it says plainly that it is. Your sketch uses the real Arduino calls, and underneath there is no radio, no 802.11 and no real internet.

Why does my potentiometer read 4095 before the end of its travel?

Because the datasheet’s range at the default 12 dB attenuation ends at 2.9 V and your rail is 3.3 V. This model reads 4095 from 2.9 V up, and says in its contract that a real part keeps a little more headroom.

Does it run both cores?

One. Core 0 runs; there is no second core and no FreeRTOS to schedule across them, so a setup()/loop() sketch is fine and xTaskCreatePinnedToCore is not.

Also here

The other boards

Every one of these runs today, and every one is free.

Looking for the shorter introduction? See the ESP32-S3 simulator page.

ESP32-C3-DevKitM-1
runs now
A RISC-V core at 160 MHz with GPIO, UART, the SYSTIMER, a twelve-bit ADC on GPIO 0 to 4 and LEDC PWM on any pin, on the real memory map.
Firmware for the modeled peripherals uses the board’s memory map. The contract also marks register addresses inside the SAR ADC and LEDC that are still unverified.
Open the board page
Arduino Uno R3
runs now
A complete ATmega328P, with three timers in every mode, USART0, the ADC, interrupts and sleep.
Blink, serial, a held button and a hardware PWM fade, at 16 MHz and real time.
Open the board page
Arduino Nano
runs now
The Uno's ATmega328P on a board 45 by 18 mm, so it pushes into the breadboard instead of standing beside it.
Two more analog inputs than an Uno, and the same firmware runs on both.
Open the board page
Arduino Mega 2560
runs now
The big Arduino: fifty-four digital pins, sixteen analog inputs and four serial ports, on the ATmega2560.
Everything an Uno sketch knows how to do, with enough pins left over to do it to twelve things at once.
Open the board page
Arduino Leonardo
runs now
An Uno-shaped board whose USB goes to the chip itself: Serial is a USB CDC endpoint and Serial1 is pins 0 and 1.
The ATmega32U4 with its ten-bit timer, fourteen ADC channels and five external interrupts, at 16 MHz.
Open the board page
ESP32-C6-DevKitC-1
runs now
A second RISC-V board: thirty-one GPIOs, 512 KB of SRAM in one window, UART0, the SYSTIMER, a twelve-bit ADC on GPIO 0 to 6 and LEDC PWM on any pin.
The contract says plainly which addresses come from the manual, which are believed rather than verified, and what is not modeled at all.
Open the board page
ESP32 DevKit V1
runs now
The classic ESP32 on an Xtensa LX6 at 240 MHz: the GPIO matrix, UART0, timer group 0, a twelve-bit ADC1 and the eight LEDC PWM channels, on the real memory map.
One core where the chip has two, no radio and no FPU. Your own sketch compiles in the tab.
Open the board page
ESP8266 NodeMCU V1.0
runs now
The Xtensa LX106 at 80 MHz in the call0 ABI, with D0 to D8 that are not GPIO numbers, two active-low LEDs, and PWM done in software because the chip has none.
WiFi uses a simulated network, with no radio or real internet. The ADC is the one block whose registers are this model’s own, because Espressif never published the chip’s.
Open the board page
Raspberry Pi Pico
runs now
RP2040 on our own ARMv6-M core, with SIO GPIO, the 1 MHz timer and alarms, UART0 and eight PWM slices.
Blink, a button, serial and a fade at real time, with sleep parked on WFI.
Open the board page
Raspberry Pi Pico W
runs now
The same RP2040 and the same forty pins as the Pico, so the same ELF runs on it.
The CYW43439 is not modeled. WiFi uses a simulated network, and the on-board LED is driven through the board runtime rather than GP25.
Open the board page
Seeed XIAO SAMD21
runs now
A thumbnail-sized Cortex-M0+ at 48 MHz: eleven pads, every one of them an analog input, with PWM on ten of them.
Serial is the chip’s own USB, modeled as a byte pipe with no stack above it, and Serial1 is a real USART on D6 and D7.
Open the board page
BBC micro:bit V2
runs now
The nRF52833 on our own Cortex-M4 core at 64 MHz, with GPIO, GPIOTE, three TIMERs, RTC0 and UARTE0 on the real register map.
The 5x5 LED matrix scanned as the hardware scans it, buttons A and B, the speaker and three rings on the edge connector.
Open the board page
ATtiny85
runs now
A whole microcontroller in an 8-pin DIP, straight into the breadboard: six I/O, two timers, an ADC and a USI.
Blink, a button on INT0, a knob on the ADC and a serial port it bit-bangs for itself.
Open the board page
STM32F411 Black Pill
runs now
Cortex-M4 with Thumb-2, NVIC and SysTick at 84 MHz, with GPIO, TIM2 to TIM5 and USART1 on the real register map.
Blink on PC13, a button, serial and a PWM fade, all at real time.
Open the board page
STM32 Blue Pill (F103)
runs now
Cortex-M3 at 72 MHz, with GPIO on the F1’s CRL and CRH, TIM1 to TIM4, USART1 and a twelve-bit ADC.
Blink on PC13, a button, serial with a live reading, and a PWM fade, all at real time.
Open the board page
Arduino Uno R4 Minima
runs now
Renesas RA4M1, Arm Cortex-M4 at 48 MHz, in an Uno’s shape and on an Uno’s 5 V pins. Modeled: the PFS port block, GPT PWM on the six tilde pins, SCI2 as Serial1 on D0 and D1, and a fourteen-bit ADC that analogRead reads ten bits of.
Not modeled: a USB stack (Serial is a byte pipe with no enumeration behind it), the ICU, so there is no attachInterrupt, and the AGT. The contract says plainly which addresses come from the manual and which are believed rather than verified.
Open the board page
Arduino Pro Mini
runs now
The Uno’s ATmega328P on the smallest Arduino there is, with no USB on it, in both builds: 5 V at 16 MHz and 3.3 V at 8 MHz.
The 3.3 V board really runs at 8 MHz, so a sketch built for 16 MHz keeps half time on it, as it does on the bench.
Open the board page
Arduino Micro
runs now
The Leonardo’s ATmega32U4 on a board that pushes into a breadboard, with the L LED on pin 13 and the SPI pins on holes of their own.
Serial is the chip’s own USB and Serial1 is pins 0 and 1, and the Leonardo’s programs run on it unchanged.
Open the board page
SparkFun Pro Micro
runs now
The ATmega32U4 in a Pro Mini’s footprint with a USB socket on the end, running the Leonardo’s programs.
No LED on pin 13: its lamps are RX and TX, lit by pulling their pins low.
Open the board page
Wemos D1 mini
runs now
The NodeMCU’s ESP8266 on a board a third the size, with the same D0 to D8 names and only the holes that do something.
WiFi on a simulated network, and your own sketch compiles in the tab.
Open the board page
ESP-01S
runs now
An ESP8266 with eight pins, four of them GPIO, and a blue LED that lights when its pin is low.
Wired with jumpers, because its two rows will not sit in a breadboard. WiFi is simulated.
Open the board page
Seeed XIAO ESP32-C3
runs now
The ESP32-C3 at 160 MHz on the XIAO’s thumbnail outline: fourteen pads, and D0 to D10 that are the XIAO’s numbers, not GPIOs.
No user LED to blink, WiFi on a simulated network, and sketches that compile in the tab.
Open the board page
ESP32-C3 SuperMini
runs now
The smallest ESP32-C3 board in common use, sixteen pins named by GPIO, at 160 MHz.
Its blue LED on GPIO 8 lights when the pin is LOW, the other way around from the DevKit’s.
Open the board page
Arduino Uno R4 WiFi
runs now
The Uno R4’s RA4M1 with a 12 x 8 LED matrix to draw on through Arduino_LED_Matrix.h.
WiFi through WiFiS3.h on a simulated network: no radio, no ESP32-S3 in the model, no real internet.
Open the board page

Try it on your own firmware

What you build here runs on the board on your desk, unchanged. Nothing to install and no account needed.