Programando el ESP8266 en Micropython

Python es un lenguaje de programación moderno, potente y muy versátil. Puede utilizarse para programar en distintas plataformas, tanto computadoras como teléfonos o microcontroladores. En este artículo vamos a ver somo preparar una placa D1 mini, que cuenta con un ESP8266 para poder correr nuestros programas en Python.

Python y Micropython

El lenguaje de programación Python fué creado por el desarrollador holandés Guido van Rossum, quien liberó la primera versión pública en el año 1991. Es un proyecto de software libre, respaldado por la Python Software Foundation (PSF), una organización sin fines de lucro, y una gran comunidad internacional de desarrolladores. Es ampliamente utilizado para el desarrollo de software sobre distintas plataformas, como Windows, Linux, Mac o la web.

Sin embargo, el lenguaje original tiene requerimientos de memoria y poder de procesamiento mayores a los que pueden encontrarse en microcontroladores de gama baja o media. Para salvar esta situación, en el año 2013 el programador y físico Damien George creó micro Python (uPython), una versión reducida y optimizada de Python que puede funcionar en microcontroladores.

Logos de Python (izquierda) y micro Python (derecha)

¿Python en microcontroladores?

Los microcontroladores modernos pueden programarse en un lenguaje de alto nivel como C/C++, el ESP8266 que usaremos aquí puede ser programado en el IDE de Arduino con facilidad, así que ¿para que complicarnos añadiendo otro lenguaje, que además consume mas recursos? Para mi existen varias razones:

  • Python tiene estructuras simples y una sintaxis sencilla, por lo que es fácil de aprender.
  • Es muy apropiado para ser usado en ámbitos educativos, en aplicaciones de computación física o robótica.
  • Es utilizado en una gran variedad de aplicaciones y plataformas, así que lo aprendido puede ser trasladado luego a otros escenarios.
  • Hay una gran comunidad de programadores y desarrolladores que mantienen el lenguaje en constante evolución y puede darnos soporte ante un inconveniente.
  • Es uno de los lenguajes mas demandados en el mercado.

Compilador versus intérprete

Los microcontroladores son circuitos electrónicos digitales que funcionan con números binarios, así que en última instancia, sólo entienden éste lenguaje de sólo dos dígitos, llamado lenguaje de máquina. Programar en este lenguaje no es imposible, pero si muy difícil, por lo que se han creado otros lenguajes, como C/C++, Java, BASIC o Python. Para nosotros, los seres humanos, es más fácil programar en estos lenguajes, pero antes de que los programas puedan funcionar deben ser “traducidos” al lenguaje de máquina. Esta traducción es realizada por los compiladores y los intérpretes.

Un compilador toma el programa que hayamos escrito, en C o C++, por ejemplo, lo analiza, traduce todas las instrucciones y produce otro programa, íntegramente en lenguaje de máquina, listo para funcionar en un microcontrolador. El IDE de Arduino es un ejemplo de esto: el compilador traduce el código y si no hay errores, lo descarga en el Arduino (o ESP) a través del cable USB y lo hace funcionar. Todo el trabajo de traducción lo hace el compilador, un software que funciona en la PC que tiene gran cantidad de memoria y el Arduino simplemente recibe el código ya traducido.

Un intérprete funciona de otra manera: toma una línea de instrucciones, la traduce a lenguaje de máquina, se la pasa al microcontrolador para que la ejecute y sigue con la siguiente línea, hasta finalizar. Usualmente, el intérprete reside y funciona en el mismo procesador que luego ejecuta las instrucciones y por eso éste debe ser mas potente y sobre todo, tener más memoria. Por eso no es posible usar Python en las placas Arduino (al menos las mas sencillas como UNO, Mega o Nano), porque el procesador no tiene la suficiente memoria RAM para albergar al intérprete pero sí en los módulos ESP que cuentan con una memoria mayor.

Cargando Micropython en la D1 mini

Antes de poder escribir nuestros programas en Python, primero deberemos cargar el intérprete en nuestra placa, en este caso, la D1 mini (aunque el procedimiento es el mismo para cualquier otra placa con el ESP8266, como Wemos D1 o Nodemcu). Para ello seguimos los siguientes pasos:

  • Descargar el intérprete de http://micropython.org/download/esp8266/ Como se puede ver, hay versiones para distintas cantidades de memoria y también hay un grupo de versiones estables (stable firmware) y otro de versiones mas recientes, con las últimas actualizaciones (daily builds). Vamos a descargar una versión estable para no tener inconvenientes. Como la D1 mini tiene 4 MB de memoria, cumple sobradamente con el requisito de 1M o más. A la fecha de escribir este artículo, la versión mas adecuada es “esp8266-20191220-v1.12.bin (elf, map) (latest)”
  • Instalar ESPTool. Este programa nos permite grabar el intérprete en la D1 mini. Está hecho en Python, así que para funcionar debemos tener instalado Python en la computadora. Si no lo tienes, sigue las siguientes instrucciones. Una vez instalado Python, podemos instalar ESPTools con la herramienta pip:

