Flashers
0Select a flasher
Pick a flasher on the left to see its history and arm its next board.
Firmware library
Board types
A board type stores a PCB's boot pieces once. After that, a new firmware version is just the app binary, the dashboard builds the flashable image for you.
New kind of PCB / chip not listed here? Ask the AI agent to prepare
the bootloader and boot profile for that chip type, it sets up the
correct offsets and pieces for you.
Advanced: import a raw binary directly
How do I get the binary out of PlatformIO?
PlatformIO builds the binary on every compile, there is no separate export. Just build without uploading:
- Click the Build check-mark in the PlatformIO
toolbar, or run
pio run. - The files land in
.pio/build/<env>/in your project (<env>= your[env:...]name inplatformio.ini).
Two ways to flash, matching the fields above:
- App only → addr
0x10000: importfirmware.bin. Works only on a board that already has a bootloader (any ESP32 flashed before). Smallest + fastest. - Merged image → addr
0x0(recommended for the fleet): flashes a blank/unknown chip cleanly. PlatformIO does not emit this by default, build it once:
esptool.py --chip esp32 merge_bin -o merged.bin \ --flash_mode dio --flash_size 4MB \ 0x1000 .pio/build/<env>/bootloader.bin \ 0x8000 .pio/build/<env>/partitions.bin \ 0xe000 boot_app0.bin \ 0x10000 .pio/build/<env>/firmware.bin
Offsets above are for the classic ESP32. On ESP32-S3 /
C3 the bootloader goes at 0x0, not 0x1000.
boot_app0.bin ships with the Arduino-ESP32 framework
under tools/partitions/.