El modulo ESP8266 es un dispositivo de las tecnologias IoT que nos permite hacer enlaces Inalambricos sobre Sensores o dispositivos, este es capaz de transformar los datos ingresados por su puerto Serial o Entradas GPIO en Señales Inalambricas que viajan a travez del protocolo TCP/IP y pueden ser recibidas en algun servidor o sobre otro modulo.

Para el siguiente ejercicio, vamos a realizar la actualizacion del Firmware sobre el modulo inalambrico desde nuestro equipo con GNU/Linux.

Herramientas.

Descargando el Firmware.

En la WEB del desarrollador, podremos encontrar los direfentes archivos para poder realizar la actualizacion del chip desde la plataforma microsoft por el SDK.
Nosotros en este caso, vamos a realizarla desde nuestro sistema Linux con una aplicacion conocida como "esptool".

sobre nuestro directorio de trabajo, descargamos la ultima version del firmware, si se desea descargar la ultima para el momento que usted lee este post, cambie la URL ingresando a la WEB y verificandola de nuevo.
para el dia de hoy junio 2 del 2018, la ultima version es V1.6.1

$ wget https://www.espressif.com/sites/default/files/ap/esp8266_at_bin_v1.6.1.zip

descomprimimos el archivo que descargamos

$ unzip esp8266_at_bin_v1.6.1.zip -d firmware

Accedemos al directorio de la descarga realizada y validamos el archivo descargado.

$ cd firmware/bin/ && ls -l
total 32
drwxr-xr-x 4 heberth heberth 4096 feb 13 01:55 at
drwxr-xr-x 4 heberth heberth 4096 feb 13 01:55 at_sdio
-rwxr-xr-x 1 heberth heberth 4096 feb 13 01:55 blank.bin
-rwxr-xr-x 1 heberth heberth 1936 feb 13 01:55 boot_v1.2.bin
-rwxr-xr-x 1 heberth heberth 3856 feb 13 01:55 boot_v1.6.bin
-rwxr-xr-x 1 heberth heberth 4080 feb 13 01:55 boot_v1.7.bin
-rwxr-xr-x 1 heberth heberth  128 feb 13 01:55 esp_init_data_default_v05.bin
-rwxr-xr-x 1 heberth heberth  128 feb 13 01:55 esp_init_data_default_v08.bin

Instalando herramientas.

Para poder realizar la actualizacion del chip sobre GNU/Linux, es necesario tener instalada la herramienta "esptool" accesible via python-pip, lo primero que haremos es instalar python-pip y a continuacion esptool.

Instalando python-pip

$ sudo apt-get install python-pip

si todo fue correcto, procedemos a instalar esptool.

$ sudo pip install esptool
Collecting esptool
Requirement already satisfied: pyaes in /usr/local/lib/python2.7/dist-packages (from esptool) (1.6.1)
Requirement already satisfied: pyserial>=2.5 in /usr/local/lib/python2.7/dist-packages (from esptool) (3.4)
Requirement already satisfied: ecdsa in /usr/local/lib/python2.7/dist-packages (from esptool) (0.13)
Installing collected packages: esptool
Successfully installed esptool-2.3.1

Verificando el CHIP ESP8266-01

Para proceder con la actualizacion del Firmware del dispositivo, es necesario contar con un modulo USB-TTL o USB to UART RS232 Serial.
este se debe conectar al CHIP como se muestra en la siguiente imagen, este es el modo de conexion "Normal".

  • Normal-Mode

si todo ha salido correcto, debemos proceder a realizar la conexion del USB-TTL con el Computador por medio de un puerto USB.

Si el computador reconoce el dispositivo correctamente obtendremos la salida.

$ sudo dmesg -c
[ 9406.923421] usb 2-1: new full-speed USB device number 20 using xhci_hcd
[ 9407.072108] usb 2-1: New USB device found, idVendor=067b, idProduct=2303
[ 9407.072112] usb 2-1: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 9407.072114] usb 2-1: Product: USB-Serial Controller
[ 9407.072116] usb 2-1: Manufacturer: Prolific Technology Inc.
[ 9407.072594] pl2303 2-1:1.0: pl2303 converter detected
[ 9407.073204] usb 2-1: pl2303 converter now attached to ttyUSB0

Como podemos observar, el disposirivo fue montado sobre /dev/ttyUSB0
Es necesario darle permisos a nuestro usuario para que pueda acceder y escribir sobre estos dispositivos.

$ sudo usermod -a -G dialout $USER

Una vez conectado el CHIP al USB-TTL y este ultimo al computador , procedemos a verificar que el CHIP este respondiendo correctamente con un OK, esto indicara que el Integrado y Firmware actual del modulo se encuentran bien

para ello, debemos instalar sobre el computador otra herramienta el cual accedera al puerto serial, utilizaremos el IDE de Arduino el cual se conectara al chip por el puerto identificado.

Nosotros, descargaremos arduino desde la web oficial en su ultima version "1.8.5".

$ cd && wget https://downloads.arduino.cc/arduino-1.8.5-linux64.tar.xz

