Arduino Nano ESP32 (ESP32‑S3) — Enter Boot / Flash Mode
This page explains how to enter both the Arduino UF2 bootloader (double-tap RESET) and the Espressif serial bootloader (hold BOOT, tap RESET) on the Nano ESP32 (ESP32‑S3). Use the method that matches your toolchain (Arduino IDE vs. esptool/CLI).
Chip: ESP32‑S3
Bootloaders: UF2 + Serial
Understanding Boot Modes
Boot mode puts the ESP32‑S3 into a state where a host computer can upload firmware. The Nano ESP32 supports:
- Arduino UF2 bootloader: Double‑tap RESET. The board appears as a USB drive. Great for Arduino IDE and drag‑and‑drop updates.
- Espressif serial bootloader: Hold BOOT (GPIO0) then tap RESET. Used by
esptool.py, Arduino CLI’supload, PlatformIO, etc.
Methods to Enter Boot Mode
Method A — Arduino UF2 Bootloader (Double‑Tap RESET)
- Connect the Nano ESP32 to your PC with a good USB‑C cable (data‑capable, not power‑only).
- Double‑tap the RESET button quickly (two presses within ~0.5 seconds).
- The board’s status LED will change pattern. Your computer should mount a new USB mass‑storage drive (name may include NANOESP32 or similar).
- Upload via Arduino IDE or drag‑and‑drop a compatible UF2 file onto the drive.
Expected: A new drive appears; uploads succeed. If not, try another USB port/cable or Method B.
Method B — Espressif Serial Bootloader (Hold BOOT, Tap RESET)
- Keep the board connected via USB.
- Press and hold the BOOT button (this ties
GPIO0low). - While holding BOOT, press and release RESET.
- Release BOOT after one second.
- The chip is now in download (flash) mode. Start your upload (Arduino IDE/CLI, PlatformIO, or
esptool.py).
Expected: The COM/tty port enumerates for flashing; the tool connects and uploads the firmware.
Method C — Automatic Boot Mode via IDE/CLI
Most tooling toggles boot mode automatically. Try:
arduino-cli board list arduino-cli compile --fqbn arduino:esp32:nano_esp32 path/to/sketch arduino-cli upload --fqbn arduino:esp32:nano_esp32 -p path/to/sketch
If auto‑reset fails, repeat the command immediately after performing Method B.
Troubleshooting
- No USB drive after double‑tap RESET: Use a different USB cable/port; try Method B; ensure board support is installed in Arduino IDE.
- Upload times out: Press BOOT + tap RESET (Method B) and retry the upload quickly.
- Wrong port: On Windows, check Device Manager; on macOS/Linux, check
/dev/tty*. Replug the board to refresh ports. - Power issues: Avoid long/poor cables and unpowered hubs; ensure stable 5V from USB.
- Driver conflicts: Close other serial monitors; only one program can hold the port at a time.
Quick Reference (Button Sequences)
- UF2 (Arduino): RESET double‑tap ⟶ mass‑storage drive appears.
- Serial (Espressif): Hold BOOT ⟶ tap RESET ⟶ release BOOT ⟶ flash via tool.
Example: esptool.py Manual Flash
Replace the port and binary paths as needed:
python -m esptool --chip esp32s3 -p COM7 -b 921600 \ erase_flash python -m esptool --chip esp32s3 -p COM7 -b 921600 \ write_flash -z 0x0 firmware.bin
Enter serial bootloader first using Method B, then run the commands.
