Back to Troubleshooting

ESP32 Manual Boot Mode

Learn how to manually enter bootloader mode on ESP32 boards using the BOOT button when automatic upload fails. Step-by-step guidance for resolving "Failed to connect" errors, especially on ESP32-CAM and custom boards without auto-reset circuitry.

Common Causes

  • ⏱️

    Auto-Boot Failure During Upload

    Some ESP32 boards fail to automatically enter bootloader mode due to missing DTR/RTS circuitry or timing mismatches during upload.

  • 🧰

    Board Design Lacks Auto-Reset Circuit

    Minimal ESP32 modules or custom designs may omit the auto-reset transistor pair that triggers boot mode during code upload.

Symptoms

Upload Fails with Timeout

IDE outputs errors like

Failed to connect to ESP32: Timed out waiting for packet header

especially at the start of the upload process.

Upload fails with "Failed to Connect"

IDE outputs errors like

A fatal error occurred: Failed to connect to ESP32: No serial data received

especially at the start of the upload process.

Upload Succeeds Only with Manual Button Press

Upload only works when the BOOT button is held down and released at a precise moment.

Solutions

Manually Enter Boot Mode Using BOOT Button

Hold down the BOOT button on your ESP32 board, click the upload button in your IDE, and release BOOT when you see

Connecting…

in the console output.

Use a Known-Good USB Cable and Power Source

Ensure that poor connections or low voltage are not interfering with reset or bootloader detection during upload. Check more details.

Modify Hardware to Support Auto-Boot (Optional)

Add a transistor circuit between DTR/RTS and EN/IO0 to mimic the auto-reset functionality on boards that lack it. Check more at Randomnerdtutorials.

More Details

ESP32 Manual Boot Mode #

If you're getting “Failed to connect” errors while uploading code to your ESP32 — especially with minimal or clone boards — you might need to manually put the board into bootloader mode.

This involves pressing the BOOT button at just the right time so the ESP32 is ready to receive firmware via USB.

Why You Might Need to Do This #

Most ESP32 dev boards include auto-reset circuitry that toggles the EN and IO0 pins automatically during upload. But some:

  • Don’t have this circuit at all (common in ESP32-CAM, DIY boards)
  • Use clone USB-to-serial chips that don’t drive DTR/RTS properly
  • Have timing quirks that make auto-reset unreliable

In these cases, you’ll need to manually trigger boot mode using the BOOT button.

When You See This Problem #

You try to upload a sketch and get this in the IDE:

Connecting...
Failed to connect to ESP32: Timed out waiting for packet header

or

A fatal error occurred: Failed to connect to ESP32: No serial data received

And the board doesn’t react — no LED blink, no reset flicker.

How to Manually Enter Boot Mode #

Follow these steps:

  1. Hold the BOOT button on your ESP32
  2. Click Upload in your IDE (Arduino IDE or PlatformIO)
  3. Wait until you see Connecting... in the output
  4. Release the BOOT button when you see the upload begin

Timing matters — release the BOOT button only after upload starts (but not too early).

If you're using PlatformIO or esptool, the timing window may be longer, but the process is the same.

Board-Specific Notes #

  • ESP32-CAM often requires this due to missing reset circuitry
  • ESP32-WROOM-32 modules on custom PCBs typically need manual boot
  • Some boards add a separate EN (reset) button — don’t press it unless instructed

Optional: Modify Hardware to Auto-Boot #

If you're using a board regularly that requires manual boot:

  • You can add a capacitor and transistor circuit to connect the USB-to-serial DTR/RTS lines to the EN and IO0 pins

Modify Hardware to Auto-Boot ESP32

  • Or use an FTDI module that supports auto-reset, wired appropriately

Helpful Tip #

If you see no feedback during upload, double-check your USB cable too.
See: ESP32 Wrong USB Cable

Still Stuck with an ESP32 Issue? Let's solve it together.

Our interactive troubleshooting wizard will guide you through common ESP32 problems and their solutions, step by step.

No registration required. Start solving issues right away!