Como actualizar el firmware del ESP8266

En esta entrada vamos a ver como se puede actualizar el firmware del módulo ESP8266 ESP-01, aunque sirve el procedimiento sirve para cualquier otro que tenga el pin GPIO0 accesible (el ESP05 hay que hackearlo para actualizarlo, por ejemplo). Para ello necesitamos el software para hacer el upload del firmware y el firmware que queramos instalarle al módulo. Para Linux tenemos la herramienta esptool, que podemos descargar desde el siguiente repositorio git:

mkdir /opt/ESP8266
cd /opt/ESP8266
git clone https://github.com/themadinventor/esptool

 

Tenemos también varios firmwares que le podemos instalar al módulo en función de lo que queremos hacer: el de nodeMCU, el de comandos AT, programas propios que podemos desarrollar con el SDK, etc.

El último firmware disponible de nodeMCU se puede descargar desde aquí, y en el momento de escribir estas lineas son este (con soporte punto flotante) y este (sin soporte punto flotante).

El firmware AT es algo más complicado de encontrar en un solo archivo bin. En el SDK del módulo se pueden encontrar varios archivos bin que hay que grabar en varias zonas de la flash, en lugar de un solo archivo como ocurre con el firmware nodeMCU. No es complicado hacerlo (cuando ya te has peleado bastante con él, pero para eso estoy yo aquí 🙂 ). El último SDK disponible lo podéis bajar desde la web de Espressif, aquí (en el epígrafe Announcements/Latest Release). Dentro del enlace podéis ver que se puede descargar un paquete con los binarios del firmware AT solo, o todo el SDK:

latest
Entrada en el foro de Espressif

Conexiones del módulo para actualizar el firmware

El esquema del conexiones del módulo ESP-01 es el siguiente:

ESP-01
Esquema del ESP-01
  • VCC: fuente de alimentación externa de 3.3v
  • GND: 0V de la fuente de alimentación externa, unida con GND del modulo USB serie.
  • CH_PD: Conectado a VCC para activar el módulo.
  • RST: Sin conectar (al aire)
  • GPIO0: Sin conectar o al aire para arranque en modo normal, a GND para grabar firmware.
  • GPIO2: Sin conectar (al aire)
  • UTXD: al pin RX del módulo USB-Serie
  • URXD: al pin TX del módulo USB-Serie, a través de un divisor de tensión para que al módulo ESP no le entren mas de 3.3v por este pin. El divisor de tensión que uso es el siguiente:
    divisor
    Divisor de tensión

     

Para entrar en modo upload de firmware, tenemos que desconectar el módulo de la alimentación, conectar el pin GPIO0 a GND, y volver a conectar la corriente. En ese momento ejecutamos el comando esptool.py y se actualiza el firmware. Después desconectamos el modulo de la alimentación, desconectamos el pin GPIO0 (lo dejamos al aire) y volvemos a conectar la alimentación para que arranque el firmware recién grabado.

Grabando el firmware nodeMCU

Para grabar el firmware en la flash del módulo, usamos el siguiente comando:

esptool.py --port /dev/ttyUSB0 write_flash 0x00000 nodemcu_float_0.9.6-dev_20150704.bin

Donde:

  • –port /dev/ttyUSB0 indica el dispositivo USB en el que tenemos conectado el conversor USB-serie y el modulo ESP8266-01
  • write_flash es el comando para indicar que vamos a grabar un firmware en la memoria del dispositivo
  • 0x00000 nodemcu_float_0.9.6-dev_20150704.bin es la dirección base en la que vamos a grabar el fichero bin indicado. Puede haber una lista de parejas <direccion_base> <fichero_bin>, como ocurre para el firmware AT.

Grabando el firmware AT

En el caso del firmware AT, al descomprimir el fichero zip nos encontramos con la siguiente estructura de archivos:

atf

En el archivo readme.txt, nos indica las direcciones base, y los archivos bin que tenemos que grabar para instalar el firmware dependiendo del tamaño de la memoria flash que tenga el módulo, en mi caso, para el módulo ESP01 con flash de 4Mbit nos indica lo siguiente:

readme

Por lo que nos quedaría el siguiente comando:

[22:17] jose@titanio:~/$ esptool.py --port /dev/ttyUSB0 write_flash 0x00000 noboot/eagle.flash.bin 0x40000 noboot/eagle.irom0text.bin 0x3e000 blank.bin 0x7e000 blank.bin 0x7c000 esp_init_data_default.bin
Connecting...
Erasing flash...
Writing at 0x00006c00... (100 %)
Erasing flash...
Writing at 0x0007b000... (100 %)
Erasing flash...
Writing at 0x0003ec00... (100 %)
Erasing flash...
Writing at 0x0007ec00... (100 %)
Erasing flash...
Writing at 0x0007c000... (100 %)

Leaving...

Para probar este firmware podemos usar picocom, conectando a 115200 baudios:

[22:18] jose@titanio:~/$ picocom --omap crcrlf --emap crcrlf /dev/ttyUSB0 -b 115200
picocom v1.7

port is : /dev/ttyUSB0
flowcontrol : none
baudrate is : 115200
parity is : none
databits are : 8
escape is : C-a
local echo is : no
noinit is : no
noreset is : no
nolock is : no
send_cmd is : sz -vv
receive_cmd is : rz -vv
imap is :
omap is : crcrlf,
emap is : crcrlf,

Terminal ready
AT+RST

OK

ets Jan 8 2013,rst cause:2, boot mode:(3,0)

load 0x40100000, len 23200, room 16
tail 0
chksum 0x72
load 0x3ffe8000, len 948, room 8
tail 12
chksum 0x50
ho 0 tail 12 room 4
load 0x3ffe83b8, len 3888, room 12
tail 4
chksum 0x1d
csum 0x1d
don't use rtc mem data
r�9
ready

AT

OK
AT+GMR
AT version:0.50.0.0(Sep 18 2015 20:55:38)
SDK version:1.4.0
compile time:Sep 18 2015 21:32:07
OK

Y con esto ¡ya tenemos nuestro módulo actualizado con el último firmware disponible!

 

3 comentarios

Añadir un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.