lunes, 29 de diciembre de 2014

ESP8266 y Raspberrypi: Actualizar el firmware usando nuestra rpi.

ESP8266 y Raspberrypi: Actualizar el firmware usando nuestra rpi.

Podemos conectar el módulo esp8266 directamente al puerto serie de nuestra raspberrypi e incluso alimentarlo con los 3.3 voltios del conector de raspberrypi sin necesitar nigún adaptador serie a usb, así que ¿como podemos actualizar el software de este módulo aprovechando esto?

En vez de instalar pesadas aplicaciones en nuestro "modesto" raspberry pi y rompernos la cabeza con dependencias, compilaciones, etc. vamos a hacer accesible el puerto serie a través de la red y así poder actualizar el firmware del esp8266 desde otro pc, en este caso, con windows.

El que haya trabajado con este módulo o se haya informado un poco, sabe que para actualizar el firmware hay que encenderlo con un puente entre las patillas GPIO0 y GND. El módulo, entonces configura su conexión serie a 115200 baudios y espera órdenes.

Liberando el puerto serie.

Ni que decir tiene que para usar el puerto serie de nuestro raspberry pi debemos liberarlo de su función como puerto de consola, para ello tendremos que hacer dos cosas; la primera es editar el fichero /etc/inittab y comentar la linea que lanza el getty por el puerto serie añadiendo un carácter "#" al comienzo de la línea y sea tomada como un simple comentario quedando esta así:

#T0:23:respawn:/sbin/getty -L ttyAMA0 115200 vt100


  
la segunda es editar el fichero de arranque /boot/cmdline.txt y anular la salida de información de arranque y consola por el puerto serie que se indica con "console=ttyAMA0,115200 kgdboc=ttyAMA0,115200" por lo tanto borraremos esta información. Por ejemplo, si nuestro fichero contiene:

dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait

lo dejaremos en:

dwc_otg.lpm_enable=0 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline rootwait


Podemos hacer antes una copia del fichero por si queremos tener a mano la versión anterior y no tener que recordar y teclear los parámetros para volver a habilitarlo algún día.
Después de reiniciar, ya tendremos liberado el puerto serie. En el pin 1 de la raspberry encontraremos los 3.3 voltios y en el 6, 8 y 10 respectivamente encontramos GND, TXD y RXD. Si queremos atenernos a las recomendaciones de la fundación Raspberry, no debemos usar esta alimentación de 3.3 voltios pues corremos el riesgo de dejar el raspberrrypi inservible si el consumo es elevado. Yo solo puedo decir que me ha funcionado y que cada cual valore si está dispuesto a asumir este riesgo.
Cutecom es una utilidad en modo gráfico que nos puede ayudar comprobar si hemos hecho bien las conexiones entre el raspberry y el esp8266 y probar algún comando AT antes de proceder al cambio de firmware.

Exportando el puerto serie.

Para "exportar" nuestro puerto serie a la red, nos valdremos de una poderosa herramienta llamada "socat". Es lo único que necesitaremos en nuestro raspberry pi, y lo podemos instalar con toda confianza de los repositorios de raspbian ejecutando:

sudo apt-get install socat

Una vez instalado, procederemos a ejecutar la exportación del puerto serie con:

sudo socat -x OPEN:/dev/ttyAMA0,raw,echo=0,b115200 TCP-LISTEN:27644,fork

La opción -x es opcional pero con ella veremos el tráfico que se genera entre el puerto serie y la red. El primer parámetro OPEN indica que conectar el puerto serie (/dev/ttyAMA0) configurándolo a 115200 baudios, sin hacer ninguna modificación en los datos (raw) y sin devolver un eco (echo=0) al puerto serie con lo que se indica en el siguiente parámetro: el puerto TCP 27644 en modo transparente (fork).

Importando el puerto serie (en el PC)

Para poder "atacar" al puerto serie desde nuestro pc instalaremos el driver gratuito de puerto serie virtual que nos ofrece HWgroup, al que agradecemos el detalle, en su página http://www.hw-group.com/products/hw_vsp/index_en.html y configurarlo de la siguiente manera:



Aquí aparece la dirección 192.168.0.195 como la dirección del raspberrypi y el puerto 27644 que indicamos en el paso anterior al exportar el puerto serie y COM3 como el nuevo puerto creado.

Actualizar el firmware

Ya podemos usar nuestra herramienta favorita para actualizar el firmware del esp8266 como si lo tuviésemos conectado a un puerto serie local (COM3).
¡Que aproveche!


ESP8266 con LUA: lista de ficheros

Con el firmware de nodemcu podemos programar este mini módulo con el lenguaje de programación LUA.
Además podemos guardar los programas y otros ficheros en su eeprom.

Hacer un listado de los ficheros en una sola linea:

for k , v in pairs(file.list()) do print (k.. " ....... " ..v); end