Como usar Esptool

Esptool es un conjunto de herramientas creadas en Python para programar las placas de desarrollo ESP8266, ESP8585, ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-S2 y ESP32-S3.

1.- Instala la ultima versión de Python (ocupas 3.10 o superior., sigue la guía)

2.- Instala Visual Studio Code (Sigue el tutorial)

3.- Crea una carpeta por ejemplo esptool y abren la carpeta con Visual Studio Code VSC

Marcamos estas opciones

4.- Creamos un entorno virtual para Python

Así gestionamos dependencias y paquetes de manera independiente. En VSC abrimos terminal y escribimos:

En Windows

python -m venv esptoolenv

Para MacOS / Linux

python3 -m venv esptoolenv

5.- Activamos el entorno virtual

En Windows

Para evitar este error:

Deshabilitar las políticas de seguridad y poder abrir el script., ejecuta PowerShell como administrador

Set-ExecutionPolicy -ExecutionPolicy Bypass -Scope Process
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

Escribimos S y Enter, en cada uno

Ahora si lo habilitamos

esptoolenv\Scripts\activate

En MacOS / Linux

source esptoolenv/bin/activate

Nos crear una carpeta esptoolenv en donde se instalaran los paquetes, scripts y todas las configuraciones del entorno

6.- Instalamos esptool

En Windows

pip install esptool

En MacOS / Linux

pip3 install esptool

7.- Instala los controladores para tu placa ESP

necesarios para que tu equipo se comunique con el ESP

8.- Conecta tu ESP vía USB y anota el puerto

En Windows

Abrir Administrador de dispositivos > desplegamos Puertos (COM y LPT)

Para este caso es el COM3

En MacOS / Linux

sudo dmesg | grep tty

Usualmente están enumerados /dev/ttyUSB0,1, 2, 3, 4, 5

9.- Programar o Flashear un ESP

Para este ejemplo voy a usar una placa ESP32 y el firmware de BlueRetro el cual nos permite programar como receptor inalámbrico de controles de video juegos recientes (Xbox One S/X, PlayStation 5, PlayStation 4, PlayStation 3, Switch, Wii, Wii U, etc.) en consolas clásicas (N64, PS1, PS2, PSX, GameCube, Wii, NES, SNES, Dreamcast, etc.)., lo puedes descargar de esta pagina https://darthcloud.itch.io/blueretro Botón Download Now > apoya el proyecto o No thanks, just take me to the downloads > y descarga v25.04_hw1.zip, descomprímelo en el carpeta de trabajo esptool

En las carpetas bootloader, ota y partition_table se encuentran los binarios base que sumado al binario especifico para cada consola (ejemplo N64 BlueRetro_hw1_n64.bin) conformaran el firmware

En Windows

esptool -c esp32 -p COM3 -b 460800 --before default-reset --after hard-reset write-flash --flash-mode dio --flash-size 4MB --flash-freq 40m 0x1000 ./bootloader/bootloader.bin 0x8000 ./partition_table/partition-table.bin 0xd000 ./ota/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin

Remplaza COM3 por el puerto asignado COM1, 2, 3, 4, 5 etc.

En cuanto aparezca Connecting……… presiona el botón BOOT del ESP32 y suelta

En MacOS / Linux

sudo esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 --before default-reset --after hard-reset write-flash --flash-mode dio --flash-size 4MB --flash-freq 40m 0x1000 ./bootloader/bootloader.bin 0x8000 ./partition_table/partition-table.bin 0xd000 ./ota/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin

Remplaza /dev/ttyUSB0 el puerto de tu ESP /dev/ttyUSB0,1, 2, 3, 4, 5 etc.

Sobre las opciones de esptool

-c / --chip: especificamos que tipo de chip ESP8266, ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-S2 y ESP32-S3 Se puede omitir en versiones 5 y superiores lo detecta en automático (para verificar ejecuta esptool version)

-p / --port: especificamos el puerto de comunicación que se le ha asignado al conectarlo vía USB para Windows COM0,1,2,3,… en MacOs / Linux /dev/ttyUSB0,1,2,3,… Este parámetro se puede omitir ya que dinámicamente este buscara entre los puertos disponibles

-b / --baud: La velocidad de transferencia en baudios los mas comunes -b 230400 -b 460800 -b 921600 -b 1500000., por defecto es 115200 

Modos de reseteo

Por defecto esptool intenta restablecer por completo el chip al modo de gestor de arranque antes Inicia y reinicia el chip para ejecutar el programa normal una vez que se completa
--before default-reset: es el valor predeterminado, que intentar restablecer el chip al modo de gestor de arranque.
--before no-reset: omitirá las asignaciones y simplemente comenzará a enviar un comando de sincronización en serie al chip
--before no-reset-no-sync: omitirá las asignaciones y omitirá también el comando de sincronización en serie

write-flash

Escribe los datos binarios en la Flash y tiene los siguientes argumentos:
--flash-mode / -fm: modo de estrada y salida del flasheo los valores que puede tener son keep, qio, qout, dio, dout., por defecto es keep, la mayoría de los módulos ESP32 utilizan qio.

--flash-size / -fs: Tamaño en megabytes del flash. Los valores válidos son keep, detect, 1MB, 2MB, 4MB, 8MB, 16MB podemos usar -fs detect para detectarlo de manera automática si falla el valor por defecto será de 4MB.
--flash-freq / -ff: frecuencia del flasheo es la velocidad en MHz de interacción con el dispositivo ESP. Los valores válidos son keep, 40m, 26m, 20m, 80m por defecto es keep. La mayoría de los chips funciona con velocidades de reloj de 40 MHz.

