How do I flash firmware to my ESP32 using a browser?
Upload your .bin firmware file using the drag-and-drop zone above, connect your ESP32 board via USB, click "Connect Device" in Chrome or Edge, select your COM port from the browser dialog, then click "Flash Now". The progress bar will show each stage — connecting, writing, and verifying with MD5 checksum.
Do I need to install drivers or Arduino IDE to flash my ESP?
No. ESP Flasher App works entirely in your browser using the Web Serial API. You do not need to install any drivers, Python (esptool.py), Arduino IDE, PlatformIO, or any other software. Just open the page with Chrome or Edge, connect your board via USB, and you are ready to flash.
Which ESP chips are supported by this flasher?
All Espressif ESP chips are supported: ESP32, ESP32-S2, ESP32-S3, ESP32-C2, ESP32-C3, ESP32-C5, ESP32-C6, ESP32-H2, ESP32-H4, ESP8266, and ESP8285. The flasher uses Espressif's official esptool-js library which auto-detects your chip when you connect.
Is my firmware uploaded to a server when I flash?
No. All processing is 100% local. Your .bin firmware file is read by the browser and written directly to your ESP device over USB. Nothing is uploaded to any server. This is a strict privacy guarantee — no firmware files, code, device info, or analytics ever leave your computer.
What if my ESP32 is not detected by the browser?
First, install the correct USB-to-serial driver for your board's chip (CP2102, CH340, or FTDI — see the USB Drivers section). Then try a different USB cable (some cables are charge-only), a different USB port, or restart your browser. Make sure no other apps (Arduino IDE, serial monitors) are using the port.
Can I flash multiple .bin files at the same time?
Yes. You can upload multiple .bin files and set a different flash address for each (e.g., bootloader at 0x1000, partition table at 0x8000, app at 0x10000). The files are flashed in order and you can drag-and-drop to reorder them before flashing.
What does "Erase before flashing" do?
When enabled, this option erases all existing data on the ESP flash memory before writing the new firmware. This ensures a clean flash but takes extra time. Disable it if you want to preserve existing data (like WiFi credentials stored in NVS) or if you are only updating a single partition.
What is the correct flash address for my firmware?
For a single merged or factory .bin file, always use address 0x0 regardless of chip. For multi-file flashing, typical addresses are: bootloader at 0x1000 (ESP32) or 0x0 (ESP32-C3/S3), partition table at 0x8000, and application at 0x10000 or 0x20000.
What browsers support Web Serial for flashing ESP32?
Google Chrome and Microsoft Edge version 89 or newer on Windows, macOS, Linux, and ChromeOS. Firefox and Safari do not support the Web Serial API. For the best experience, use the latest version of Chrome or Edge on a desktop computer.
How do I fix ESP32 firmware flash failure or MD5 mismatch?
MD5 mismatch usually means your firmware .bin is larger than the available flash space. Connect your ESP32 first to auto-detect flash size (4MB, 8MB, 16MB) so the tool validates against the correct capacity. Also try lowering the baud rate to 115200 if using a long USB cable, and make sure you selected the right flash address.
Can I use ESP Flasher App on my phone or tablet?
No. The Web Serial API is only available in desktop browsers. Mobile browsers do not expose USB serial ports. Use the tool on a Windows, macOS, Linux, or ChromeOS desktop or laptop with Chrome or Edge.
What is esptool and how does this browser flasher work?
esptool is Espressif's official Python tool for flashing ESP chips. ESP Flasher App uses esptool-js, a JavaScript port that runs entirely in your browser with zero server calls. Every command — write_flash, erase_flash, read_mac, chip_id — uses the exact same ESP ROM bootloader protocol over Web Serial.
How do I flash MicroPython to my ESP32?
Click the MicroPython quick-download button in the Firmware Source card. The tool fetches the latest MicroPython .bin from the official site via proxy, loads it at address 0x0, and you can flash it immediately — no separate download needed. We also support ESPHome, Tasmota, WLED, and Marauder quick-flash presets.
What is the difference between ESP32, ESP32-S3, ESP32-C3, and ESP32-C6?
ESP32 (classic): dual-core Xtensa, WiFi + Bluetooth Classic + BLE. ESP32-S3: dual-core Xtensa, WiFi + BLE 5, vector instructions, USB OTG. ESP32-C3: single-core RISC-V 32-bit, WiFi + BLE 5, lower cost. ESP32-C6: RISC-V, WiFi 6 (2.4 GHz), BLE 5.2, Thread/Zigbee. All chips are supported by ESP Flasher App.
How does Web Serial API work under the hood?
When you click Connect Device, your browser opens a security dialog listing available serial ports (COM ports). After you select your ESP32, the browser communicates with the chip over USB using the Web Serial API at the configured baud rate. The tool sends esptool commands (sync, flash begin, data blocks, flash end, MD5 verify) — the exact same protocol esptool.py uses over a physical serial connection. The entire communication stays local to your machine.
What baud rate should I use when flashing my ESP32?
115200 bps is the safest and most compatible baud rate for ESP32 flashing. 921600 is faster but may fail with long USB cables, poor drivers, or certain boards. 460800 is a good middle ground. The tool defaults to 921600 and falls back to 115200 on error. You can change the baud rate in the toolbar before connecting.
Can I flash ESP32 over WiFi or OTA?
No, ESP Flasher App uses the Web Serial API which requires a physical USB connection. OTA (over-the-air) updates require the ESP32 to already have firmware with OTA capability running. For initial flashing or recovery, USB is required. Once your board runs ESPHome, Tasmota, or other OTA-capable firmware, you can use their built-in OTA updaters.
What is the ESP32 ROM bootloader and how does it work?
The ESP32 ROM bootloader is firmware baked into the chip at the factory. When the chip powers on or resets with GPIO0 held low (or BOOT button pressed), it enters download mode and listens for esptool commands over UART. The bootloader accepts flash commands at a low level — sync, read registers, write flash blocks, verify. This is the protocol esptool-js communicates with over Web Serial.
How do I put my ESP32 into flashing / download mode?
Hold down the BOOT button (GPIO0), then press and release the EN/RST button, then release BOOT. Some boards have an auto-reset circuit that handles this when the serial port opens. If your board doesn't enter flash mode, connect GPIO0 to GND during power-up, or use the DTR/RTS signals from a USB-to-serial adapter.
What flash size does my ESP32 have?
Most ESP32 dev boards have 4MB (32 Mbit) of flash. Some boards like the ESP32-PICO have 2MB or 8MB. ESP32-S3 and ESP32-C6 boards may have up to 16MB. Connect your board to ESP Flasher App and click "Detect Flash Size" or "Get Info" — the tool queries the chip's SPI flash manufacturer and size register to auto-detect it.
What is the difference between ESP32 and ESP8266?
ESP32 is dual-core with WiFi + Bluetooth, has more GPIOs, more RAM (520KB vs 80KB), and supports flash encryption and secure boot. ESP8266 is single-core with WiFi only, less expensive, and widely used in IoT projects. Both are supported by ESP Flasher App. ESP32 is recommended for new projects.
What firmware files can I flash with this tool?
You can flash any .bin firmware file compiled for ESP32, ESP8266, or supported ESP chips. This includes .bin files from Arduino IDE, PlatformIO, ESP-IDF, MicroPython, ESPHome, Tasmota, WLED, ESP32 Marauder, Adafruit CircuitPython, and custom compiled firmware. The tool also supports .img files and accepts any binary blob at the correct flash address.
Can I flash ESPHome to my ESP32 using this tool?
Yes. Click the ESPHome quick-download button in the Firmware Source card. The tool fetches the latest ESPHome .bin directly from the ESPHome repository, auto-sets flash address 0x0, and you flash in one click. Alternatively, upload your own ESPHome compiled .bin file from the "ESPHome Web" compile page.
Can I flash Tasmota to my ESP32 or ESP8266?
Yes. ESP Flasher App has a Tasmota quick-download button that fetches the latest Tasmota .bin for your chip. For ESP8266 use tasmota.bin at 0x0. For ESP32 use tasmota32.bin at 0x0. The tool also supports Tasmota variants like tasmota-lite.bin and tasmota-zbbrdgpro.bin.
How do I flash WLED to my ESP32?
Click the WLED quick-download button in the Firmware Source card. The tool downloads the latest WLED_0.x.x_ESP32.bin (or ESP8266 version) at address 0x0. WLED is the most popular open-source LED strip controller firmware. After flashing, connect to the WLED-AP WiFi network to configure.
Can I use this tool to flash my ESP32-CAM?
Yes. ESP32-CAM boards use the ESP32 chip and are fully supported. Upload a compiled CameraWebServer or other ESP32-CAM .bin file. Note that ESP32-CAM may require GPIO0 grounded during flashing and a stable power supply (some USB adapters can't supply enough current for the camera).
What is the ESP32 partition table?
The partition table is a 1024-byte binary structure at flash offset 0x8000 that defines up to 95 partitions on the ESP32 flash. Each entry specifies type (app or data), subtype (factory, ota_0, nvs, spiffs), offset, size, and label. ESP Flasher App includes a Partition Table Viewer — upload any partition table .bin to decode its entries.
How does OTA (over-the-air) update work on ESP32?
OTA updates require firmware compiled with OTA partition support (usually app0 at 0x10000 and app1 at 0x150000). The running firmware downloads a new .bin from a server or phone app, writes it to the inactive OTA partition, then swaps the boot partition and reboots. ESP Flasher App does not do OTA — it writes directly to flash via USB.
What is flash encryption on ESP32?
Flash encryption encrypts the ESP32's flash contents using AES-256. When enabled, the bootloader decrypts firmware on-the-fly during boot. This protects your firmware from being read via physical flash access. ESP Flasher App supports flashing encrypted images — you can upload pre-encrypted .bin files and the tool writes them as-is. Encryption must be enabled via ESP-IDF menuconfig.
What does "Secure Boot" mean on ESP32?
Secure Boot ensures only signed firmware can run on the ESP32. The bootloader verifies a digital signature on the application partition before booting. If signing fails, the chip won't boot. This prevents unauthorized firmware from being loaded. Secure Boot is configured via ESP-IDF and requires burning eFuses — it cannot be undone.
How do I check my ESP32's MAC address?
In ESP Flasher App, connect your ESP32 and wait for chip detection. The tool displays the MAC address in the chip info section. You can also read it manually by connecting with a serial monitor at 115200 baud and checking the boot log, or using the esptool.py command: esptool.py read_mac.
How do I read the current firmware from my ESP32?
Connect your ESP32, click "Get Info" to verify communication, then use the "Read Flash" feature. Select the address range and size to read. The tool will dump the flash contents as a .bin file you can save. Note: reading the full 4MB flash at 115200 baud takes several minutes. Reading at 921600 is significantly faster.
Is there a way to verify the flash after writing?
Yes. ESP Flasher App automatically performs an MD5 checksum verification after every flash operation. After writing the last data block, the tool sends a verify command and the ESP32's bootloader computes the MD5 hash of the written data and returns it. If the hash matches the original firmware, the flash succeeded. If not, you'll see "verify failed" and should try a lower baud rate or different address.
What is the "merge_bin" feature and when should I use it?
merge_bin combines multiple .bin files (bootloader + partition table + app) into a single flash image at offset 0x0. Use this when you want a single file to flash in one operation. ESP Flasher App also supports multi-file flashing where each .bin goes to its own address — merge_bin is optional. Merging is useful for sharing your complete firmware as one file.
Can I use this tool on Linux or macOS?
Yes. ESP Flasher App runs in the browser on any operating system that supports Chrome or Edge 89+: Windows, macOS, Linux, ChromeOS. No platform-specific drivers or permissions configuration needed. Linux users may need to add their user to the dialout group for USB serial access, but this depends on the distro. macOS works out of the box.
What USB-to-serial chips do ESP32 boards use?
Most common: CP2102 (Silicon Labs), CH340 (Chinese clones/useries), CH9102 (newer CH340 replacement), FTDI FT232RL, and native USB (ESP32-S3, ESP32-C3, ESP32-C6 have built-in USB serial). If your board isn't detected, install the correct driver. CP2102 and CH340 drivers are available for Windows, macOS, and Linux.
How do I install CP2102 or CH340 USB drivers for my ESP32?
CP2102 drivers: download from Silicon Labs (CP210x Universal Windows Driver) or use Windows Update. CH340 drivers: download from the manufacturer's site or use automated installer tools. On Windows, check Device Manager for "Silicon Labs CP210x" or "USB-SERIAL CH340" under Ports. On Linux, most distros include drivers built-in. On macOS, install the appropriate .pkg from the manufacturer.
Why does my ESP32 keep disconnecting during flash?
Common causes: insufficient power (try a USB hub with external power or a different USB port), a faulty USB cable (use a data-capable cable, not charge-only), long USB cable (keep under 1.5m for 921600 baud), or driver issues. Lower the baud rate to 115200 as a workaround. Some boards have voltage regulator issues — try powering via the 5V pin instead of USB.
How do I flash an ESP32 that has no BOOT button?
Some boards lack physical buttons (ESP32-C3 mini, S2 mini, etc.). You can short GPIO0 to GND with a wire or tweezers while powering on, then remove the short after the flash starts. Alternatively, use a DTR/RTS auto-reset USB adapter that handles the download mode entry sequence automatically via serial control signals.
What is "gpio_reset_pin" and how does it affect flashing?
Some ESP32-S2 and ESP32-C3 boards use a GPIO pin to control the USB-to-serial reset (often GPIO18 or GPIO19). If this is incorrectly configured, the auto-reset circuit won't work and you'll need to manually enter download mode. Check your board's schematic — ESP Flasher App shows detected chip info that can help diagnose these issues.
Can I flash an ESP32 without holding the BOOT button?
Most modern ESP32 dev boards have an auto-reset circuit (DTR/RTS) that puts the chip into download mode automatically when the serial port opens. If yours doesn't, you can add a simple circuit with two transistors and resistors, or upgrade to a board with built-in auto-reset (most ESP32-S3 and ESP32-C3 boards have this).
What is the difference between ESP-IDF, Arduino ESP32, and PlatformIO?
ESP-IDF is Espressif's official development framework with full control over hardware features. Arduino ESP32 is an Arduino core port for ESP32, easier to use but less configurable. PlatformIO is an ecosystem that supports both ESP-IDF and Arduino, with library management and IDE integration. All three produce .bin firmware files that ESP Flasher App can flash.
What does "connecting..." mean when my ESP32 won't connect?
"Connecting..." means the tool is sending sync bytes (0x07) to the ESP32 bootloader at the configured baud rate, waiting for a response (0x08). If it stays on this step, the chip isn't in download mode. Press the BOOT button, check your USB cable, verify the correct COM port, install USB drivers, or lower the baud rate to 115200.
Can I flash my ESP32 while it's connected to other hardware (sensors, LEDs)?
Generally yes, as long as the other hardware doesn't draw too much power from the 3.3V pin. The flashing only uses the serial RX/TX pins (usually GPIO1 and GPIO3). However, pins like GPIO0 and GPIO2 may conflict with external pull-up/down resistors. If flashing fails, disconnect peripherals, flash the board bare, then reconnect peripherals afterward.
What is the ESP32 "flash size" setting in menuconfig?
The flash size setting in menuconfig (ESP-IDF) or Tools menu (Arduino IDE) tells the compiler how much flash your board has. Correct options: "4MB" for most ESP32 dev boards, "2MB" for ESP32-PICO, "8MB" or "16MB" for ESP32-S3/C6 boards. Setting the wrong size can cause boot loops or partition table errors.
How do I update ESP Flasher App?
ESP Flasher App is a web app with no installation — you always have the latest version when you visit espflasher.app. Updates are deployed server-side. The esptool-js library version is shown in the footer. To force refresh, clear your browser cache or use Ctrl+F5 / Cmd+Shift+R.
Does this tool support ESP32-C2 and ESP32-H2 chips?
Yes. ESP32-C2 (singe-core RISC-V, 2.4 GHz WiFi + BLE 5) and ESP32-H2 (RISC-V, 802.15.4 Thread/Zigbee, no WiFi) are supported by esptool-js and ESP Flasher App. The H2 is designed for Thread mesh networks. Both use flash address 0x0 for the bootloader and follow the same esptool protocol.
What is the difference between ESP32-S2 and ESP32-S3?
ESP32-S2: single-core Xtensa, WiFi only (no Bluetooth), USB OTG, LCD interface. ESP32-S3: dual-core Xtensa, WiFi + BLE 5, vector extensions for AI/ML, more GPIO, USB OTG, PSRAM support up to 8MB. Both use bootloader at 0x0. The S3 is the more powerful chip and is recommended for new designs requiring Bluetooth.
How do I use the serial monitor in ESP Flasher App?
Switch to the Serial Monitor tab. Connect your ESP32 if not already connected, set the baud rate matching your firmware (usually 115200 or 9600), and click "Open Serial". The monitor shows real-time serial output from your ESP32. You can also send commands to the board. Use the "Clear" button to reset the output and "Close Serial" to disconnect.
Is there a way to reset my ESP32 to factory settings?
To factory reset an ESP32, use the "Erase Flash" option in ESP Flasher App which erases the entire flash (bootloader, partition table, app, NVS). After erasing, re-flash the original factory firmware. Note: erasing flash removes WiFi credentials stored in NVS. For ESP32 with secure boot or flash encryption, a full erase may require re-flashing with the correct encrypted images.
Can I use this tool with ESP32-based commercial products?
Yes. ESP Flasher App can flash any ESP32-based product that exposes the serial UART pins (TX, RX, GPIO0, EN) in download mode. Many commercial devices require opening the case and soldering wires to test pads. For production flashing, Espressif's official flash download tool or esptool.py in a CI pipeline is recommended.
How do I flash my ESP32 with custom firmware built from source?
Compile your firmware in Arduino IDE (Sketch > Export Compiled Binary), PlatformIO (pio run --target build), or ESP-IDF (idf.py build). Find the .bin files in the build output directory. For Arduino, it's in the sketch folder. For ESP-IDF, it's in build/bootloader/bootloader.bin, build/partition_table/partition-table.bin, and build/your_project.bin. Upload these to ESP Flasher App at their correct addresses.
What does "chip is in download mode" mean?
Download mode is a special state where the ESP32's ROM bootloader listens for esptool commands on the serial port. The chip enters this mode when GPIO0 is low during power-up or reset. In this mode, the bootloader accepts write_flash, read_flash, erase_flash, chip_id, read_mac, and other commands. After flashing, a reset boots into normal mode.
How do I know if my ESP32 flash is corrupted?
Signs of corrupted flash: ESP32 continuously rebooting (boot loop), "ets Jun 8 2016 00:22:57" message repeating, "rst:0x10 (RTCWDT_RTC_RESET)", "invalid header: 0xffffffff" error, or no serial output at all. Fix by erasing flash ("Erase Flash" button) and re-flashing a known-good firmware at the correct address.
What is the ESP32 NVS (Non-Volatile Storage) partition?
NVS is a partition (usually at 0x9000, 24KB) that stores key-value data like WiFi credentials, calibration values, and configuration parameters. When you erase flash or re-flash without preserving NVS, you lose WiFi settings. ESP Flasher App's "Erase before flashing" option erases NVS too. To preserve settings, don't check "Erase" or back up the NVS partition before erasing.
Can I flash an ESP32 using a network TCP connection?
No, not with ESP Flasher App. Initial flashing requires a physical USB connection to access the ROM bootloader. Some tools support ESP32 serial-to-network bridging (e.g., esp-link), but this requires an already-flashed board with that firmware. For remote flashing, use ESP Flasher App locally on the machine with the USB-connected ESP32.
What is the ESP32 efuse and how does it affect flashing?
eFuses are one-time programmable bits in the ESP32 that control features like flash voltage (1.8V or 3.3V), flash encryption keys, secure boot keys, and JTAG disable. Burning eFuses permanently changes the chip behavior. ESP Flasher App does not support burning eFuses — use esptool.py with the --efuse option for efuse operations.
How do I flash an ESP32 without the USB port (direct UART)?
Connect a USB-to-UART adapter (like FTDI FT232RL or CP2102) to your ESP32's TX (GPIO1), RX (GPIO3), EN (CH_PD through 10K pull-up), GPIO0 (to GND for download mode), VCC (3.3V), and GND. Connect the adapter to your computer, open ESP Flasher App, select the new COM port, and flash normally. This is useful for bare ESP32 modules without a dev board.