Serial monitor and ESP flasher
A Web Serial terminal and live plotter for Arduino, ESP32, ESP8266, and Pico boards, plus an ESP firmware flasher built on esptool-js — all in the browser, no drivers or IDE.
Added
Works with
- ESP flasher IoT and embeddedthe full flasher, built on this page’s serial code
How to use it
Browser support: Web Serial works in desktop Chrome, Edge, and Opera only — not Safari,
Firefox, or mobile browsers. The page shows a notice when it is missing. On Linux your user
needs access to the serial device (usually the dialout group). Only one program can open a
port at a time, so close the Arduino IDE serial monitor first.
Terminal
Choose the baud rate (and, rarely, data bits, parity, stop bits, and flow control), then press Connect and pick the board in the browser’s port list. Changing settings while connected reopens the port. DTR and RTS set the modem lines; Reset board pulses them the way esptool and the Arduino IDE do, which restarts most ESP32 and Arduino boards.
Incoming data shows as text (with ANSI colours, so ESP-IDF logs keep their colours), hex, or
both, with optional millisecond timestamps. Type in the send box and press Enter; \n, \r,
\t, and \xNN escapes work in text mode, and hex mode sends raw bytes such as de ad be ef.
Choose the line ending, recall earlier lines with ↑/↓, and save frequent commands as macro
buttons (right-click to remove). Save log downloads everything received.
Plotter
The plotter reads the same stream and uses the Arduino Serial Plotter format: one line per
sample, either label:value pairs (temp:21.5, humidity:40) or bare numbers separated by
spaces, tabs, or commas. Pick how many points to show, auto-scale or fix the Y range, hide
series from the legend, pause, and export everything as CSV. Demo data shows how it works
without a board.
⛶ Full screen (or F) gives the terminal or the plot, whichever tab is open, the whole screen
— the browser’s full screen where it is allowed, otherwise a full-window layer. Its controls (the
send box and macros, or the legend) move above it, and the plot is redrawn as the window changes.
Escape leaves.
ESP flasher
The flasher uses esptool-js (loaded from cdn.jsdelivr.net when you first connect) and supports ESP8266, ESP32, -S2, -S3, -C2, -C3, -C5, -C6, -H2, and -P4. Connect to chip puts the board into its bootloader and shows the chip, features, crystal, MAC address, and flash size. If it does not connect, hold BOOT, tap RESET/EN, and release BOOT.
Add .bin files by dropping them or choosing them. Offsets are guessed from the file names
and corrected for the chip: the bootloader at 0x1000 (ESP32, S2), 0x0 (S3, C3, C6, H2,
ESP8266), or 0x2000 (C5, P4); partitions.bin at 0x8000; boot_app0.bin at 0xE000; the
application at 0x10000; and a merged image at 0x0. Edit any offset by hand. Flash writes
compressed data, verifies each image with MD5, and resets the chip. Erase flash wipes the
whole chip, including saved Wi-Fi settings and file systems.
Flashing replaces the board’s firmware, so use images built for your chip and flash size. The files are sent only to the board, never to a server.
For more — build-folder arguments (flasher_args.json, flash_args), merged images,
security state, erasing or reading back a region, full-flash backups, and verifying against
files — use the dedicated ESP flasher.
Feedback is a gift. Something to improve, a feature to add, or a bug? Tell me.
Runs entirely in your browser — network requests go only to the services named on this page.