En Windows abrimos una ventana de comandos, o una terminal en Linux y escribimos:

pip3 install esptool

Los siguientes pasos cambian de acuerdo a si estamos trabajando en Windows o Linux

En Windows:

  • Grabar el firmware en la placa. Primero borramos la memoria flash con el comando:
esptool.py --port COM3: erase_flash

(El puerto COM puede variar, según donde esté conectada la placa)

Y luego grabamos el intérprete con:

esptool.py --port COM3: --baud 460800 write_flash --flash_size=detect 0 esp8266-20191220-v1.12.bin

En Linux

  • Grabar el firmware en la placa. Primero borramos la memoria flash con el comando:
esptool.py --port /dev/ttyUSB0 erase_flash

Y luego grabamos el intérprete con:

esptool.py --port /dev/ttyUSB0 --baud 460800 write_flash --flash_size=detect 0 esp8266-20191220-v1.12.bin

Recuerden poner el nombre del archivo “.bin”que descargaron. Si se producen errores pueden probar velocidades mas bajas luego del parámetro “baud” (como 115200).

Llegados a este punto ya tenemos uPython en la instalado en la placa. ¿Cómo escribimos los programas en Python ahora? Para ello necesitaremos instalar un entorno de desarrollo (IDE) para escribir el código y conectarnos con la placa. Hay varios, uno de los mas sencillos de usar es Thonny.

  • Instalar Thonny

En Windows:

Ir a https://thonny.org/ para descargar el instalador. Una vez descargado lo ejecutamos y seguimos las instrucciones para la instalación.

En Linux:

pip3 install thonny
  • Configurar Thonny para usarlo con uPython.

Abrir Thonny e ir al menú Tools – Options – Interpreter – Elegir micropython y el puerto USB

De paso podemos elegir el idioma Español en la pestaña General (hay que reiniciar Thonny para que tenga efecto)

Ahora si ya podemos escribir nuestros programas en Python. En la zona de edición podemos escribir el siguiente programa de ejemplo, el tipico “blink” para hacer parpadear el led que incorpora la placa:

Si pulsamos “F5” o apretamos el botón verde similar a “play”, el programa funciona en nuestra placa, haciendo parpadear al led. Podemos deternerlo pulsando el botón rojo “stop”.

En estas condiciones, la placa depende de su conexión con Thonny para que el programa funcione. Si cerramos Thonny y reseteamos la placa (o desconectamos y volvemos a conectar el cable USB) veremos que el led ya no parpadea.

Para que el programa quede grabado en la placa y ya no depende de Thonny, debemos elegir en el menú “Archivo – Guardar Como”, elegir “MicroPython device” y guardar nuestro programa con el nombre “main.py” (se debe respetar este nombre). De esta manera, el programa quedará guardado en la memoria Flash. Si ahora hacemos la misma prueba cerrando Thonny y reseteando la placa, veremos que el programa si funciona, ya no depende de Thonny ni de la PC.

En próximos artículos les presentaré algunos proyectos realizados en uPython. También revisen la sección de Cursos, porque voy a estar subiendo un curso para aprender a programar el ESP8266 en este lenguaje.

Para aprender más

Getting Started with Micro Python on ESP8266

4 comentarios en «Programando el ESP8266 en Micropython»

  1. Hola estoy programando un NodeMCU8266 y uso Thonny para introducir los programas, ya instale el firmware, aparentemente todo esta bien sin errores, pero el microcontrolador no esta ejecutando el blink. Que puedo hacer. (Ya instale nuevamente el firmware varias veces). Quedo atenta

    Responder
  2. podria micropython ser usado para programar un microcontrolador pic 16f84 por ejemplo o tiene muy pocos recurso el microcontrolador para este lenguaje?? otra cosa seria viable o probable grabar en una memoria para bios de una pc con micropython? para que cumpla con la misma tarea que tiene asignada la bios en una pc o notebook ?

    Responder
    • Hola Ariel! Micropython es prácticamente un mini sistema operativo que reside en el microcontrolador y por eso consume muchos recursos, tanto de RAM como de memoria Flash. El 16F84 tiene muy poca memoria. Incluso otros micros mucho mas grandes, como el STM32F103C8T6 de la Blue Pill no llegan a cumplir los requisitos de Micropython. Circuit Python es un derivado de Micropython con menos exigencias, pero aún así el PIC se queda corto. Hay otra versión de Python para micros con pocos recursos, Snek https://sneklang.org/ pero aún no la he probado.

      Responder

Deja un comentario

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

Habilitar notificaciones OK No, gracias