Guía de inicio rápido de microcontroladores
Tengo que admitir que me considero de la "vieja escuela" cuando se trata de programar mis sistemas basados en microcontroladores: me gusta el lenguaje de programación C y, para la programación más seria, sigo esperando a que me convenzan de que existe algo mejor.
Una vez dicho esto, también me gustan las formas rápidas e informales de poner una idea en funcionamiento. También aprecio que, en un abrir y cerrar de ojos, Python se coronará como el lenguaje de programación más utilizado y que cada vez se dirige más y más para aplicaciones más serias, como el aprendizaje informático, con el beneplácito de Intel Movidius Neural Compute Stick.
Por eso, en este artículo quiero mostrarte cómo puedes llegar al punto de ejecutar una aplicación "Hello World", escrita en Python y ejecutada en un kit de desarrollo convencional, a partir de cero, en menos de media hora. A menos que tengas una conexión a Internet lenta, por supuesto; en ese caso, es posible que tardes un poco más.
Placa STM32F401 Nucleo
Para nuestro kit de desarrollo utilizaremos la placa ST Micro Nucleo F401RE. Se trata de una placa con gran capacidad para aplicaciones integradas, y nos proporciona lo siguiente:
MCU: STM32F401RET6 ARM®Cortex®-M4, 32 bits, 84 MHz
SRAM: 96 KB
Flash: 512 KB
E/S digitales: 50 conectores a 3,3 V (en el omnipresente formato Arduino)
Entradas ADC: 16 conectores
Esto no es más que una pequeña muestra de una amplia gama de funciones divertidas...
Una de las cosas buenas de utilizar la placa Nucleo es que el otro pequeño componente de hardware que necesitamos para comenzar es un cable mini USB A a USB, que utilizaremos tanto para la alimentación como para la programación de la placa.
Antes de comenzar
Hay un par de cosas que necesitamos hacer antes de empezar a utilizar nuestra placa ST Nucleo en serio. Lo primero que debemos hacer es asegurarnos de que nuestro jumper de alimentación está en el lugar correcto en la placa Nucleo: en JP5, el jumper debe realizar la conexión entre el conector 1 y el conector 2:
Si utilizas Windows, el paso siguiente es descargar e instalar el controlador ST-Link. Esto nos permitirá acceder al puerto de programación de la placa ST Nucleo y crear un puerto COM virtual en nuestro ordenador host. Si utilizas MAC OSX o Linux, ya estás listo para comenzar porque el dispositivo se reconocerá automáticamente.
También debemos actualizar el firmware integrado antes de que podamos utilizar nuestro IDE de Python. La actualización y las instrucciones para instalarla se pueden encontrar aquí. Una vez que hayas descargado y descomprimido el archivo zip, los usuarios de Windows encontrarán un archivo ejecutable:
Ejecuta este archivo y, en la interfaz, haz clic en el botón [Conectar dispositivo]:
Haz clic en el botón [Sí>>>], que ahora estará activo. Cuando hayas terminado, deberías recibir un mensaje en el que aparezca que la actualización se ha instalado correctamente.
Zerynth Studio
A continuación, vamos a descargar e instalar Zerynth Studio como nuestro IDE para programar la placa ST Nucleo en Python. Aunque hay una versión "Pro" disponible, la versión gratuita nos proporciona todo lo que necesitamos para crear aplicaciones bastante sofisticadas en toda una amplia gama de placas compatibles de Arduino, Hexiware, NodeMCU, Particle, RedBear, ST Micro, Sparkfun y muchos otros fabricantes.
El proceso de instalación es muy sencillo, independientemente de SO que utilices, porque puedes descargar un instalador ejecutable de Windows, un archivo de imagen de disco de MacOS (.dmg) o un script "./zerynth" (dentro del archivo "tar.xz") para Linux.
Una vez instalado y en ejecución, se mostrará una interfaz que no se diferencia demasiado de la siguiente:
Si conectas ahora la placa ST Nucleo a un puerto USB de tu ordenador (o si ya está conectada), Zerynth reconocerá la placa ST Nucleo y podrás seleccionarla en el cuadro de "destino" en la barra de herramientas de administración de dispositivos:
A continuación, queremos registrar el dispositivo mediante el botón [Z] en la barra de herramientas de administración de dispositivos (DMT, Device Management Toolbar):
Haz clic en el botón [Register] (Registrar):
Aparecerá un mensaje en el que se nos indica que se está registrando el dispositivo:
Si la placa se ha registrado correctamente, deberías ver algo similar a lo siguiente:
Ahora vamos a pulsar de nuevo ese botón [Z] para crear una máquina virtual en el destino para ejecutar nuestro código. Se abrirá un cuadro de acción en el que debes hacer clic en el botón [Create] (Crear):
Asegúrate de que el botón circular "Standard VM" (Máquina virtual estándar) está seleccionado y pulse [Create] (Crear):
A continuación, pulsa el botón [Virtualize] (Virtualizar):
A continuación, pulsa el botón [Virtualize] (Virtualizar) de nuevo:
Después de un ruido de zumbido (en función de la velocidad de tu PC host), deberíamos ver un mensaje en el que se nos indica que nuestro dispositivo se ha virtualizado:
Y esto es todo. Ya estamos preparados para programar nuestra placa en Python.
Programación en Python
Si no tienes experiencia previa en la programación en Python integrada, te va a encantar lo que viene a continuación, porque Zerynth ofrece varias ventajas iniciales maravillosas. En primer lugar, tenemos la asignación de conectores de E/S tremendamente atractiva, que siempre resulta útil al tratar de averiguar qué nombres de conectores necesitamos para nuestro programa:
Pero lo más importantes es lo siguiente: si te fijas en los iconos situados en el lado izquierdo de la ventana del IDE, verás un icono con forma de bombilla, que es el botón de ejemplos. Si haces clic en este icono se mostrará una lista de código de ejemplo de Python que puede llevarte desde los primeros pasos hasta determinada interacción con el hardware implicado mediante las bibliotecas Zerynth. Como lo que queremos conseguir es poner en funcionamiento nuestra aplicación para activar el modo intermitente básica de "Hello World", vamos a hacer clic en la flecha situada junto a "Basics" (Básicos) para obtener una lista de ejemplos introductorios:
A continuación, haz clic en "Blink" (Modo intermitente) para que aparezca el cuadro de código de ejemplo. Podemos colocar ese código en nuestra ventana de programación activa pulsando el botón [Clone] (Clonar):
Solo para tener la sensación de que realmente hemos trabajado un poco nosotros también, vamos a aprovechar el ejemplo y ofrecer a nuestro LED intermitente un breve ciclo de trabajo:
Para introducir este código en nuestro dispositivo, utilizaremos simplemente el botón "Uplink" (Enlace ascendente):
Ten en cuenta que si lo único que quieres es verificar tu código sin cargarlo, puedes usar el botón situado a la izquierda del botón de enlace ascendente.
Ahora te voy a dar un consejo muy valioso: mantén el dedo sobre el botón de restablecimiento de la placa Nucleo...
… Porque se te pedirá que restablezcas la placa durante el proceso de enlace ascendente, y no dispones de mucho tiempo antes de que el tiempo de espera del proceso de enlace ascendente se agote:
A continuación, si todo ha ido según lo previsto, recibiremos un mensaje que nos indica que el "enlace ascendente" se ha realizado correctamente en la ventana de mensajes:
También debemos tener un LED intermitente en nuestra placa Nucleo. ¡Sí, nosotros!
Reflexiones finales
La placa ST Micro Nucleo viene en un sólido kit de desarrollo compatible con muchos de los sistemas de desarrolladores de herramientas integradas tradicionales, incluidos IAR EWARM, Keil MDK-ARM, mbed y GCC/LLVM.
Sin embargo, me gusta lo que Zerynth ha hecho aquí. La cantidad de tiempo que se tarda en obtener un código en la placa, desde el inicio, es mínimo. Esto hace que sea muy fácil probar y jugar con ideas en tu kit de desarrollo.
Zerynth también ha dedicado mucho esfuerzo a la documentación, los ejemplos y la guía de programación a fin de que puedas aprender a utilizar Python para crear aplicaciones del mundo real que no sean solo scripts de web. Confía en mí: más sabe el diablo por viejo que por diablo, y te aseguro que existen algunos trucos nuevos ahí fuera que puedes aprender y que bien merecen tu tiempo. ¡Disfruta codificando!
Artículo escrito por Redstone
Mark Gauntlet finalizó su licenciatura en ingeniería electrónica en 1991, y se dedicó a trabajar en el desarrollo de aplicaciones de procesamiento de señal digital en tiempo real, para dedicarse posteriormente al marketing técnico.