ESP32 – ESPTool

Esptool is a versatile and powerful utility that has gained popularity in the world of IoT (Internet of Things) and embedded systems. Developed by Espressif Systems, a company renowned for its contributions to the ESP8266 and ESP32 microcontroller platforms, esptool is an indispensable tool for flashing firmware, managing memory, and debugging ESP-based devices. In this blog post, we’ll delve into the world of esptool, discussing what it is, its key features, and how to use it effectively.


Esptool is an open-source Python-based utility designed to interact with Espressif’s range of microcontrollers, particularly the ESP8266 and ESP32. These microcontrollers are widely used in various IoT and embedded systems applications, owing to their affordability and robust capabilities.

Esptool serves as a bridge between your computer and the ESP microcontroller, enabling you to perform a range of tasks, such as:

  1. Flashing Firmware: You can use esptool to write firmware onto the ESP8266 or ESP32. This is especially useful when you’re working on custom projects or updating your device’s software.
  2. Erasing Flash Memory: Sometimes, you need to wipe the flash memory on your microcontroller. Esptool allows you to do this efficiently.
  3. Managing Partitions: ESP microcontrollers often use a partition table to organize their storage. Esptool can assist in creating, updating, or modifying these partitions.
  4. Checking Chip Information: You can use esptool to retrieve critical information about your microcontroller, like its MAC address, chip ID, and flash size.
  5. Debugging: Esptool also facilitates debugging by allowing you to communicate with your microcontroller and read/write memory, making it a valuable tool for developers.

Key Features of Esptool

Now that you have a basic understanding of what esptool does, let’s explore some of its key features that make it an essential utility in the IoT development ecosystem.

  1. Cross-Platform Compatibility: Esptool is compatible with multiple operating systems, including Windows, macOS, and Linux. This makes it accessible to a wide range of developers.
  2. Simple Command Line Interface: Esptool offers a straightforward command-line interface (CLI) that makes it easy to integrate into build and deployment scripts. You can perform tasks with a single command, simplifying the flashing process.
  3. Flexible Firmware Flashing: It supports various firmware formats, such as binary files, ELF, and even .zip archives. This flexibility allows you to work with a wide range of firmware files.
  4. Speed and Efficiency: Esptool is known for its speed and efficiency when flashing firmware. It optimizes the writing process to reduce the time required to program an ESP device.

Installation and Dependencies

You will need Python 3.7 or newer installed on your system to use the latest version of If your use case requires Python 2.7, 3.4, 3.5, or 3.6, please use v3.3.* instead.

While OS X comes with many Unix utilities, those familiar with Linux systems will notice one key component missing: a package manager. Homebrew fills this void.

To install Homebrew, open Terminal or your favourite OS X terminal emulator and run

/bin/bash -c "$(curl -fsSL"

Now, we can install Python 3:

brew install python

This will take a minute or two.

python3 -m pip install –upgrade pip
  1. If the latest version is already installed, you will see a message saying, ‘requirement already satisfied.’
  2. If it’s not, you will see the version of pip that was just installed.

The latest stable esptool release can be installed from PyPI via pip:

pip install esptool

With some Python installations this may not work, and you’ll receive an error, try:

python -m pipinstall esptool 


pip3 install esptool

Or consult your Python installation manual for information about how to access pip.

Setuptools is also a requirement, which is not avapip is a package management system for Python, and if you’ve installed Python on your Mac, you probably already have pip. However, if not, it’s very easy to install, as long as you’re comfortable with Terminal — using either Ensurepip or Homebrew. And once you have downloaded and installed it, you can start downloading Python software packages.ilable on all systems by default. You can install it by a package manager of your operating system, or by pip install setuptools.

After installing, you will have installed into the default Python executables directory, and you should be able to run it with the command or python -m esptool. Please note that probably only python -m esptool will work for Pythons installed from Windows Store.

How to fix ‘zsh: command not found: python’

When trying to run python from terminal, it is possible to run into the following issue:

zsh: command not found: python

This can happen on any system, but does occur slightly more commonly on macOS since they removed native python support in macOS 12.3. Fortunately, this issue is easy to fix.

Step 1: make sure Python is installed

The first thing you should check is that python is installed. You can install python from terminal if you have brew installed by simply typing:

brew install python

You can also download the executable directly from the Python website to install it. Once python is installed, try running python from terminal again. If you still face the same issue, move to step 2.

Step 2: add python to zsh

The next step is to add python to zsh so that it will run upon typing the python command. You can do this by running the following in terminal:

echo "alias python=/usr/bin/python3" >> ~/.zshrc

This will configure your zsh profile to run /usr/bin/python3 when python is run. If you are still facing issues, ensure that python=$ where the $ sign should equal, the path python is installed on.

Step 3: restart terminal

Now that you’ve done that, simply restart your terminal. When you open it again, your python command should work successfully.

Using Esptool

After installation, you can use esptool with the following basic commands:

  1. Erasing Flash Memory: erase_flash
  1. Flashing Firmware: write_flash -z 0x1000 firmware.bin
  1. Checking Chip Information: chip_id
  1. Managing Partitions:

Esptool can work with partition tables, but this is more advanced and requires knowledge of the ESP-IDF (ESP IoT Development Framework). You can explore this further in the official Espressif documentation.


Esptool is an invaluable tool for anyone working with Espressif’s ESP8266 and ESP32 microcontrollers. Its cross-platform compatibility, ease of use, and support for various tasks, including flashing firmware and managing memory, make it a must-have utility in the world of IoT and embedded systems development. Whether you are a hobbyist or a professional developer, esptool can simplify the development and deployment process for your ESP-based projects.

Scroll to Top