¿Cómo programar un Arduino en Python? Introducción a Snek

Desde hace unos pocos años, Micropython y su derivado Circuit Python se han hecho muy populares como lenguajes de desarrollo en microcontroladores. Sin embargo, ambas versiones requieren mucha mas memoria y recursos que los que tienen placas mas pequeñas como un Arduino UNO o un Nano original. En este artículo te muestro otra opción para que puedas usar Python en estas placas

Serpientes por todas partes

Desde su creación en el año 2013 por Damien George, Micropython ha recorrido un largo camino. Disponible al principio para unas pocas placas, como la PyBoard original, en la actualidad podemos utilizarlo en mas de un centenar de placas de distintos fabricantes y con muy variadas características, desde un modesto ESP8266 hasta un potente ARM Cortex M7.

Sin embargo, sus requerimientos de memoria Flash y RAM hacen que no esté disponibles para micros y placas de características mas modestas o que ya tienen sus años, como los clásicos Arduino.

Pero, a no desesperar! Si quieres aprender Python y quieres darle una nueva oportunidad a algunos Arduino UNO o Nano que pensabas no ibas a volver a utilizar, tienes la posibilidad de hacerlo gracias a Snek.

El lenguaje Snek

Snek es una adaptación de Python realizada por Keith Packard para programar placas como Arduino con un lenguaje sencillo y fácil de aprender. Su principal finalidad es servir como herramienta educativa para que niños y jóvenes aprendan a programar desarrollando aptitudes que luego puedan trasladar a otros entornos mas profesionales.

El autor trabajó muchos años con equipos Lego, de donde tomó algunas características, como el control de las entradas y salidas (GPIO). De hecho también lleva adelante un proyecto de crowdfunding para fabricar la Snekboard, una placa programable en Snek o Circuit Python que se integra con las piezas Lego para construir robots u otros dispositivos.

Fig. 1. Logo de Snek

No se puede comparar Snek con otras implementaciones de Python como Micropython o Circuit Python, ya que tiene muchas limitaciones.

Por ejemplo, no incluye la posibilidad de importar módulos externos porque no tiene un sistema de archivos donde almacenarlos, así que todo el código debe estar contenido en un archivo único. Por la misma razón, el programa que escribamos reside en RAM, así que se pierde al apagar la placa.

El firmware de Snek se distribuye como archivos binarios con distinto formatos, según la placa donde lo vayamos a utilizar, de lo que depende también el procedimiento de instalación. Está disponible para Arduino Nano, Mega y UNO, así como algunas placas Adafruit y de otros fabricantes. La lista completa puede consultarse en su repositorio.

En lo que hace a entornos de desarrollo, originalmente el mismo Keith desarrolló snekdev, un editor con herramientas para comunicarse con la placa y una consola interactiva (REPL), pero a partir de su versión 1.2, está soportado en el editor Mu.

Fig. 2. Snekdev
Fig. 3. Snek en Mu

Instalación

Te muestro ahora los pasos a seguir para empezar a utilizar Snek en un Arduino UNO.

Firmware

Primero debes descargar el firmware de su repositorio de GitHub. Está disponible en la forma de un archivo comprimido, como se ve en la siguiente imagen.

Los ejecutables para Windows, Mac y Linux que se encuentran en el mismo repositorio sirven para instalar snekdev, que no usaremos en este ejemplo. Entonces, debes descargar la última versión (snek-1.9.zip a la fecha).

Fig. 4. Archivos de firmware de Snek

Dentro del archivo .ZIP encontrarás una carpeta Snek y dentro de ella muchos archivos uf2, hex y elf. Son los firmware para las distintas placas. El que necesitas ahora es snek-uno-1.9.hex

avrdude

Luego debes descargar el programa AVRDUDE (AVR Downloader Uploader) que sirve para leer y grabar la memoria de los microcontroladores AVR como los que tienen algunas placas Arduino. Lo puedes descargar desde su repositorio.

Te sugiero que copies el archivo snek-uno-1.9.hex y avrdude.exe en la misma carpeta (en mi caso quedaron los dos en la carpeta Descargas o Downloads de Windows).

Grabación

Conecta el Arduino UNO a un puerto USB y comprueba a que puerto se ha conectado (En Windows lo puedes ver en Configuración Dispositivos). En mi caso es el COM11, pero puede ser cualquier otro.

A continuación, graba el firmware en el Arduino con el siguiente comando (recuerda cambiar el puerto después de “-P”)

avrdude -pm328p -carduino -PCOM11 -b115200 -D -U flash:w:snek-uno-1.9.hex:i

Si no hay inconvenientes, avrdude grabará la memoria y luego hará una verificación:

C:\Users\etolo\Downloads>avrdude -pm328p -carduino -PCOM11 -b115200 -D -U flash:w:snek-uno-1.9.hex:i

avrdude: AVR device initialized and ready to accept instructions
avrdude: device signature = 0x1e950f (probably m328p)
avrdude: reading input file snek-uno-1.9.hex for flash
         with 32204 bytes in 1 section within [0, 0x7dcb]
         using 252 pages and 52 pad bytes
avrdude: writing 32204 bytes flash ...

Writing | ################################################## | 100% 5.12 s

avrdude: 32204 bytes of flash written
avrdude: verifying flash memory against snek-uno-1.9.hex

Reading | ################################################## | 100% 3.80 s

avrdude: 32204 bytes of flash verified

avrdude done.  Thank you.

Si no se produjo ningún error, tu Arduino ya tiene cargado Snek.

Lo único que falta es configurar Mu. Si no lo tienes instalado debes descargarlo de su sitio e instalarlo. Una vez instalado, ábrelo, pulsa el botón Modo y elige Snek, la configuración del puerto es automática.

Con esta parte completada, ya estas en condiciones de escribir tu primer programa en Snek.

Si quieres instalar el firmware en una placa de otro tipo, puede que el procedimiento varíe así que debes consultar la documentación para mayor información.

Ejemplo

Para finalizar, vamos a probar el funcionamiento de Snek con el típico blink, como se ve mas abajo.

Fig. 5. Prueba con blink

Luego de escribir el programa, debes pulsar el botón PUT, para que Mu envíe el código al Arduino y listo! Ya estás programando tu Arduino en Python.

Conclusiones

En esté artículo hice una introducción a Snek y te guie paso a paso para que lo instales en un Arduino UNO y puedas programarlo usando Python. Snek contiene muchos de los elementos de este lenguaje, pero también cuenta con muchas limitaciones.

Es muy útil para enseñar y aprender programación realizando proyectos de robótica o de computación física, pero no es un lenguaje para encarar proyectos algo mas serios.

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