¿Qué es el MicroPython? Una introducción a Python-3 simplificado para microcontroladores

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.

MicroPython es un lenguaje de programación pequeño y liviano. Se ejecuta en microcontroladores y se utiliza para sistemas integrados y dispositivos de Internet de las cosas (IoT).

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.

Los orígenes de MicroPython

La pantalla de una computadora muestra el código MicroPython, rodeado de componentes y circuitos electrónicos, que simboliza los orígenes del lenguaje de programación.

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.

Damien George y la campaña KickStarter

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.

La evolución del código fuente de MicroPython

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-libmicropython constituyen el núcleo del proyecto, alojando las bibliotecas adicionales y el código del intérprete principal, respectivamente.

MicroPython vs CPython: comprender las diferencias

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.

Conceptos fundamentales de MicroPython

Una placa de circuito con el logotipo de MicroPython, rodeada de componentes electrónicos y fragmentos de código.

Explorar MicroPython requiere comprender conceptos fundamentales, como el firmware, el proceso de arranque utilizado y las familias de microcontroladores admitidas.

Fundamentos del proyecto MicroPython

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.

Firmware y proceso de arranque.

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.

Conceptos básicos del microcontrolador: PIC, STM32 y ESP

MicroPython admite una variedad de arquitecturas de microcontroladores, incluidas las familias PIC, STM32 y ESP.

  • PIC  : Los microcontroladores PIC de Microchip son populares debido a su simplicidad y asequibilidad.
  • STM32  : La familia STM32 de STMicroelectronics ofrece un alto rendimiento con una gama de opciones que proporcionan un equilibrio entre el consumo de energía y la capacidad de procesamiento.
  • ESP8266 y ESP32  : ESP8266 y ESP32 de Espressif han ganado una popularidad considerable debido a sus capacidades de Wi-Fi integradas.

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.

Configuración de MicroPython

Un escritorio con una computadora, un cable USB y una placa de microcontrolador. El código para configurar MicroPython aparece en la pantalla.

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.

Instalación en múltiples sistemas operativos.

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:

  • Linux: use el administrador de paquetes para instalar python3pip3. Luego, instale MicroPython usando pip3 install micropython
  • macOS: instale Homebrew si aún no está en su sistema, luego use brew install micropython
  • Windows: descargue el instalador de Windows desde el sitio web de MicroPython y siga el asistente de configuración

Configuración del entorno e implementación de código.

Luego del procedimiento de instalación, debemos proceder con la configuración del entorno a través de los siguientes pasos:

  1. Conecte la tarjeta MicroPython a su computadora.
  2. Identifica el puerto serie de la tarjeta.

    • Linux y macOS: verifique los puertos disponibles usando  ls /dev/tty.*
    • Windows: busque en el Administrador de dispositivos en "Puertos (COM y LPT)"
  3. Utilice una herramienta como mpfshellrshellpara la implementación:

    • Instalarpip3 install mpfshell(Linux/macOS) o pip install mpfshell(Windows)
    • Implementar código: vaya al directorio de su proyecto y ejecútelo  mpfshellseguido de  put your_script.py

Comprender los puertos y los controladores

Los puertos y controladores correctos son fundamentales para la comunicación entre nuestro ordenador y la tarjeta MicroPython:

  • Identifique el puerto de la placa del microcontrolador  como se mencionó anteriormente
  • Asegúrese de haber instalado los controladores necesarios:

    • Los controladores CP210x o FTDI son comunes para las tarjetas MicroPython.
    • Puede descargar controladores desde los sitios web de los fabricantes.

Placas y hardware MicroPython

Una placa MicroPython y hardware están colocados en una mesa de trabajo, con una pantalla de computadora que muestra el código y un soldador cerca.

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 oficial y sus variantes

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:

  • PyBoard v1.1: incluye un microcontrolador STM32F405RG con 192 KB de RAM.
  • Serie PyBoard D: versiones mejoradas con opciones de conectividad como Wi-Fi y Bluetooth.

Consideraciones sobre microcontroladores y RAM compatibles

MicroPython admite una variedad de microcontroladores, cada uno de ellos diferente en capacidades y funcionalidades:

EjeMicrocontroladorRAM
PyBoard v1.1STM32F405RG192KB
Placas basadas en ESP8266Tensílice L10696KB
Placas basadas en ESP32Tensílica Xtensa LX6520KB

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.

Compatibilidad con otras placas como Arduino y Raspberry Pi Pico

Si bien MicroPython puede ejecutarse en una variedad de placas:

  • Arduino: microPython no es compatible de forma nativa; sin embargo, existen soluciones mediante firmware especial como uPyCraft.
  • Raspberry Pi Pico: tiene soporte directo para MicroPython, con un microcontrolador RP2040 diseñado por Raspberry Pi Foundation con 264 KB de SRAM.

Programando con MicroPython

Una placa de circuito con código MicroPython mostrado en la pantalla de una computadora, rodeada de varios componentes electrónicos y un soldador.

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.

