Compilar firmware para el modulo ESP8266
Publicado: 11 Abr 2015 23:28
Comprobado que funciona correctamente en una Ubuntu 14.04
- Descargar el SDK y construir el toolchain:
https://github.com/pfalcon/esp-open-sdk
Instalar los siguientes paquetes:
Descargar el SDK del repositorio:
Tarda un rato bastante largo en descargar y compilar todo lo necesario.
Para actualizar del repositorio con futuros cambios:
- Obtener el firmware:
https://github.com/nodemcu/nodemcu-firmware
Para empezar es necesario añadir el directorios donde residen las herramientas de compilacion a la variable PATH:
Despues ya podemos iniciar la compilacion accediendo al directorio donde hemos descargado el firmware y ejecutando:
- Flashear el firmware en el modulo:
Necesitaremos varias cosas para realizar el flasheo: el script esptool.py (se descarga con el propio firmware) y un FTDI que funcione a 3.3V (http://www.dx.com)
A la hora de realizar las conexiones hay que tener en cuenta que es necesario poner el modulo en modo upload, para ello conectaremos el pin GPIO0 a tierra tal y como se aprecia en la siguiente imagen:
Nos aseguraremos de estar en el directorio donde hemos descomprimido el firmware y ejecutaremos los siguientes comandos:
En este momento conectaremos el modulo al puerto serie. Yo he tenido comportamientos bastante extraños si lo alimentaba por medio del FTDI, asi que al final he optado por alimentarlo con una fuente externa (solo hay que tener la precaucion de conectar la masa del FTDI con el masa de la fuente).
El orden para conectarlo es: primero el FTDI al puerto serie y despues encender la fuente de alimentacion.
Una vez conectado debemos ejecutar el siguiente comando:
Se nos mostrara por pantalla el avance del proceso y cuando el script ha terminado.
Para comprobar que todo es correcto apagaremos la fuente de alimentacion y nos conectaremos con el terminal serie para poder observar el arranque. Retiramos el pin a masa que pone el modulo en modo download (GPIO0) y encedemos la fuente de alimentacion. Si todo ha ido bien veremos en la pantalla unas lineas similares a estas:
- Cargar un script de LUA:
Podemos utilizar la herramienta luatool: https://github.com/4refr0nt/luatool, un script en Python.
No aseguraremos de tener instalado pyserial:
El uso es muy sencillo y proporciona mucha informacion del proceso.
Para realizar una prueba podemos editar el fichero init.lua que proporcionan en el propio comprimido del script y adecuarlo con los datos de nuestra conexion Wifi:
Despues ejecutamos el script de la siguiente maneras:
Para comprobar que todo esta correcto ejecutamos un terminal serie e introducimos los siguientes comandos:
Primero reiniciamos el ESP8266.
Y verificamos que nos conectamos a la red Wifi que hemos configurado:
- Restaurar el firmware original:
Si por alguna razon queremos restaurar el firmware original el procedimiento es bastante sencillo.
El firmware lo podemos descargar de esta web, se trata de un comprimido conteniendo un unico archivo .bin:
http://www.electrodragon.com/w/ESP8266_Firmware
Despues conectamos el GPIO0 del modulo a GND para ponerlo en modo descarga y conectamos la alimentacion.
Por ultimo accedemos al directorio del SDK donde tengamos el script sptool.py, copiamos el .bin que hemos descargado antes, y lo ejecutamos de la siguiente manera:
El archivo v0.9.2.2ATFirmware.bin es el firmware que descargamos antes, es posible que el nombre sea diferente.
- Descargar el SDK y construir el toolchain:
https://github.com/pfalcon/esp-open-sdk
Instalar los siguientes paquetes:
Código: Seleccionar todo
$ sudo apt-get install make unrar autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python sed
Código: Seleccionar todo
$ git clone https://github.com/pfalcon/esp-open-sdk
$ cd esp-open-sdk
$ make STANDALONE=y
Para actualizar del repositorio con futuros cambios:
Código: Seleccionar todo
$ make clean
$ git pull
$ git submodule update
- Obtener el firmware:
https://github.com/nodemcu/nodemcu-firmware
Para empezar es necesario añadir el directorios donde residen las herramientas de compilacion a la variable PATH:
Código: Seleccionar todo
export PATH=$PATH:<RUTA_ADECUADA>/esp-open-sdk/xtensa-lx106-elf/bin/
Código: Seleccionar todo
$ make
- Flashear el firmware en el modulo:
Necesitaremos varias cosas para realizar el flasheo: el script esptool.py (se descarga con el propio firmware) y un FTDI que funcione a 3.3V (http://www.dx.com)
A la hora de realizar las conexiones hay que tener en cuenta que es necesario poner el modulo en modo upload, para ello conectaremos el pin GPIO0 a tierra tal y como se aprecia en la siguiente imagen:
Nos aseguraremos de estar en el directorio donde hemos descomprimido el firmware y ejecutaremos los siguientes comandos:
Código: Seleccionar todo
esptool.py elf2image app/.output/eagle/debug/image/eagle.app.v6.out
El orden para conectarlo es: primero el FTDI al puerto serie y despues encender la fuente de alimentacion.
Una vez conectado debemos ejecutar el siguiente comando:
Código: Seleccionar todo
esptool.py write_flash 0x00000 app/.output/eagle/debug/image/eagle.app.v6.out-0x00000.bin 0x10000 app/.output/eagle/debug/image/eagle.app.v6.out-0x10000.bin
Para comprobar que todo es correcto apagaremos la fuente de alimentacion y nos conectaremos con el terminal serie para poder observar el arranque. Retiramos el pin a masa que pone el modulo en modo download (GPIO0) y encedemos la fuente de alimentacion. Si todo ha ido bien veremos en la pantalla unas lineas similares a estas:
Código: Seleccionar todo
NodeMCU 0.9.5 build 20150318 powered by Lua 5.1.4
lua: cannot open init.lua
- Cargar un script de LUA:
Podemos utilizar la herramienta luatool: https://github.com/4refr0nt/luatool, un script en Python.
No aseguraremos de tener instalado pyserial:
Código: Seleccionar todo
$ sudo apt-get install python-serial
Para realizar una prueba podemos editar el fichero init.lua que proporcionan en el propio comprimido del script y adecuarlo con los datos de nuestra conexion Wifi:
Código: Seleccionar todo
-- wifi config start
wifi.sta.config("SSID","MI_CONTRASEÑA")
-- wifi config end
Código: Seleccionar todo
./luatool.py --port /dev/ttyUSB0 --src init.lua --dest init.lua --verbose
./luatool.py --port /dev/ttyUSB0 --src main.lua --dest main.lua --verbose
Primero reiniciamos el ESP8266.
Código: Seleccionar todo
node.restart()
Código: Seleccionar todo
dofile("main.lua")
- Restaurar el firmware original:
Si por alguna razon queremos restaurar el firmware original el procedimiento es bastante sencillo.
El firmware lo podemos descargar de esta web, se trata de un comprimido conteniendo un unico archivo .bin:
http://www.electrodragon.com/w/ESP8266_Firmware
Despues conectamos el GPIO0 del modulo a GND para ponerlo en modo descarga y conectamos la alimentacion.
Por ultimo accedemos al directorio del SDK donde tengamos el script sptool.py, copiamos el .bin que hemos descargado antes, y lo ejecutamos de la siguiente manera:
Código: Seleccionar todo
$ ./esptool.py write_flash 0x000000 v0.9.2.2ATFirmware.bin