El lenguaje Python en un microcontrolador suena como a un sueño guajiro, pero ahora éste se ha convertido en realidad. Se puede descargar y empezar a trabajar con él de inmediato. Además, se está armando ya una tarjeta de desarrollo que pronto será liberada. El punto es que Python es un lenguaje complejo que en general está implementado en sistemas pequeños con muchas limitaciones, haciendo que la implementación del lenguaje sea muy reducida.

Micro Python es una implementación bastante completa de Python 3 en C99 ANSI C. Implementa toda la sintaxis de Python 3.4 y los tipos de datos fundamentales: str (sin soporte a unicode todavía), bytes, bytearray, tuple, list, dict, set, array.array, collections.namedtuple, classes e instances. Tiene módulos ya interconstruidos como  sys, time y struct. Los creadores dicen que compila el 99.99% de la biblioteca estándar.

Hay además una biblioteca especial que da las rutinas de I/O (Entrada/Salida) y el control de los sensores. Se pueden escribir, por ejemplo, instrucciones como estas:

import pyb
pyb.LED(4).on()

La pregunta importante aquí es ¿qué tantos recursos se necesitan para que se puedan ejecutar este tipo de programas? La respuesta es que en un ARM mínimo, se requieren unos 80K bytes y para todas las características se necesitan unos 200K en Linux.

Se dice que Micro Python puede correr en una PC y que esta versión corre más rápida que CPython incluso cuando se usa bytecode. Puede incluso correr mucho más rápido si se compila a código nativo.

Micro Python es compilado a un código comprimido de bytes que corren en una máquina virtual.  Hay algunas optimizaciones en velocidad. Tiene además un ensamblador inline, lo que podría en algún caso ayudar a escribir las partes críticas en código de máquina, haciendo que los programas puedan correr aún más rápido.

Hasta el momento la plataforma a la que está enfocada son los microcontroladores ARM de 32 bits y hay una tarjeta de desarrollo, llamada pyboard, en la cual se puede usar Micro Python gracias al éxito del proyecto en Kickstarter. La tarjeta Micro Python está basada en un microcontrolador STM32F405 con un reloj que corre a 168 MHz, con 1 MB de memoria Flash y 192 KB de memoria RAM. Se conecta a la PC a través de un puerto USB y se puede interactuar con éste vía la línea de comandos de Python. Puede compilar y correr scripts de Python sin ayuda de la PC. Tiene un buen número de periféricos:  2 LEDs, un interruptor, reloj de tiempo real, acelerómetro y 30 pines de I/O. 5 UARTs, 2 SPIs, 2 canales I2C, 14 pins AC, 2 pins DAC y 4 servo pins.

El pyboard se soporta por el módulo pyb el cual incluye la función de encender LEDs, sensar los interruptores, leer el acelerómetro, controlar los servos, etcétera. Hay funciones para el reloj de tiempo real, UART, I2C entre otras.

Si se quiere usar Micro Python en otra tarjeta con ARM, hay que reimplementar el módulo pub. Ahora bien, no se espera una implementación para el Arduino pronto, pues simplemente no tiene la suficiente memoria que exige esta implementación. Una Raspberry Pi es mejor candidata para poder reimplementar Micro Python.

El pyboard está bajo el crowdfunding y cuando esté completo se pondrá a la venta. No hay precio disponible para esta tarjeta, pero unos 50 dólares parece ser el precio con el que saldrá, lo cual parece razonable. Se pueden usar los módulos estándar para añadir WiFi y Ethernet.

Micro Python y el pyboard son de código y hardware abierto, por lo que se puede obtener el código fuente y los planos para hacerse su propia tarjeta.

Referencias:

Micro Python
i-programmer