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.
- 9peripheral areas modeled
- 6projects ready to run
- Real timeon your own machine
What is modeled
Taken from the board's own contract document and put in plain words, with what is missing beside it.
Modeled
- 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, and real internet only when you sign in and switch it on
Not modeled
- A radio of any kind. There is no 802.11 and no Bluetooth radio in the model. WiFi and Bluetooth LE are simulated instead, and every page that mentions them 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: a binary built elsewhere that uses them faults. Sketches built here are soft float, so float math works.
- 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.
Open one and press Run
Each of these opens in the editor exactly as it is drawn here.
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.
Parts wired to the ESP32-S3-DevKitC-1, step by step
Each page has the wiring with the ESP32-S3-DevKitC-1’s own pin names, the code, the common mistakes and the circuit running.
Tutorials that use this board
Each one ends in a running circuit, on this same board.
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 works: the browser builds it soft float, as on every other board here.
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?
Both, simulated, and it says plainly that they are. Bluetooth is a phone in the editor’s Bluetooth pane, not a radio. Your sketch uses the real Arduino calls, and underneath there is no radio and no 802.11. Signed in, you can switch on Real internet in the Cloud panel, and HTTP and HTTPS requests to real hosts go out through Mokxi’s gateway.
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.
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.
A RISC-V chip at 160 MHz, on the real memory map.
The classic Arduino, with an ATmega328P running at 16 MHz.
The Uno’s chip on a small board that fits a breadboard.
The big Arduino, with 54 digital pins and four serial ports.
An Uno-shaped board whose chip does its own USB serial.
A second RISC-V board, with 31 pins and simulated WiFi.
The classic ESP32 at 240 MHz, with simulated WiFi.
The NodeMCU’s ESP8266 at 80 MHz, with simulated WiFi.
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.