Sintaxis básica y funcionalidad de Python 3

MicroPython es fundamentalmente similar a Python 3 y comparte la misma sintaxis básica y paradigmas de programación.

Las variableslas estructuras de controllas 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.

Programación interactiva con REPL

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.

Módulos, bibliotecas e integración de Git.

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.

Desarrollo del proyecto

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.

Internet de las cosas y dispositivos conectados

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:

  • Integración de sensores: uso de sensores digitales y analógicos  para adquirir datos ambientales.
  • Procesamiento de datos: el MicroPython interactúa con el núcleo del dispositivo para procesar e interpretar los datos del sensor.
  • Comunicación: implementación de protocolos de red como MQTT o HTTP para la transmisión de datos.

Proyectos de domótica y robótica

Para domótica y robótica, MicroPython destaca como la opción ideal por su versatilidad:

  • Lógica del controlador: escritura de scripts para administrar dispositivos como termostatos inteligentes o sistemas de iluminación.
  • Robótica: programación de movimientos y tareas para robots que utilizan actuadores y controladores de motores.

En estas aplicaciones, nuestro desarrollo de diseño se centra en la respuesta y la confiabilidad en tiempo real.

Cómo construir proyectos educativos STEM

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:

  • Herramientas interactivas: creación de dispositivos que demuestren principios científicos.
  • Plataformas de aprendizaje: plataformas que ayudan a los estudiantes a escribir y ejecutar su propio código MicroPython.

Funciones avanzadas y personalización

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.

Manipulación de código de bytes y ensamblador en línea

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()

Compilación y creación de firmware personalizado

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:

  1. Clonando el repositorio de MicroPython desde GitHub
  2. Configurar opciones de creación
  3. Compilando el código fuente
  4. Actualizar el firmware compilado a nuestro hardware
# 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

Crear y administrar una bifurcación de MicroPython en GitHub

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:

  • Mantenga la bifurcación actualizada con el repositorio ascendente
  • Espere ramificaciones para nuevas funciones o correcciones de errores
  • Enviar solicitudes de extracción para las contribuciones que desea realizar
# Syncing our fork with the original repository
git fetch upstream
git checkout master
git merge upstream/master
git push

Conectividad y periféricos

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).

Trabaja con protocolos Wi-Fi, Bluetooth e 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

    • Escaneo de red
    • Gestión de conexión
    • Configuración del punto de acceso
  • Bluetooth

    • BLE Advertising
    • Servicios y características de BLE
    • Emparejamiento seguro

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.

Interfaz de sensores, actuadores y pantallas.

La interfaz con sensores, actuadores y pantallas se simplifica gracias al amplio soporte de la biblioteca MicroPython.

Los módulos e le machinepermiten 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

    • Lectura de datos (por ejemplo, temperatura, humedad)
    • Interfaz ADC, I2C, SPI
  • Actuadores

    • Motor de control
    • LED de conducción y relés
  • Vista

    • Integración OLED y LCD
    • Salida gráfica y basada en texto

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.

Comunicación serie y red.

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

    • configuración UART
    • Envío y recepción de datos

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

    • Creando enchufes
    • Protocolos TCP/IP y UDP
    • Comunicación cliente-servidor

Esto se vuelve fundamental en sistemas complejos de IoT donde múltiples dispositivos deben intercambiar datos de manera eficiente y confiable.

Expansión y recursos externos

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.

Agregar almacenamiento con tarjeta SD y memoria flash

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 energía y conectividad de baterías

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.

Solución de problemas y soporte comunitario

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.

Problemas comunes y cómo solucionarlos

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:

  1. Errores de importación de módulos: a veces, la importación de módulos puede devolver errores. Para resolver este problema, verifique que el nombre del módulo esté especificado correctamente y verifique que esté incluido en el firmware de MicroPython.
  2. Problemas de conexión serie: los problemas con la comunicación serie son bastante comunes. Puede resolver este tipo de problemas asegurándose de seleccionar el puerto y la velocidad de transmisión correctos y de que los cables estén bien conectados.
  3. Errores de asignación de memoria: cuando se queda sin memoria, puede resultar útil simplificar su código y administrar los recursos de manera eficiente mediante el uso de iteración en lugar de recursividad y liberando memoria tanto como sea posible.

Configuración de Cookies

Este sitio utiliza cookies. Puedes elegir permitir o rechazar ciertos tipos de esos. Más información sobre el uso está disponible en nuestrapolítica de privacidad.

Permiten la funcionalidad básica del sitio web. El sitio no funcionaría sin ellas.

Se utilizan para recopilar estadísticas de uso, con IP anónima, que nos ayudan a mejorar el sitio web.

¿Quiere recibir información especial sobre la electrónica industrial?

Protegemos tu privacidad y tratamos tus datos de conformidad con la regulación GDPR. Al enviar tus datos a través de este formulario, tu aceptas el procesamiento de los datos según nuestra Privacy Policy
Contáctenos