Descomprimimos el directorio y ejecutamos la herramienta.

tar xvfJ arduino-1.8.5-linux64.tar.xz cd 

cd arduino-1.8.5/ && ./arduino

Una vez abierta la herramienta, escogemos el puerto serial.
ArduinoPuertoSeleccion

Tambien, es necesario escoger el CHIP adecuado, normalmente arduino no tiene este chip en su lista por defecto, es necesario agregarlos siguiente el siguiente tutorial en la seccion "Installing with Boards Manager".

Install the current upstream Arduino IDE at the 1.8 level or later. The current version is at the Arduino website.
Start Arduino and open Preferences window.
Enter http://arduino.esp8266.com/stable/package_esp8266com_index.json into Additional Board Manager URLs field. You can add multiple URLs, separating them with commas.
Open Boards Manager from Tools > Board menu and install esp8266 platform (and don't forget to select your ESP8266 board from Tools > Board menu after installation).
URL: https://github.com/esp8266/Arduino

ArduinoMonitorSerie3

Abrimos el monitor serial
ArduinoMonitorSerie

Ejecutamos el comanto "AT" para verificar que el chip responda correctamente, deberiamos de ver la siguiente salida.
ArduinoMonitorSerie4

Confirmamos la version del firmware del dispositivo con el comando "AT+GMR".
ArduinoMonitorSerie5

Cerramos arduino para proceder.
Con esto hemos comprobado la version del firmware y tambien el funcionamiento del chip.
Sobre este post, la idea no es enseñar todos los comandos disponibles sober el chip, a futuro estaremos realizando algunas publicaciones con el uso de algunos de los comandos y su funcionamiento, si requieren indagar la guia pueden acceder al siguiente LINK

Actualizando el Firmware.

Volviendo al directorio "firmware/bin" donde descargarmos los binarios, vamos a ejecutar el comando que actualizara el Firmware sobre el CHIP.
pero antes de ellos, debemos de conectar el integrado en modo "programacion".
Flashing-Mode-1

Tambien, debemos de tener encuenta el tamaño de memoria para nuestro CHIP.
En este caso la memoria disponible para este dispositivo es 8Mbits.

Borramos todos los datos del chip.

sudo esptool.py --port /dev/ttyUSB0 erase_flash

esptool.py v2.3.1
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
Uploading stub...
Running stub...
Stub running...
Erasing flash (this may take a while)...
Chip erase completed successfully in 0.0s
Hard resetting via RTS pin...

Adecuamos los archivos para nuestro chip indicando los espacios de memoria para cada archivo, podremos validarlo sobre la siguiente imagen.
http://wiki.ai-thinker.com/esp_download
Memoria

sudo esptool.py --port /dev/ttyUSB0 --baud 115200 write_flash 0x00000 boot_v1.7.bin 0x01000 at/1024+1024/user1.2048.new.5.bin 0x81000 at/1024+1024/user2.2048.new.5.bin 0xFC000 esp_init_data_default_v08.bin 0xFE000 blank.bin --verify 

esptool.py v2.3.1
Connecting....
Detecting chip type... ESP8266
Chip is ESP8266EX
Features: WiFi
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 118.1 kbit/s)...
Hash of data verified.
Compressed 407796 bytes to 293036...
Wrote 407796 bytes (293036 compressed) at 0x00001000 in 27.4 seconds (effective 119.1 kbit/s)...
Hash of data verified.
Compressed 407796 bytes to 293037...
Wrote 407796 bytes (293037 compressed) at 0x00081000 in 27.5 seconds (effective 118.8 kbit/s)...
Hash of data verified.
Compressed 128 bytes to 75...
Wrote 128 bytes (75 compressed) at 0x000fc000 in 0.0 seconds (effective 92.9 kbit/s)...
Hash of data verified.
Compressed 4096 bytes to 26...
Wrote 4096 bytes (26 compressed) at 0x000fe000 in 0.0 seconds (effective 5350.7 kbit/s)...
Hash of data verified.

Leaving...
Verifying just-written flash...
(This option is deprecated, flash contents are now always read back after flashing.)
Flash params set to 0x0020
Verifying 0xff0 (4080) bytes @ 0x00000000 in flash against boot_v1.7.bin...
-- verify OK (digest matched)
Verifying 0x638f4 (407796) bytes @ 0x00001000 in flash against at/1024+1024/user1.2048.new.5.bin...
-- verify OK (digest matched)
Verifying 0x638f4 (407796) bytes @ 0x00081000 in flash against at/1024+1024/user2.2048.new.5.bin...
-- verify OK (digest matched)
Verifying 0x80 (128) bytes @ 0x000fc000 in flash against esp_init_data_default_v08.bin...
-- verify OK (digest matched)
Verifying 0x1000 (4096) bytes @ 0x000fe000 in flash against blank.bin...
-- verify OK (digest matched)
Hard resetting via RTS pin...

Podremos comprobar el funcionamiento del chip de nuevo con arduino poniendo lo en la conexion con el USB-TTL en modo "normal"
NuevoFirmware