ESP32 web flasher
Write firmware to an ESP32 from the browser, without esptool or an IDE. Choose the .bin files, and the flasher works out where each goes from what it is, checks it against the connected chip, and writes them. It also erases the flash and backs up the whole flash to a file.
Connect the board over USB. If it does not connect, hold BOOT while you press RESET.
A merged image goes to 0x0; or the bootloader, partition-table.bin and the app separately. Offsets are filled in from what each file is. Add ESP-IDF's build/flash_args (or flasher_args.json) with the .bin files and its offsets are used.
| Offset | File | Size |
|---|
Where the files go
| File | Offset |
|---|---|
Merged image (merge_bin, Arduino's .merged.bin) | 0x0 |
bootloader.bin | 0x1000 on the ESP32 and S2; 0x0 on the S3, C2, C3, C6 and H2; 0x2000 on the C5 and P4 |
partition-table.bin | 0x8000 |
The app, <project>.bin | The offset of the factory or ota_0 partition, usually 0x10000 |
ota_data_initial.bin | The otadata partition, often 0xd000 or 0xe000 |
| NVS, SPIFFS, LittleFS or FAT images | The offset of their partition |
ESP-IDF prints the offsets after idf.py build, and writes them to build/flash_args. Check a file with the firmware inspector and a layout with the partition table editor.
The flasher uses Espressif's esptool-js (Apache License 2.0), served from this site. Files are written straight from your computer to the board; nothing is uploaded.
Updating boards that have shipped
The flasher needs the board on a USB cable. For devices already installed, Pinscope sends the same app image over the internet, checks it fits the device, and rolls back if the new firmware does not come back online. OTA over the internet, with rollback.
Try it
Three devices are free, and no card is needed. Create an account, or read the five-minute guide first.
More
- Remote access to an ESP32 without TLS: what it measured and what it costs
- Reaching an ESP32 web server from outside its network
- Updating ESP32 firmware over the internet, with rollback
- Guru Meditation Error: decoding the backtrace, and crashes from the field
- Remote logging: ESP_LOG without a serial cable
- Heap and stack monitoring in the field
- An ESP32 behind CGNAT, 4G or Starlink
- TLS memory usage on the ESP32, and how to reduce it
- Sharing an ESP32 sensor page with anyone, without port forwarding
- ArduinoOTA over the internet, with a rollback
- ESP32 remote access compared: port forwarding, ngrok, Cloudflare Tunnel, Tailscale
- esp_http_server slow? The 250 ms delay and the fix
- Before the first ESP32 ships: a field support checklist
- ESP32 exception decoder: a Guru Meditation backtrace to lines, in the browser