This is a quick guide showing how to erase the ESP32 flash memory to restore it to its original state. This might be useful if you want to delete any changes made to the firmware or configuration settings; if the system is crashing constantly and you can’t upload new code; to clear data that is no longer needed, and other applications. We’ll use a tool called esptool.
Installing esptool.py
To perform an ESP32 factory reset, we’ll use esptool, which is “a Python-based, open-source, platform-independent utility to communicate with the ROM bootloader in Espressif chips.“
To install esptool, you need Python 3.7 or newer installed on your system. You can download and install Python at the following link (make sure you download the right package for your system):
With Python 3 installed, open a Terminal window and install the latest stable esptool.py release with pip:
pip install esptool
Note: with some Python installations that command may not work and you’ll receive an error. If that’s the case, try to install esptool.py with:
- pip3 install esptool
- python -m pip install esptool
- pip2 install esptool
Setuptools is also a requirement that is not available on all systems by default. You can install it with the following command:
pip install setuptools
After installing, you will have esptool.py installed into the default Python executables directory and you should be able to run it with the command esptool. In your Terminal window, run the following command:
python -m esptool
If it was installed properly, it should display a similar message (regardless of your operating system):
Erasing the ESP32 Flash
Follow the next steps to erase the ESP32 flash:
1) Connect the ESP32 to your computer;
2) Open a Terminal window on your computer;
3) Hold the ESP32 BOOT button;
4) Copy the following command to your terminal window and press Enter (continue holding the BOOT button).
python -m esptool --chip esp32 erase_flash
5) When the “Erasing” process begins, you can release the “BOOT/FLASH” button. After a few seconds, the ESP32 flash memory will be erased.
Note: if after the “Connecting …” message you keep seeing new dots appearing, it means that your ESP32 is not in flashing mode. You need to repeat all the steps described earlier and hold the “BOOT/FLASH” button again to ensure that your ESP32 goes into flashing mode and completes the erasing process successfully.
Troubleshooting
If you encounter a permission error while trying to run the esptool command, open the command prompt as a administrator (or as sudo on Linux).
Wrapping Up
This was a quick guide showing you how to erase the ESP32 flash to perform a factory reset. We hope this tutorial is useful.
If you’re using an ESP8266 board, you can follow the instructions in the following tutorial:
If you would like to learn more about the ESP32 board and IoT, make sure you take a look at our resources:
- Learn ESP32 with Arduino IDE
- Build Web Servers with ESP32 and ESP8266
- Firebase Web App with ESP32 and ESP8266
- Free ESP32 Projects and Tutorials
Thanks for reading.
I tried al the options and the only thing I got was invalid syntax
Hi.
What errors do you get?
At which stage of the tutorial do you get the errors?
Regards,
Sara
invalid syntax every time, I followed your instructions trying all the possible entries
I went over to Espressif and they said to …… pip install esptool it also did not work????
invalid syntax
I want to get this to work it is a great tool to clean out bugs
Thanks
tries again
syntax error invalid syntax
this might be the problem?
Note If you’re a newcomer and you get an error like this:
python –version
Traceback (most recent call last):
File “”, line 1, in
NameError: name ‘python’ is not defined
It’s because this command and other suggested commands in this tutorial are intended to be run in a shell (also called a terminal or console). See the Python for Beginners getting started tutorial for an introduction to using your operating system’s shell and interacting with Python.
Are you able to run the commands on the Terminal window?
We mention in the tutorial that you need to open a Terminal window…
I’m sorry for the misunderstanding.
Regards,
Sara
Do you have Python 3 installed on your computer?
thanks
yes I do and I run the commands in the terminal window
I am baffled by this one
I was having the same problem and found my system did not have the path to python set. I did a new full install with all option checked “set path” and all worked fine.
Hello! sara thanks for your post.
i am coming to add
james firstly open your cmd
–> write “python” and enter (you need internet) (start to download python 3XXX)
–> after in your write “pip install esptool” and enter ( installing esptool)
–> after write “pip install setuptools” and enter ( installing setuptools)
–> write “python -m esptool” and enter
–>follow this Erasing the ESP32 Flash of Sara
–>in your cmd write this commande , change COMXX by your COM and enter
“python -m esptool –port COMXX write_flash_status –non-volatile 0”
Regards,
Lamine.
Thank you for this tutorial, but there is something that I don’t understand:
The post starts by “… you can’t upload new code …”, and your solution is based on “… install Python …”. Isn’t it contradictory ?
Or does that mean that you advise to install python on each new ESP32, even if you don’t use it (Arduino IDE instead), just in case you would need to do a factory reset ?
Hi.
You don’t need to install Python on the ESP32.
You need to install Python on your computer so that you can install a tool called esptool on your computer, not on the ESP32.
Regards,
Sara
What about ESP8266? Can I reset these boards with the same procedure?
Hi.
Yes.
The tutorial for the ESP8266 will be published tomorrow.
Regards,
Sara
Here’s a link to the ESP8266 tutorial: https://randomnerdtutorials.com/esp8266-nodemcu-erase-flash-memory/
FYI,
The ESP tool is good for both ESP32 and ESP8266 (nodeMCU) boards with the “–chip auto” switch. I have been using it to clear flash storage structures while testing. You can use the following syntax for either board. Just change the COM port to where your board is connected. I have python and python3 in my system path so no need to call it.
In the CLI navigate to your esptool folder and type
esptool.py –port COM3 –chip auto –before no_reset –baud 115200 erase_flash
and if you want to restore a factory bin image make sure its in the same directory and use
esptool.py –port COM5 –before no_reset –baud 115200 write_flash 0 factory_WROOM-32.bin
Cheers
Thanks for sharing this.
Regards,
Sara
Thank you for this tutorial.
My ESP32, connected on “COM5” always fails. I try a lot of times with “boot” button and the result is always the same:
PS C:> python -m esptool –chip esp32 erase_flash
esptool.py v4.5.1
Found 2 serial ports
Serial port COM5
Connecting………………………………..
COM5 failed to connect: Failed to connect to ESP32: Wrong boot mode detected (0xb)! The chip needs to be in download mode.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
Serial port COM3
Connecting………………………………..
COM3 failed to connect: Failed to connect to ESP32: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
A fatal error occurred: Could not connect to an Espressif device on any of the 2 available serial ports.
PS C:>
Do you think that this could be a hardware malfunctioning? It is a new one that I bought some months ago.
Thanks,
Paulo
Hi.
As the error mentions, your ESP32 is not in flashing mode.
You may need to hold the BOOT button when the dots start showing up.
Do you have any peripherals connected to your board?
Which board are you using?
Were you able to program your board before?
Regards,
Sara
i have same problem.
C:\Users\claw>python -m esptool –chip esp32 erase_flash
esptool.py v4.6.2
Found 4 serial ports
Serial port COM9
COM9 failed to connect: Could not open COM9, the port doesn’t exist
Serial port COM16
Connecting………………………………..
COM16 failed to connect: Failed to connect to ESP32: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
Serial port COM15
Connecting…
COM15 failed to connect: Write timeout
Serial port COM1
Connecting………………………………..
COM1 failed to connect: Failed to connect to ESP32: No serial data received.
For troubleshooting steps visit: https://docs.espressif.com/projects/esptool/en/latest/troubleshooting.html
A fatal error occurred: Could not connect to an Espressif device on any of the 4 available serial ports.
hola, no consigo borrar el ESP32, es nuevo y se haquedado bloqueado por una mala programación. Lo he probado instalando arduido IDE, python, con la herramienta online, con el grabador flash…y nada, se queda colgado mientras salen puntos.
no consigo que nada funcione, simplemente no responde, detecta el puerto COM utilizado pero no se deja borrar.
¿puede haberse estropeado definitivamente o se puede resetear seguro?
necesito ayuda, gracias.
Hi.
Try to press the BOOT/FLASH button several times during the erasin process.
Regards,
Sara
Hola Marcel, lo que me funciono a mà es conectando un condensador entre la toma de tierra y el reset, el condensador debe ser de 10 microfaradios, dependiendo de microcontrolador debes conectarlo a otras tomas, busca en Youtube “Fixing a hardware ESP32 Upload problem” el vÃdeo del usuario Xtronical ahà lo explican muy bien.
Hola Daniel, gracias por la info me sirve de mucho! tengo una pregunta adicional yo no cuento con la tarjeta que aparece en el video de Xtronical en ese caso como hago?? podrias ayudarme
Hi,
Can this software work also with ESP32-CAM ? I have two of them that I cannot upload anymore. They seem dead, or not communicating.
Thanks
Hi.
If the boards can receive data via serial, yes, you can do this to erase flash.
Regards,
Sara
Hi
You can also do it by enabling Erase All Flash Before Sketch Upload in Arduino IDE 1.8.19
I just forgot to mention that you will find the option “Erase All Flash Before Sketch Upload” in the tools menu
You can also erase the flash in PlatformIO by clicking on the little alien on the sidebar.
under project tasks click on the board you are using.
then click on platform and the erase flash menu will appear.
Another option is to use Espressif’s flash_download_tool_3.9.4
to erase flash
https://www.espressif.com/en/support/download/other-tools?keys=
In an Anaconda Python environment you can install the esptool from conda-forge in a new ESP environment by:
conda create –name ESP
conda activate ESP
conda install -c conda-forge esptool
See https://anaconda.org/conda-forge/esptool for further information
Another option should be the online tool from Espressif
https://espressif.github.io/esptool-js/
I didn’t know they had an online tool.
thanks.
Thanks Joe that worked perfectly
Just be careful to use Chrome as a browser. My experience was that Mozilla does not work.
None of these commands worked for me.
I have python 3.11.2 installed
If you have python 3 installed but not in your system path then you have to invoke it with python3 -m and for python 2 you do python -m
esptool.py supports both python 3 and python 3.
Cheers
sorry that was meant to be
esptool.py supports both python 3 and python 2.
PS C:\Users\riza manalo> pip install setuptools
pip : The term ‘pip’ is not recognized as the name of a cmdlet, function, script file, or operable
program. Check the spelling of the name, or if a path was included, verify that the path is correct and
try again.
At line:1 char:1
+ pip install setuptools
+ ~~~
+ CategoryInfo : ObjectNotFound: (pip:String) [], CommandNotFoundException
+ FullyQualifiedErrorId : CommandNotFoundException
can’t recognize pip
Hi.
Do you have Python 3 installed on your system?
Regards,
Sara
how long it will take to erase data?
It usually doesn’t take long.
One minute maximum.
Regards,
Sara
Failed to communicate with the flash chip, read/write operations will fail. Try checking the chip connections or removing any other hardware connected to IOs
how to resolve this error??
Hi.
What is the exact error that you’re getting?
Regards,
Sara
I get the same error.
PS C:\Windows\system32> python -m esptool –chip esp32 erase_flash
esptool.py v4.6.2
Found 1 serial ports
Serial port COM8
Connecting….
Chip is ESP32-D0WDQ6-V3 (revision v3.0)
Features: WiFi, BT, Dual Core, 240MHz, VRef calibration in efuse, Coding Scheme None
Crystal is 40MHz
MAC: d4:d4:da:5a:de:c8
Uploading stub…
Running stub…
Stub running…
WARNING: Failed to communicate with the flash chip, read/write operations will fail. Try checking the chip connections or removing any other hardware connected to IOs.
Erasing flash (this may take a while)…
A fatal error occurred: Packet content transfer stopped (received 8 bytes)
PS C:\Windows\system32>
This is a brand new ESP-WRover Dev V1.6.
I thought I would try this erase operation, as I cannot write to thie flash on this device. This erase operation also does not work.
Does it have a BOOT/FLASH button?
Try to hold-down the button after you see the “Connecting…” message.
Regards,
Sara
hey, i cant enter in the bootloader because i uploaded a program that prevents the esp32 to enter the bootloader, is there any other way to factory reset without bootloader?
Re ESP32-S3 You might get this error:
“COMXXX failed to connect: This chip is ESP32-S3 not ESP32. Wrong –chip argument?
A fatal error occurred: Could not connect to an Espressif device on any of the X available serial ports.”
Solution: change the line to
“python -m esptool –chip esp32s3 erase_flash”
On some boards, the button to hold down on the ESP board might be labeled “RST” rather than “BOOT”
Thank you Sarah and Rui, as always your tutorials are incredible. I can only imagine the wonderful things people are creating because you two empower them. Respect.
Thanks you so much.
Regards,
Sara
correction
python -m esptool –chip esp32s3 erase_flash
Thanks.
Hi, i finish erasing the Flash of my ESP32-SOLO-1. am i suppose to reflash it with the same factory settings or it just reboots itself?
Hello, I am using the ESP32 wroom (30 pins – Dev Module). I erased the Flash Memory by writing the codes on my windows terminal (codes: python -m esptool –chip esp32 erase_flash).
now whenver I connect my esp32 to my laptop with the USB cable it floods my serial monitor screen with “e (7238) task_wdt: esp_task_wdt_reset(763): task not found” repeatedly almost for 20 seconds then after it runs my original codes
is there any solution to fix it?
Ciao, complimenti per i vostri articoli, sempre chiari. Ho cancellato la memoria di un ESP32 WROOM 32D come da articolo ma alla fine non mi funziona più il bluetoothmentre il resto funziona regolarmente. Cosa posso fare?
Hi, congratulations for your articles, always clear. I deleted the memory of an ESP32 WROOM 32D as per the article but in the end the bluetooth no longer works while the rest works normally. What can I do?
Hallo, I own a “NodeMCU-32S” that was trapped in an endless reboot, so I used your instructions to erease it by using “python -m esptool –chip esp32 erase_flash”. All went fine and it is ereased now. But now either Windows or Arduino IDE will recocnize the “NodeMCU-32S” Chip anymore. Windows 11 Devicemanger tells me it is a “Microsoft Serial Mouse”. Arduino IDE tells me an “unknown Device” on COM3. What can I do to solve these Problem? Installing Drivers new does not help. The installation of the CP210x Driver does not work. Nothing I tried so far was succesful.
If windows doesn’t see the ESP32 then it won’t be seen by the IDE either. I’ve had this happen and this is how I fixed it. When you look in the device manager what you see is “Port Alias’s” which are created from the driver you install. These can be corrupted. Unplug all the ESP’s you have connected and any USB device that’s not needed then open device manager. Now up top under “View” select “Show Hidden” Now under ports you should see greyed out the CP2100 alias that is corrupt or not working take a note of the COM number and see if there is another alias with the same number and if there is delete them both but on the next window don’t select delete driver. Once thats all done plug in the ESP32 and it should auto create a new COM alias on the next available number. That’s it it should be good to go.