programming
MicroPython es una implementación optimizada y eficiente del lenguaje de programación Python 3, optimizada para su ejecución en microcontroladores. Estos pequeños componentes electrónicos son el corazón de muchos dispositivos modernos, incluidos sensores, motores y pantallas, pero también de cosas más complejas como robots y dispositivos inteligentes.
A diferencia de Python, que es un lenguaje de programación de alto nivel utilizado para el desarrollo de software, MicroPython se adaptó específicamente para microcontroladores. Esto permite aprovechar el hecho de contar con un lenguaje potente como Python en entornos donde los recursos son limitados y la eficiencia y el control de los recursos son fundamentales.
Las raíces de MicroPython se encuentran en el intento de permitir la programación de unidades de microcontroladores (en la jerga "MCU") con facilidad y flexibilidad, reinterpretando de forma optimizada un lenguaje típico de la programación de alto nivel.
Normalmente, la programación de microcontroladores requiere el uso de lenguajes de bajo nivel como C o C++, pero MicroPython aporta algunas características nuevas e interesantes.
Primero, trae consigo un subconjunto de la biblioteca estándar de Python, lo que significa que podemos usar muchas de las funciones y módulos familiares de Python, aunque dentro de las limitaciones impuestas por el hardware.
Al adoptar MicroPython estratégicamente, es posible reducir significativamente los tiempos de desarrollo aprovechando algunas de sus fortalezas.
Por ejemplo, compatibilidad con indicaciones interactivas, que le permiten ejecutar comandos y ver los resultados inmediatamente, como trabajar en Python en una PC o servidor.
Esta característica es excepcionalmente útil para crear prototipos, depurar y aprender rápidamente cómo interactúa el hardware con el software.
Además, la sintaxis y las bibliotecas de MicroPython están diseñadas para interactuar sin problemas con el hardware, lo que nos brinda un control casi directo sobre la funcionalidad de los periféricos de la MCU.
Para explorar la génesis de MicroPython, es necesario partir de su campaña Kickstarter. Nuestro viaje ilustra el desarrollo de este intérprete lean a través de hitos clave, definiendo gradualmente su posición única en el panorama de la programación de bajo nivel.
En 2013, Damien George lanzó una campaña en Kickstarter para financiar el desarrollo de MicroPython, una nueva versión de Python diseñada para ejecutarse en microcontroladores. La campaña fue un éxito y recaudó más de £97 000, superando significativamente su objetivo inicial.
George, con experiencia en física teórica e ingeniería de software, tenía como objetivo llevar la facilidad de la programación Python al mundo del hardware. Por tanto, su objetivo era ambicioso, pero no inalcanzable. Para facilitar su implementación, George apuntó inmediatamente al desarrollo colaborativo.
El código fuente de MicroPython se ha puesto a disposición del público en GitHub, bajo la licencia MIT, lo que permite una verdadera colaboración abierta. El proyecto ha evolucionado rápidamente gracias a las contribuciones de desarrolladores de todo el mundo.
En particular, los dos repositorios centrales, micropython-lib
y micropython
constituyen el núcleo del proyecto, alojando las bibliotecas adicionales y el código del intérprete principal, respectivamente.
CPython es la implementación predeterminada y más popular del lenguaje de programación Python. Está escrito en C y Python y representa la referencia con la que todas las demás implementaciones de Python quieren ser compatibles.
MicroPython, aunque está inspirado en CPython, se diferencia en que está hecho a medida para entornos limitados como los microcontroladores. Si bien CPython es la implementación de referencia de Python en su totalidad, MicroPython incorpora solo los elementos esenciales, con el objetivo de lograr una huella de memoria mínima y un mejor manejo de las limitaciones del hardware.
Es importante tener en cuenta que es posible que MicroPython no incluya todas las bibliotecas o funciones estándar que se encuentran en CPython. Sin embargo, mantiene una similitud sintáctica de alto nivel, lo que garantiza importantes características de legibilidad y mantenibilidad.
Explorar MicroPython requiere comprender conceptos fundamentales, como el firmware, el proceso de arranque utilizado y las familias de microcontroladores admitidas.
Como ya se mencionó, MicroPython es una implementación eficiente de Python 3, diseñada para ejecutarse en microcontroladores y en entornos limitados. Básicamente, el objetivo del proyecto es hacer que la programación de dispositivos digitales sea lo más sencilla y accesible posible.
El proyecto implica optimizar el lenguaje Python para ejecutarlo en hardware con capacidad de procesamiento y memoria limitadas. Esto implica una combinación de reescribir las bibliotecas principales de Python para hacerlas más compactas y diseñar un compilador cruzado que pueda convertir scripts de Python en código de bytes optimizado para varios microcontroladores.
MicroPython incluye una biblioteca estándar completa que permite escribir código en Python en dispositivos más pequeños, que antes se limitaban al uso de lenguajes tradicionales como C o ensamblador.
El firmware en MicroPython actúa como intermediario entre el software y el hardware. Dicho firmware está diseñado para ser liviano y altamente portátil, y admite una amplia gama de dispositivos.
Cuando actualiza este firmware en un microcontrolador, encapsula automáticamente el intérprete de MicroPython y una parte de la biblioteca estándar de Python.
Cuando enciendes el dispositivo, el gestor de arranque, un pequeño programa almacenado en la memoria no volátil del chip, inicia el proceso.
Este gestor de arranque es responsable de configurar el hardware básico y ejecutar el firmware principal, que incluye el intérprete MicroPython.
El proceso de inicio debe ser rápido y confiable, y debería permitirle comenzar a ejecutar scripts de Python casi inmediatamente después de encender el dispositivo.
MicroPython admite una variedad de arquitecturas de microcontroladores, incluidas las familias PIC, STM32 y ESP.
El firmware MicroPython para estos dispositivos no solo incluye funcionalidad estándar sino también módulos para comunicación en red, lo que permite la creación de dispositivos conectados.
En esta sección, lo guiaremos en la instalación de MicroPython en varios sistemas operativos, configuraremos el entorno para implementar su código y comprenderemos los puertos y controladores necesarios. Nuestro objetivo es brindarle los pasos prácticos necesarios para una configuración fluida de MicroPython.
Para instalar MicroPython, debemos asegurarnos de la compatibilidad con nuestro sistema operativo. Podemos instalarlo en Linux,macOS y Windows con procedimientos específicos para cada uno:
python3
y pip3
. Luego, instale MicroPython usando pip3 install micropython
brew install micropython
Luego del procedimiento de instalación, debemos proceder con la configuración del entorno a través de los siguientes pasos:
Identifica el puerto serie de la tarjeta.
ls /dev/tty.*
Utilice una herramienta como mpfshell
o rshell
para la implementación:
pip3 install mpfshell
(Linux/macOS) o pip install mpfshell
(Windows)mpfshell
seguido de put your_script.py
Los puertos y controladores correctos son fundamentales para la comunicación entre nuestro ordenador y la tarjeta MicroPython:
Asegúrese de haber instalado los controladores necesarios:
Ahora exploraremos los componentes de hardware esenciales de MicroPython, centrándonos en las placas principales disponibles, los microcontroladores que utilizan y cómo se comparan con otras plataformas populares como Arduino y Raspberry Pi Pico.
PyBoard es la placa de desarrollo oficial de MicroPython, diseñada para proporcionar una interfaz de hardware de bajo nivel para ejecutar scripts de MicroPython. Está disponible en diferentes variaciones, por ejemplo:
MicroPython admite una variedad de microcontroladores, cada uno de ellos diferente en capacidades y funcionalidades:
Eje | Microcontrolador | RAM |
---|---|---|
PyBoard v1.1 | STM32F405RG | 192KB |
Placas basadas en ESP8266 | Tensílice L106 | 96KB |
Placas basadas en ESP32 | Tensílica Xtensa LX6 | 520KB |
La RAM es fundamental porque determina la complejidad de los scripts y programas. Cuanta más RAM esté disponible, más sofisticadas pueden ser las aplicaciones.
Si bien MicroPython puede ejecutarse en una variedad de placas:
En esta sección exploraremos los conceptos básicos para trabajar con este lenguaje de programación, destacando características clave como su sintaxis, el entorno REPL interactivo y cómo se integra con módulos, bibliotecas y sistemas de control de versiones como Git.
MicroPython es fundamentalmente similar a Python 3 y comparte la misma sintaxis básica y paradigmas de programación.
Las variables, las estructuras de control, las funciones y las clases funcionan como se espera en Python. Por ejemplo, crear una variable es tan simple como un ajuste de asignación en Python, counter = 10
y escribir un bucle se realiza mediante la sintaxis familiar for item in range(counter)
.
Se conservan la legibilidad y la concisión inherentes de Python, lo que permite que cualquier persona con experiencia con Python 3 realice la transición a MicroPython con relativa facilidad.
REPL significa Read-Eval-Print-Loop y es un entorno de programación dinámico incluido en MicroPython.
Nos permite ejecutar comandos de Python uno a la vez y ver resultados inmediatos. Podemos interactuar con REPL directamente en el microcontrolador conectándonos a él a través de una interfaz en serie o mediante la red.
>>> print("Hello, MicroPython!")
Hello, MicroPython!
La interacción anterior en REPL es esencial para demostrar cómo la retroalimentación inmediata en las tareas de programación puede acelerar los procesos de aprendizaje y depuración.
MicroPython admite módulos y bibliotecas que se pueden importar para ampliar su funcionalidad.
Esto es crucial ya que nos permite reutilizar e incluir funciones complejas sin escribirlas desde cero. Por ejemplo, utilizar un módulo de red import network
nos permite conectar un dispositivo a Internet.
Para administrar y compartir código de manera efectiva, MicroPython se integra convenientemente con Git, el popular sistema de versiones.
Esto significa que podemos colaborar en proyectos enviando y extrayendo código de repositorios, rastreando cambios y gestionando lanzamientos, todas prácticas cruciales para el desarrollo de software sostenible.
MicroPython sirve como catalizador para una amplia gama de iniciativas de desarrollo de proyectos, particularmente en áreas donde convergen proyectos de Internet de las cosas (IoT), domótica y educación.
Como implementación eficiente y simplificada de Python 3, MicroPython está hecho a medida para microcontroladores y sistemas compactos en chips (SoC), lo que nos permite no solo escribir código limpio y simple, sino también integrar varias funciones con facilidad y precisión.
A menudo utilizamos MicroPython para el desarrollo de productos de Internet de las cosas (IoT) porque ofrece una experiencia perfecta para codificar dispositivos conectados. Nuestros proyectos normalmente involucran:
Para domótica y robótica, MicroPython destaca como la opción ideal por su versatilidad:
En estas aplicaciones, nuestro desarrollo de diseño se centra en la respuesta y la confiabilidad en tiempo real.
MicroPython es muy adecuado para proyectos educativos STEM debido a su sintaxis simple y su rápida curva de aprendizaje. De hecho, es posible diseñar tanto kits educativos como experimentos diversos, como por ejemplo:
MicroPython permite a los desarrolladores experimentados superar los límites de las secuencias de comandos simples.
De hecho, es posible personalizar el comportamiento, optimizar el rendimiento y mantener las versiones de MicroPython utilizando funciones avanzadas como la compilación de firmware personalizada y la manipulación de códigos de bytes.
En MicroPython, el ensamblador en línea brinda la capacidad de escribir lenguaje ensamblador directamente dentro de nuestro código Python.
# Esempio di inline assembler per l'aggiunta di due interi
@micropython.asm_thumb
def add(r0, r1):
add(r0, r0, r1)
Esto aprovecha toda la velocidad y el control del procesador, una característica clave cuando se necesita una sincronización exacta o instrucciones específicas.
En cambio, la gestión del bytecode permite optimizar la máquina virtual Python. Por ejemplo, puede inspeccionar, modificar o ampliar las operaciones de código de bytes para mejorar el rendimiento o una funcionalidad personalizada.
# Ejemplo de manipulación de bytecode en MicroPython
import micropython
micropython.bytecode()
Es posible compilar MicroPython para crear firmware personalizado.
Este proceso permite la inclusión o eliminación de módulos, la optimización para hardware específico o incluso la integración de nuevas funciones.
Los pasos para crear firmware personalizado suelen implicar:
# Clonar el repositorio MicroPython
git clone https://github.com/micropython/micropython.git
# Compilación del código fuente en un sistema basado en Unix
make -C mpy-cross && make -C unix
Para mantener una versión personalizada de MicroPython, puede bifurcar el repositorio oficial en GitHub.
Esto nos permite experimentar con cambios, rastrearlos y posteriormente contribuir a la comunidad MicroPython.
Nuestro flujo de trabajo para gestionar una bifurcación MicroPython incluye:
# Syncing our fork with the original repository
git fetch upstream
git checkout master
git merge upstream/master
git push
MicroPython facilita la conectividad y la interfaz de una amplia gama de periféricos, lo que lo convierte en una excelente opción para el desarrollo de aplicaciones de Internet de las cosas (IoT).
MicroPython proporciona un sólido soporte para conectividad Wi-Fi y Bluetooth, lo que libera el potencial para innumerables aplicaciones de IoT.
La pila WiFi permite una conexión perfecta a redes inalámbricas, lo que permite que los dispositivos programados en MicroPython se comuniquen a través de Internet.
Usando el módulo network
, puede buscar redes disponibles, establecer conexiones e incluso configurar MicroPython como punto de acceso.
Para Bluetooth, el módulo bluetooth
disponible en MicroPython proporciona una interfaz para configurar conexiones Bluetooth de bajo consumo (BLE), lo que permite que los dispositivos interactúen con sensores y periféricos habilitados para BLE.
Wifi
Bluetooth
En cuanto a los protocolos de IoT, el MicroPython admite inherentemente MQTT (Message Queuing Telemetry Transport), un protocolo de mensajería liviano ideal para sensores pequeños y dispositivos móviles.
La interfaz con sensores, actuadores y pantallas se simplifica gracias al amplio soporte de la biblioteca MicroPython.
Los módulos e le machine
permiten pyb
comunicarse con varios componentes electrónicos a través de pines GPIO (entrada/salida de uso general), PWM (modulación de ancho de pulso), ADC (convertidor analógico a digital) y más.
Sensores
Actuadores
Vista
Esto garantiza que los proyectos que implican monitoreo y control en tiempo real, como termostatos inteligentes o brazos robóticos, se puedan ejecutar de manera eficiente con un código limpio y conciso.
MicroPython se destaca por facilitar la comunicación en serie y la creación de redes.
El módulo uos
proporciona funcionalidad para acceder al receptor/transmisor asíncrono universal (UART) para comunicaciones en serie, una capacidad crítica para diseños que requieren transmisión de datos entre dispositivos.
Conexiones en serie
Además de UART, MicroPython admite protocolos de red de nivel superior, ofreciendo TCP/IP y UDP a través del módulo usocket
, lo que permite una comunicación de red sólida para dispositivos MicroPython.
Neto
Esto se vuelve fundamental en sistemas complejos de IoT donde múltiples dispositivos deben intercambiar datos de manera eficiente y confiable.
Puede mejorar significativamente la funcionalidad de los sistemas MicroPython incorporando almacenamiento adicional, soluciones de administración de energía y una variedad de accesorios adicionales.
Tarjetas SD: puede ampliar la capacidad de almacenamiento de sus dispositivos MicroPython insertando tarjetas SD. Esto es especialmente útil para aplicaciones de registro de datos donde es necesario almacenar grandes cantidades de datos.
Memoria flash: muchas placas MicroPython vienen con memoria flash incorporada. Si se requiere memoria adicional, puede considerar agregar chips flash adicionales al espacio disponible.
Gestión de la batería: la gestión eficiente de la energía es fundamental para los proyectos portátiles de MicroPython. Los controladores de carga y los circuitos integrados de administración de energía se integran fácilmente para garantizar un suministro de energía constante, así como la longevidad de la batería.
Conectividad de la batería: muchas placas admiten conexiones a baterías LiPo, lo que permite un funcionamiento sin ataduras. Se requiere una consideración cuidadosa de las especificaciones de la batería y la conectividad para cumplir con los requisitos de energía del dispositivo.
Puede encontrar apoyo en la comunidad MicroPython cuando tenga dificultades para superar los obstáculos encontrados mientras programa con MicroPython.
Ya sea que esté luchando con problemas comunes o buscando conocimientos profundos, los foros y la wiki son recursos invaluables de soporte. A continuación le proporcionamos una descripción general de los errores más comunes y las soluciones sugeridas.
A menudo te encuentras con una serie de problemas comunes cuando trabajas con MicroPython.
A continuación te presentamos algunos problemas frecuentes y sus soluciones que podemos recomendar:
¿Quiere recibir información especial sobre la electrónica industrial?