Run your real ESP32 firmware in the browser before you buy the board.
English ยท ็ฎไฝไธญๆ ยท ๆฅๆฌ่ช ยท ํ๊ตญ์ด
TryBoard is an instruction-level ESP32 simulator with a 3D workbench. Drop in the flash.bin that ESP-IDF or
Arduino produced, wire parts on a breadboard, and watch the same binary blink LEDs, drive servos, draw on displays
and talk Wi-Fi or BLE โ deterministically, so every run of the same firmware gives the same result and can be
checked like a test.
It is built for people who write firmware with AI: the site gives you a task brief and pass criteria, your AI writes the code, and TryBoard tells you whether it works, which chip and parts to buy, and which risks only real hardware can rule out.
Core โ runs the real binary. A from-scratch RV32IMC and Xtensa LX6/LX7 emulator in Rust, compiled to wasm. It boots unmodified ESP-IDF images against the original mask ROM, with FreeRTOS scheduling, dual-core S3, PSRAM, and peripheral models checked against QEMU and ESP-IDF test output.
World โ sensors read the scene. A three.js workbench (WebGPU first, WebGL2 fallback) with boards, breadboard, parts and a room. Ultrasonic sensors cast rays, IMUs read physics, displays render the framebuffer, buzzers play through Web Audio, and a virtual phone scans, connects to and subscribes to your BLE peripheral.
Decision โ what to buy. A selection advisor turns a project into chip, board, BOM, pin map and power estimate. Every conclusion carries a trust label:
| Label | Meaning |
|---|---|
| Simulated | Real firmware runs on the instruction-level core; the peripheral model has acceptance tests |
| Behavioural | The outside world is modelled at behaviour level (virtual phone, virtual Wi-Fi network) |
| Estimated | Power, timing margins, wiring loss from datasheets and calibrated models |
| Needs hardware | RF range, antennas, analog noise, strict timing โ verify on a real board |
| Area | ESP32-C3 | ESP32-S3 | ESP32 |
|---|---|---|---|
| CPU, interrupts, timers, FreeRTOS | โ RV32IMC | โ LX7, dual core, PSRAM | โ LX6, dual core |
| GPIO, UART, LEDC (PWM) | โ | โ | โ |
| I2C with virtual SSD1306 / BME280 | โ | โ (+ MPU6050, QMI8658, touch panels) | โ |
| ADC, RMT (WS2812, ultrasonic), SPI LCD, I2S | โ | โ (+ PCNT encoder) | โ |
| USB HID keyboard / CDC | โ | โ | โ |
| Wi-Fi (open, WPA2-PSK, HTTP) | โ | โ | init only |
| BLE peripheral (NimBLE) + virtual phone | โ behavioural | โ | โ |
Full matrix with acceptance evidence: docs/STATUS.md. 244 acceptance cases, 72 examples and a
7-level learning path run on every batch (tools/accept.sh).
tools/fetch_third_party.sh # ROM ELFs (Apache-2.0) and riscv-tests, into third_party/
tools/build_web.sh # wasm core + web assets
cd web && npm install && npm run dev # http://localhost:5180Run firmware from the command line, with parts attached:
cd core
cargo run -p tryboard-cli --release -- run ../firmware/build/blink/flash.bin
cargo run -p tryboard-cli --release -- run ../firmware/build/weather/flash.bin \
--i2c ssd1306@0x3c,bme280@0x76 --env 23.5,45,101325 --oled
tools/check.py ../firmware/build/blink/flash.bin --level 01 # pass/fail against a levelBuilding the acceptance firmware needs ESP-IDF v5.5 (tools/build_fw.sh). Requirements: Rust with
wasm32-unknown-unknown, Node 22.18+, Python 3.11+.
core/ Rust workspace: rv32, xtensa, soc, esp32c3, esp32s3, esp32, elec, cli, wasm
web/ Vite + TypeScript + React + three.js front end; i18n in web/src/i18n
firmware/ ESP-IDF acceptance firmware, examples.json, levels.json
tools/ build, acceptance, QEMU oracle, web regression tests
docs/ architecture, plan, design, licensing decisions
Contributions are welcome: read CONTRIBUTING.md first (coding agents also follow AGENTS.md). Please report security issues privately as described in SECURITY.md.
TryBoard is alpha (v0.1.0): the core runs real firmware and the acceptance suite is green, but APIs, file formats and the web UI still change between releases. Release notes are in CHANGELOG.md.
| Milestone | State |
|---|---|
| ESP32-C3 core, GPIO, web workbench | โ done |
| Common peripherals (LEDC, RMT, I2C, SPI, ADC, timers) | โ most models done |
| ESP32-S3 (LX7) and classic ESP32 (LX6) | โ boots IDF, most peripherals |
| USB OTG (HID / CDC done, network adapter next) | โ |
| Wi-Fi and BLE against virtual networks / phones | โ |
| Audio and camera (I2S, Web Audio, camera reads the 3D scene) | โ planned |
| Selection advisor, learning path, launch | โ |
Item-level plan with acceptance criteria: docs/PLAN.md.
TryBoard stands on the work of many open projects:
- Espressif โ ESP-IDF, esp-rom-elfs, esp_lcd_gc9a01, esp_lvgl_port and the Espressif QEMU fork, used only as an independent reference process
- RISC-V โ riscv-tests for CPU conformance
- Graphics & UI โ three.js, three-mesh-bvh, Manifold, React, Radix UI, Tailwind CSS, Vite, LVGL
- Electrical reference โ ngspice
- 3D models โ KiCad libraries (CC BY-SA 4.0) and Adafruit CAD Parts (MIT), converted with occt-import-js, glTF-Transform and meshoptimizer
- Fonts โ Noto Sans SC and JetBrains Mono (SIL OFL 1.1)
Per-file sources, copyright lines and licence texts are generated into THIRD_PARTY_NOTICES.txt and the /licenses
page; the rules behind them are in docs/LICENSING.md.
TryBoard is an independent project and is not affiliated with or endorsed by Espressif Systems. "ESP32" names the chip family it simulates; 3D boards are illustrations, not official Espressif models. Compatible with Arduino-built firmware. Simulation results are not calibrated against real silicon unless stated.
TryBoard is licensed under the Apache License 2.0; see also NOTICE. Third-party 3D models
(CC BY-SA 4.0 / MIT), fonts (SIL OFL 1.1) and the inputs fetched into third_party/ keep their own licences, listed in
assets/models/*/SOURCES.md and THIRD_PARTY_NOTICES.txt.