A partir de la versión 2.0 estos parámetros no son necesarios --flash-mode, --flash-size y --flash-freq.

Después del parámetro write-flash viene la direcciones que ocupara en memoria dentro del ESP y la ruta / archivo binario que se escribirá en este., las direcciones se especifican en formato hexadecimal 0x1000 o su valor equivalente en decimal 4096., si quieres convertirlo usa la consola de Python REPL https://repl.raymundopizano.com/

Como vimos algunos de los parámetros no son necesarios ya que estamos usando una versión superiora la 5 de esptool (v5.1.0) y los detecta o completa de manera dinámica por lo que podemos resumir de la siguiente manera:

esptool write-flash 0x1000 ./bootloader/bootloader.bin 0x8000 ./partition_table/partition-table.bin 0xd000 ./ota/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin

En MacOS / Linux

sudo esptool.py write-flash 0x1000 ./bootloader/bootloader.bin 0x8000 ./partition_table/partition-table.bin 0xd000 ./ota/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin

Probamos nuestro ESP32 con Blueretro

Vamos a la pagina https://blueretro.io/ (solo es compatible con Google Chrome y Microsoft Edge)

10. Merge fusionar los binarios y escribirlo

Fusionamos múltiples archivos binarios .bin para crear uno solo, esto lo hacemos con el comando merge-bin -o nombre-merged-flash.bin la opción -o es output / salida

En Windows

esptool -c esp32 merge-bin -o n64_blueretro_hw1v25.04_merged.bin --flash-mode dio --flash-size 4MB 0x1000 ./bootloader/bootloader.bin 0x8000 ./partition_table/partition-table.bin 0xd000 ./ota/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin

En MacOS / Linux

sudo esptool.py -c esp32 merge-bin -o n64_blueretro_hw1v25.04_merged.bin --flash-mode dio --flash-size 4MB 0x1000 ./bootloader/bootloader.bin 0x8000 ./partition_table/partition-table.bin 0xd000 ./ota/ota_data_initial.bin 0x10000 BlueRetro_hw1_n64.bin

Escribir el archivo merged / fusionado

Como este ya contiene todas las partes y direcciones en la flash, solo indicamos la dirección hexadecimal 0x0 / decimal 0 donde comenzara a escribir

esptool write-flash 0x0 n64_blueretro_hw1v25.04_merged.bin

11. Actualizar esptool

pip3 install --upgrade esptool

12. Desactivar ENV

Una vez terminado de usar la esptool podemos deshabilitar el entorno virtual

deactivate

Y si ya no lo ocupamos borramos la carpeta esptoolenv

Otra alternativa solo para Windows es Flash Download Tools.

Mas fácil de usar que esptool. Compatible con Windows 7, 10 y 11 (64bits).

Descarga y descomprime Flash Download Tool

Escribir los binarios

Ejecuta flash_download_tool_3.9.9_R2.exe en la carpeta donde lo descomprimiste

Selecciona ESP32 (o tu placa a programar) y botón OK

Ubica los binarios de Blueretro en sus carpetas con el botón […], escribe su dirección @ y marca todas las casillas.

BINDirección
bootloader.bin0x1000
partition-table.bin0x8000
ota_data_initial.bin0xD000
BlueRetro_hw1_n64.bin (la versión para tu consola)0x10000

Verifica que SPI SPEED este en 40MHz, SPI MODE en DIO., estos valores están por defecto

Conecta tu ESP vía USB y anota el puerto

Abrir Administrador de dispositivos > desplegamos Puertos (COM y LPT)

Para este caso es el COM3 y selecciónalo en el Flash Download Tool en la opción COM:

Presiona el botón START en cuanto aparezca SYNC presiona el botón BOOT del ESP32 y suelta en cuanto cambie a Download., al terminar aparecerá FINISH.

Merge fusionar los binarios

Fusionamos múltiples archivos binarios .bin para crear uno solo firmware. Mantén todos los parámetros anteriores y presiona [ ConbineBin ], abrirá una carpeta con el target.bin

Escribir el bin fusionado / merged

El target.bin contiene todas las partes del firmware por lo que se escribe en la dirección inicial de memoria hexadecimal 0x0 o decimal 0, ubica el archivo en el botón […] solo marca el targe.bin y escribe en la dirección @ 0x0, conserva los para metros de la imagen y realiza el mismo procedimiento de escritura del .bin

View more articles
  • Como usar Esptool

    Esptool es un conjunto de herramientas creadas en Python para programar las placas de desarrollo ESP8266, ESP8585, ESP32, ESP32-C2, ESP32-C3, ESP32-C6, ESP32-H2, ESP32-S2 y ESP32-S3. 1.- Instala la ultima versión de Python (ocupas 3.10 o superior., sigue la guía) 2.- Instala Visual Studio Code (Sigue el tutorial) 3.- Crea una carpeta por ejemplo esptool y…

  • Como configurar un entorno de desarrollo para el lenguaje C / C++

    Para crear un entorno de trabajo para poder jugar con el lenguaje C recomiendo 1. Instalar compilador C / C++ Para Windows Descarga e instala MinGW Ejecuta MinGW Installer Manager selecciona los paquetes básicos e instálalos (durara algunos minutos ya que los descarga) Agregar MinGW al PATH Es importante agregarlo a las variables del sistema…

  • Python 101: Instalar entorno de trabajo IDE Visual Studio Code

    Existe un sin fin de editores de código IDE (Integrated development environment / Entorno de desarrollo integrado) especiales para Python como: Pero la que recomiendo es Visual Studio Code (descarga e instala el adecuado para tu Sistema Operativo Windows, Linux o Mac) E instala estas extensiones: En VSC le damos clic al Icono de Extensiones…