ESP32 flasher that checks before it writes
Plug the board in, pick a .bin, and the page reads what chip is on the wire and what chip the file was built for. If they do not match, the Flash button stays off and it tells you why. Works in Chrome, Edge, Opera or Firefox 151 or newer on a computer.
✓
Connection problems?
The browser is fine but the board does not show up, or the port will not open:
- Use a data USB cable (many phone charging cables carry no data) and try another USB port; on a hub, try the computer directly.
- Hold BOOT while plugging the board in so the chip enters its bootloader, then release it.
- Close anything else holding the port (Arduino IDE serial monitor, PlatformIO, a terminal, another tab of this page) and reconnect.
- Windows: the USB-serial bridge needs its driver — CH340, CP210x or FTDI, depending on the board. CH340, CP210x, FTDI
- Linux: add yourself to the serial group, then log out and back in:
sudo usermod -aG dialout $USER - macOS: no driver is needed for CP210x/CH340 on recent versions; if the port is missing, install the vendor driver above.
1 · Connect the board
Plug the board in over USB, then pick its port. Hold BOOT while plugging in if the chip is not found.
- Chip
- Revision
- Flash size
- Features
- MAC
2 · Choose the firmware
- File
- Built for
- Chip revision
- Type
- Flash size in header
- Flash mode
- Project
- Version
- ESP-IDF
- Built
- SHA-256
3 · Compatibility
Every line must pass before Flash is enabled.
Connect a board and choose a file to see the checks.
4 · Flash
Advanced
Paste one SHA-256 per line. While the list is not empty, any other file is refused. It is stored in this browser only (localStorage) as a convenience, not as a security control.
Free tool, provided as is, without warranty. You are responsible for choosing the right firmware for your board; flashing can erase or overwrite what’s on the device. Need it done for you? We can help.
Log
The formula
file chip id = connected chip · chip revision ≥ minimum in the file · offset + size ≤ flash fitted · MD5 read back after writing
When to use it
Loading a release build onto a dev board, re-flashing a batch of boards on the bench, or handing a customer a page that flashes their device without a Python install. It uses Espressif’s own esptool protocol through the browser’s serial port, so it behaves like esptool.py: same chip detection, same flash-size detection, same stub, same MD5 check.
Pitfalls
- A .bin is either an app (flashed at 0x10000) or a merged image with bootloader and partition table (flashed at 0x0, or 0x1000 on ESP32 and ESP32-S2). The page reads the partition table to tell them apart, so you never pick the offset by hand.
- The chip id, minimum chip revision and flash-size field come from the image header ESP-IDF writes into every build. A file built for ESP32-S3 has chip id 9; an ESP32-C3 reports 5. That comparison is exact, not a guess from the file name.
- Flash mode (QIO/DIO) cannot be read back from the board, so a mismatch shows as a note, not a block. If a board reboots in a loop after flashing, rebuild with DIO.
- Erase-all wipes NVS, Wi-Fi credentials and any factory calibration you stored yourself. It is off by default and needs its own confirmation.
- Nothing leaves your computer: the file is parsed in the page and written straight to the port. The approved-hash list lives in this browser only.
Related note
Browser-based firmware flashing without an installerWant a flasher like this for your own product, with serial numbers and a production log?