Damien P. George, creador del pyboard. Fuente: dpgeorge.net |
El software
Central en el proyecto del pyboard fue el desarrollo de MicroPython, un subconjunto de Python 3 elaborado también por Damien George. Al re-escribir este intérprete desde cero, George logró que fuera suficientemente pequeño para poder caber y correr en un microcontrolador.MicroPython utiliza muy poca memoria RAM e incluye una pequeña fracción de la biblioteca estándar de Python. Aún así, MicroPython soporta características avanzadas como son: enteros de tamaño arbitrario, cerraduras léxicas (closures), listas por comprensión, generadores, manejo de excepciones e incluseo un shell interactivo. Al correr directamente sobre los fierros, MicroPython funge efectivamente como el sistema operativo del pyboard.
Teóricamente, los requisitos mínimos de memoria para que un sistema pueda soportar MicroPython son: 128 kibibytes de ROM y 8 kibibytes de RAM. Gracias a eso ha sido migrado exitosamente a otras plataformas. Además del pyboard, el sitio oficial ofrece el firmware requerido para correr MicroPython en los microchips WiPy, ESP8266, ESP32, Espruino Pico, STM32F4, NUCLEO-L476RG y micro:bit.
El hardware
La placa del pyboard contiene un microcontrolador STM32F405RG de STMicroelectronics con las siguientes características:- Procesador RISC de 32 bits ARM Cortex-M4F.
- Una velocidad de reloj de 168 MHz.
- Registros de 32 bits:
- 16 para valores enteros.
- 32 para valores de punto flotante de precisión sencilla.
- 192 kibibytes de memoria RAM para almacenar datos volátiles.
- 1024 kibibytes de memoria flash ROM para almacenar el código del programa.
- 13 temporizadores independientes.
- Soporte de protocolos UART, I2C, SPI y CAN para comunicación con periféricos.
- Hardware generador de números aleatorios (TRNG, true random number generator).
El pyboard v1.1. Fuente: MicroPython Store |
La placa del pyboard tiene un tamaño de 4.1 cm × 3.2 cm × 0.2 cm y cuenta adicionalmente con los siguientes elementos:
- Conector micro-USB: sirve como fuente de alimentación y también permite establecer comunicación serial con una computadora anfitriona.
- Ranura para tarjeta microSD de capacidad estándar (SDSC) y alta capacidad (SDHC).
- Acelerómetro de tres ejes.
- Reloj en tiempo real (oscilador de cristal) a 32 kHz.
- Dos botones: RST (hard reset) y USR (funcionalidad definida por el usuario).
- Cuatro ledes (colores: rojo, verde, amarillo y azul).
- 30 pines GPIO (general-purpose input/output).
Comparando pyboard con Arduino
La principal ventaja de un pyboard sobre un Arduino tiene que ver con la forma en que soportan Python. En diversas entradas de este blog hemos programado el Arduino usando Python, pero no debemos perder de vista que el Arduino debe estar siempre conectado a una computadora anfitriona a través de un cable USB. Esto es así porque el programa de Python corre en el sistema anfitrión y no en el Arduino. El Arduino funge como esclavo que corre un ejecutable (típicamente escrito en C/C++) que implementa el protocolo de Firmata y que le permite establecer una comunicación serial en dos sentidos con el programa que lo controla y que corre en la PC anfitriona. El pyboard, por otro lado, puede correr programas en Python sin necesidad de estar conectado en todo momento a una computadora anfitriona. El pyboard tiene instalado localmente el intérprete de MicroPython y solo basta transferir (vía la conexión USB) a su memoria flash el programa *.py que deseamos correr. Una vez hecho esto, podemos desconectar el pyboard del sistema anfitrión y solo requerimos proveerle a la placa un suministro eléctrico alternativo, por ejemplo un banco de energía (como los que se usan para recargar las pilas de los teléfonos celulares). A partir de ese momento nuestro programa en Python se ejecuta automáticamente al encender o reiniciar el pyboard.Un pyboard (en su estuche protector) conectado a un banco de energía. |
Cuando el pyboard está conectado a la computadora anfitriona podemos llevar a cabo una sesión interactiva con el shell de MicroPython corriendo directamente sobre la placa. Para lograr lo anterior tenemos que abrir una ventana de línea de comando en el sistema anfitrión y luego correr algún emulador de terminal tonta (por ejemplo
screen
o picocom
) que permita conectarse al pyboard. Cuando corremos el shell podemos jugar y experimentar directamente con todas las facilidades provistas por la placa. El shell también puede ser bastante útil durante el proceso de depuración de nuestros programas. No existe una funcionalidad similar a ésta cuando se programa el Arduino usando C/C++.El shell de MicroPython corriendo sobre el pyboard y siendo visualizado en una ventana de línea de comando en la computadora anfitriona. |
El pyboard tiene otra ventaja sobre Arduino que puede ser benéfica particularmente para principiantes. Al incorporar de fábrica cuatro ledes, un botón y un acelerómetro, es posible elaborar diversos proyectos interesantes en el pyboard sin requerir hardware adicional. Es posible empezar a hacer experimentos sencillos de computación física sin tener la necesidad de conseguir y conectar actuadores, sensores, resistencias y cables a un protoboard.
Caos resultado de un exceso de componentes electrónicos.☺
Fuente: Harvard Business Review |
Dado que el hardware del pyboard es de mayor capacidad y más sofisticado que la mayoría de los modelos existentes de Arduino, resulta también ser un tanto más costoso. Irónicamente, puede resultar que un programa escrito en C/C++ para Arduino se ejecute más rápido que su equivalente en Python para el pyboard. Esto se debe a que en estas plataformas el código de C/C++ se compila mientras que el de Python se interpreta. Como es bien sabido, los programas interpretados son usualmente más lentos y requieren más memoria que los compilados debido a la necesidad de traducir el código fuente mientras se corre. En la práctica, el impacto en los tiempos de ejecución normalmente no repercute de forma significativa en la mayoría de los programas escritos para el pyboard. Y si esto llegara a ser un problema, existe la opción de escribir porciones limitadas de código en C/C++/ensamblador que pueden ser invocadas desde el código de MicroPython para optimizar los cuellos de botella y obtener así un mejor desempeño pero sin reducir sustancialmente la productividad que se consigue al programar primordialmente en Python.
Comparando pyboard con Raspberry Pi
La Raspberry Pi (RPi) y el pyboard pertenecen a dos categorías diferentes de placas electrónicas. La RPi es una computadora monoplaca (single-board computer) que para fines prácticos es casi una computadora completa. Tiene su propio sistema operativo (usualmente alguna distribución de Linux) y para usarla necesitamos (generalmente) conectarle mouse, teclado y monitor. El modelo 3 de la RPi ya cuenta incluso con Bluetooth y Wi-Fi. Por otro lado, el pyboard (al igual que el Arduino) es un microcontrolador monoplaca (single-board microcontroller). Esto significa que un pyboard es más sencillo y tiene típicamente un propósito más restringido que una RPi. Conviene mencionar que una RPi puede servir de sistema anfitrión para programar a un pyboard.Por sus características de hardware, una RPi modelo 3 resulta una buena opción para realizar proyectos de IoT (internet de las cosas). En contraste, el pyboard no cuenta con un esquema de comunicación inalámbrica, por lo que no resulta adecuado para este fin.
Al igual que el pyboard y el Arduino (y a diferencia de una PC común y corriente), la RPi cuenta con múltiples pines GPIO (entrada/salida de propósito general) que podemos usar para conectar y controlar diversos componentes, tales como actuadores y sensores. Al momento de programar la RPi podemos usar cualquier lenguaje soportado por su sistema operativo, por ejemplo C, C++, Java, Ruby, Python, Perl, JavaScript, etc. Como ya lo hemos mencionado varias veces, el pyboard está diseñado para programarse en Python.
Fuente: Day Break Tecnologies |
Muy buenos días, le saludo desde Uruguay. Le comento que recién estoy descubriendo su maravilloso blog, el cual me resulta muy interesante; ya que soy un aficionado a la electrónica, razón por lo cual me compré un Arduino UNO y como estoy dando mis primeros pasos en la programación, opté por Python como lenguaje inicial. Aprovecho entonces para realizarle la siguiente consulta: ¿usted me puede recomendar algún libro que trate la temática de manejar/programar un Arduino con Python?
ResponderBorrarHola, muchas gracias por tu comentario. El mejor (y único) libro de Arduino con Python que he conocido es el siguiente:
BorrarTítulo: “Python Programming for Arduino”
Autor: Pratik Desai
Editorial: Packt Publishing
Publicado en febrero de 2015
ISBN-13: 978-1-78328-593-8
Espero te resulte útil.
Excelente artículo, muchas gracias. Muy claro todo. Me encanta la versatilidad de python
ResponderBorrarMuchas gracias, DoN BaloN. Qué bueno que te gustó.
Borrar