Publi

Cómo actualizar el firmware del ESP8266 manualmente


Tanto si lo que queremos es tener la última versión del software, rescatar un chip que creíamos perdido o programar nuestro chip con una versión propia. Nos viene muy bien hacer la reprogramación de nuestro ESP8266 y en este post veremos los pasos básicos para hacerlo.

Son mediados de agosto de 2017, el post no será muy largo 🙂

Conexión con adaptador USB

Tenemos que tener en cuenta los pins de nuestro ESP8266 y tener localizados GPIO0 y GPIO2 que son los pins que usaremos para entrar en modo programación. en este caso GPIO0 lo pondremos a nivel bajo (0V) y GPIO2 a nivel alto (3.3V). Esto lo vemos aquí.
Representaré en el diagrama la conexión con un adaptador USB-UART. Si queréis ver cómo se conectaría un Arduino, podéis verlo en el anterior post.

Como vemos, el único que dejamos sin conectar es el RESET.

Tenemos que tener en cuenta que el modo programación sólo funciona si arrancamos el chip con esta configuración. Es más, una vez arrancado el programa, GPIO0 y GPIO2 pueden tener los valores que quieran.

Herramienta para programar

Vamos a hacer la programación con la herramienta esptool, hecha en Python. Que podemos descargarla desde GitHub,o instalarla directamente con:

pip install esptool

Descargando el firmware

Podemos descargar el firmware precompilado desde el GitHub de espressif. Ahí veremos varios archivos:

  • boot_vxxx.bin : Arranque
  • at/512+512/user1.1024.new.2.bin : Software
  • at/512+512/user1.1024.new.2.bin : Software
  • esp_init_data_default : Inicialización de datos por defecto
  • blank.bin : Todo lleno de unos, para tener el chip limpio de valores salvados y demás.

Subiendo el firmware

Para ello tenemos que tener en cuenta el dispositivo que tenemos. Por ejemplo el ESP8266-01 es de 8Mbit, o 1Mb. Aunque el ESP-12E, por ejemplo tiene 4Mb. Incluso con un poco de maña se puede sustituir el chip de memoria por uno más grande. Por lo que debemos mirar las direcciones de memoria que escribiremos.
El arranque (boot) siempre irá en la 0x00000 (lo primero que nos encontramos), y el software irá a partir del 0x01000. Lo importante es la configuración y los datos de usuario que suele ir al final de la memoria, como vemos aquí.

Para proceder, estos fueron los comandos que yo ejecuté en mi caso.
boot_v1.7.bin:

./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0x0000 ../boot_v1.7.bin
esptool.py v2.1-beta1
Connecting….
Chip is ESP8266
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Auto-detected Flash size: 1MB
Flash params set to 0x0020
Compressed 4080 bytes to 2936…
Wrote 4080 bytes (2936 compressed) at 0x00000000 in 0.3 seconds (effective 126.5 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting…

user1.1024.new.2.bin:

./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0x1000 ../user1.1024.new.2.bin
esptool.py v2.1-beta1
Connecting….
Chip is ESP8266
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Auto-detected Flash size: 1MB
Compressed 427060 bytes to 305755…
Wrote 427060 bytes (305755 compressed) at 0x00001000 in 26.4 seconds (effective 129.4 kbit/s)…
Hash of data verified.
<ins class="adsbygoogle"
style="display:block"
data-ad-client="ca-pub-1713542931034615"
data-ad-slot="2358673881"
data-ad-format="auto">
(adsbygoogle = window.adsbygoogle || []).push({});
Leaving…
Hard resetting…

esp_init_data_default.bin:

./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0xfc000 ../esp_init_data_default.bin
esptool.py v2.1-beta1
Connecting….
Chip is ESP8266
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Auto-detected Flash size: 1MB
Compressed 128 bytes to 75…
Wrote 128 bytes (75 compressed) at 0x000fc000 in 0.0 seconds (effective 84.9 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting…

blank.bin:

./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0xfe000 ../blank.bin
esptool.py v2.1-beta1
Connecting….
Chip is ESP8266
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Auto-detected Flash size: 1MB
Compressed 4096 bytes to 26…
Wrote 4096 bytes (26 compressed) at 0x000fe000 in 0.0 seconds (effective 3935.1 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting…
./esptool.py --chip esp8266 --port /dev/ttyACM0 write_flash -fm qio 0x7e000 ../blank.bin
esptool.py v2.1-beta1
Connecting….
Chip is ESP8266
Uploading stub…
Running stub…
Stub running…
Configuring flash size…
Auto-detected Flash size: 1MB
Compressed 4096 bytes to 26…
Wrote 4096 bytes (26 compressed) at 0x0007e000 in 0.0 seconds (effective 3919.7 kbit/s)…
Hash of data verified.
Leaving…
Hard resetting…

Lo malo, es que cada vez que subo un archivo tengo que cortar la corriente y volver a alimentar el dispositivo para volver a entrar en modo programación.

La prueba

Una vez completado el proceso, podemos pedir información a nuestro ESP8266 conectando con el puerto serie (115600 baudios por defecto) y pidiendo:

AT+GMR
AT version:1.4.0.0(May  5 2017 16:10:59)
SDK version:2.1.0(116b762)
compile time:May  5 2017 16:37:48
OK

Y, como vemos, ya tengo una versión mucho más nueva en el chip.

También podría interesarte...

There are 3 comments left Ir a comentario

  1. Pingback: Cómo actualizar el firmware del ESP8266 manualmente | PlanetaLibre /

  2. luis /
    Usando Mozilla Firefox Mozilla Firefox 55.0 en Ubuntu Linux Ubuntu Linux

    Gracias!!!.Gracias a este tutorial he conseguido recuperar un ESP8266-01 que ya daba por muerto.

    1. Gaspar Fernández / Post Author
      Usando Mozilla Firefox Mozilla Firefox 55.0 en Ubuntu Linux Ubuntu Linux

      ¡Luis! ¡Me alegro un montón! Muchas gracias por tu comentario.

Leave a Reply