Cómo instalar MicroPython en un módulo ESP8266-12

MicroPython es una implementación de Python 3.X para microcontroladores y pequeños sistemas embebidos. MicroPyhton se fundó gracias a una campaña de Kickstarter. Y es un software libre y abierto, bajo licencia MIT.

Me he comprado un par de estos módulos y he decidido probar uno de ellos con MicroPyhton y de paso compartir todo el proceso:

Conectamos a nuestro sistema por USB y miramos con dmesg en que puerto está disponible:

Recapitulemos de un par de entradas anteriores ESPlorer: IDE de programación para ESP8266 y Programación directa sobre un módulo ESP8266, algunos de los componentes:

  • ESPlorer: Integrated Development Environment (IDE) para desarrolladores de ESP8266
  • esptool.py: Utilidad en Python para comunicar con el bootloader de la ROM del Espressif ESP8266. De fácil instalación mediante pip install esptool
  • MicroPython port para ESP8266: MicroPython port para ESP8266 es en versión experimental para los modulos WiFi basados en el chip ESP8266 Espressif.
¿Qué vamos a necesitar una vez conectada nuestra placa de desarrollo ESP8266-12E?

Estos serían los pasos a seguir:

  1. Construir el firmware con MicroPython para ESP8266
    1.1 Compilar OpenSource ESP SDK
    1.2 Compilar firmware MicroPython
  2. Flashear nuestro módulo ESP8266
  3. Test "hola mundo!!!"
Construir el firmware MicroPython
Compilar OpenSource ESP SDK

Para compilar nuestro firmware vamos a necesitar OpenSource ESP SDK, el cual se puede encontrar aquí https://github.com/pfalcon/esp-open-sdk. Pero vamos a tratar de simplificar con este comando todo lo que necesitamos:

sudo apt-get install make unrar autoconf automake libtool gcc g++ gperf flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial sed git unzip bash help2man wget bzip2 libtool-bin binutils-dev newlib-source  

Clonamos el repositorio de OpenSource ESP SDK en GitHub:

git clone --recursive https://github.com/pfalcon/esp-open-sdk.git  

Una vez clonado, nos movemos al directorio esp-open-sdk y desde ahí vamos a ejecutar el make STANDALONE=y y nos iremos a preparar un café...hay cómo para mas de 30 minutos:

cd esp-open-sdk  
make STANDALONE=y  

...después de estos agradables momentos del make y si no te ha dado ningún error...para mi ha sido un auténtico calvario!!!, por eso en la instalación de los paquetes he añadido todo aquello que me he encontrado

Muchos errores han sido de este estilo (puedes encontrar el detalle en fichero build.log que se encuentra en el directorio /esp-open-sdk/crosstool-NG/):

[ERROR]  
[ERROR]  >>
[ERROR]  >>  Build failed in step 'Retrieving needed toolchain components' tarballs'
[ERROR]  >>        called in step '(top-level)'
[ERROR]  >>
[ERROR]  >>  Error happened in: do_binutils_get[scripts/build/binutils/binutils.sh@741]
[ERROR]  >>        called from: main[scripts/crosstool-NG.sh@592]
[ERROR]  >>
[ERROR]  >>  For more info on this error, look at the file: 'build.log'
[ERROR]  >>  There is a list of known issues, some with workarounds, in:
[ERROR]  >>      'share/doc/crosstool-ng/crosstool-ng-1.22.0-55-gecfc19a/B - Known issues.txt'
[ERROR]  
[ERROR]  (elapsed: 23:26.03)

Por ejemplo, en éste se queja de que no encuentra el paquete binutils (que la he incluido en la línea de paquetes a instalar) y así unas cuentas.

Finalmente tendremos una salida cómo ésta:

Xtensa toolchain is built, to use it:

export PATH=/home/akirasan/esp-open-sdk/xtensa-lx106-elf/bin:$PATH

Espressif ESP8266 SDK is installed, its libraries and headers are merged with the toolchain  

Ahora para que toolchain xtensa-lx106-elf-gcc (la herramienta de compilación que se ha generado) funcione cuando compilemos nuestro firmware de MicroPython, debemos añadirlo a nuestra variable de entorno PATH. Dentro del directorio esp-open-sdk donde hemos ejecutado el make:

De forma temporal, en cuanto hacemos logout lo perdemos sería así:

PATH=$PATH:$(pwd)/xtensa-lx106-elf/bin  
export PATH  

Para hacerlo de forma permanente sería algo así:

echo "PATH=$(pwd)/xtensa-lx106-elf/bin:\$PATH" >> ~/.profile  
Compilar firmware

Se supone que ésta será la parte más sencilla. Veamos. Lo primero va a ser clonar el repositorio GitHub de micropython:

git clone https://github.com/micropython/micropython  

Entramos en el directorio de micropython y vamos a añadir las posibles dependencias que tiene MicroPython, y vamos a pre-compilar algunos scripts:

cd micropython  
git submodule update --init  
make -C mpy-cross  

Luego entramos en el directorio de esp8266 donde seguidamente vamos a compilar nuestro firmware:

cd esp8266  
make axtls  
make  

Una vez finalizada la compilación tendremos un fichero .bin llamado firmware-combined.bin en el directorio \build, éste será nuestro firmware de MicroPython.

Flashear nuestro módulo ESP8266

La parte mas sencilla (o por lo menos eso me ha parecido a mí). Simplemente desde el directorio /build que es donde tenemos nuestro fichero firmware, ejecutamos el esptool.py (recuerda indicar al parámetro -p el puerto donde está conectado el módulo ESP8266, en mi caso está en /dev/ttyUSB0):

esptool.py -p /dev/ttyUSB0 write_flash --flash_size=8m 0 firmware-combined.bin  

Mi ejecución ha sido algo así:

esptool.py v1.2-dev  
Connecting...  
Running Cesanta flasher stub...  
Flash params set to 0x0020  
Writing 512000 @ 0x0... 512000 (100 %)  
Wrote 512000 bytes at 0x0 in 44.4 seconds (92.3 kbit/s)...  
Leaving...  
Test "hola mundo!!!"

Vamos a ver y comprobar si todo ha funcionado como lo esperado. Para ello vamos ha conectarnos a nuestro módulo ESP8266 con el firmware de MicroPython y ejecutar un hola mundo!!!.

Cómo hemos subido un firmware nuevo, lo ideal es hacer un reset al módulo para que vuelva a hacer el boot. Luego podemos utilizar cualquier software para conectarnos por el puerto COM, yo he utilizado CuteCom:

esp8266 micropython

Cómo se puede ver en la captura, una vez conectados podemos lanzar sentencias Python para que ejecute.

Hay librería implementadas para MicroPython que nos ayudarán en el desarrollo. Ejemplos y últimas versiones, cómo siempre en la página de MicroPython.

Pero si no queréis complicaros mucho y simplemente probarlo podéis utilizar mi compilación de fecha Julio 2016 que he subido a mi GitHub o por ejemplo la que tiene publicada Adafruit.com en su web, algo mas viejuna: Adafruit --- MicroPython firmware ESP8266 5/12/2015.

Lo ideal es que si pasa tiempo, intentéis compilar un firmware actualizado, porque cómo he comentado al inicio, es un software experimentar y es bueno tener las últimas correcciones.