Virtual Lab Bench (ESP32, multi-function)

One ESP32-S3, flashed once from the browser, running the functions you pick at the same time: a DS18B20 emulator on one pin and a PT1000 stand-in on two others, each with its own panel. Choose the modules, assign the pins, apply.

vlab 0.3.0 · ESP32-S3NOT CONNECTED
Flash: not started
INSTRUMENT OVERVIEW0 instruments
CONTROLS
Not connectedWeb SerialLocal only

One board, several instruments

Every instrument on this page is a self-contained module on both sides of the USB cable. In the firmware, a module owns its pins, its state and its commands, and asks the core for shared peripherals rather than taking them. In the browser, its twin owns the physics, the command builders and the parts of this panel you see for it. The page composes the panel; the firmware composes modules; neither needs to know the other's contents. That is what lets a new instrument be added as one firmware module and one TypeScript file, with nothing else changing.

The seam between them is a line-oriented serial protocol where every line carries a slot number. Slot 1's temperature, slot 2's wiper code and slot 3's bus traffic travel on the same wire and are routed on arrival. The firmware describes the modules it contains, with their pin roles and allowed GPIO ranges, so the pin fields here are built from what the board actually reports rather than from assumptions on this page.

Common questions

Which browsers can flash a board and talk to it?
Chrome, Edge, Opera and Brave on Windows, macOS, Linux and ChromeOS. Both halves of this page use the Web Serial API, which Firefox and Safari have not implemented and which no mobile browser offers. There is no polyfill, so on an unsupported browser the tool says so up front.
How is this different from the single-function simulator pages?
Same firmware modules, one board. The 1-Wire and PT1000 pages each flash a firmware that does one thing; this page flashes one image that contains every function, dormant, and switches on the ones you pick with the pins you give them. A rig that needs a DS18B20, a PT1000 and an SHT40 at once is then one ESP32 and one tab. The single-function pages remain the place to read about wiring and how each emulation works.
Why can I only add one 1-Wire emulator?
Because a 1-Wire slave owns the processor. It has to answer a reset with a presence pulse within tens of microseconds and drive bits inside 15 µs windows, so its polling loop blocks for up to 20 ms at a time and switches interrupts off around the pulse. The firmware allows one such module per board and runs it first in every loop pass; every other module is written to tolerate being visited only every 20 ms. Two digital pots are fine, and so is a pot plus an I²C sensor emulator: the ESP32-S3 has two I²C peripherals, one for each.
Does the board remember the rig when I unplug it?
No, deliberately. Opening the serial port reboots the board anyway, so anything stored on it would only save one replay. Instead the page keeps the rig — instruments, pins and every setting — in your browser and re-sends it every time you connect. That also means the rig survives re-flashing.
Is it safe to flash a board I am using for something else?
It overwrites the application, so treat it as destructive. Nothing is harmed permanently: re-flashing your own firmware restores the board. Any spare ESP32-S3 development board will do.
Does anything I do here get uploaded?
No. There is no server and no account. The page is static, the firmware is a plain 219 kB file served from this site, and the flashing protocol and the serial conversation with your board both run in JavaScript in your tab. The rig is saved in your browser's local storage and nowhere else.