MicroPython es una implementación de software de un lenguaje de programación en gran medida compatible con Python 3, escrito en C , que está optimizado para ejecutarse en un microcontrolador . [2] [3]
MicroPython consta de un compilador de Python para bytecode y un intérprete de tiempo de ejecución de ese bytecode. Se presenta al usuario un mensaje interactivo (el REPL ) para ejecutar comandos compatibles de inmediato. Se incluye una selección de bibliotecas básicas de Python; MicroPython incluye módulos que le dan al programador acceso a hardware de bajo nivel. [4]
MicroPython tiene un ensamblador en línea que permite que el código se ejecute a toda velocidad, pero no es portable entre diferentes microcontroladores.
El código fuente del proyecto está disponible en GitHub bajo la licencia MIT . [5]
MicroPython fue creado originalmente por el programador australiano Damien George, después de una exitosa campaña respaldada por Kickstarter en 2013. [6] La campaña original de Kickstarter lanzó MicroPython con una placa de desarrollo "pyboard" impulsada por STM32F4 . Mientras tanto, MicroPython se ha desarrollado para soportar una serie de arquitecturas basadas en ARM . [7] Los puertos compatibles con la línea principal son ARM Cortex-M (muchas placas STM32 [8] , placas RP2040 , TI CC3200/WiPy, placas Teensy, serie Nordic nRF, SAMD21 y SAMD51), ESP8266 , ESP32 , [9] PIC de 16 bits, Unix, Windows, Zephyr y JavaScript. [10] Además, hay muchas bifurcaciones para una variedad de sistemas y plataformas de hardware que no son compatibles con la línea principal. [11]
En 2016, se creó una versión de MicroPython para BBC Micro Bit como parte de la contribución de la Python Software Foundation a la asociación de Micro Bit con la BBC. [12]
En julio de 2017, MicroPython se bifurcó para crear CircuitPython , una versión de MicroPython con énfasis en la educación y la facilidad de uso. MicroPython y CircuitPython admiten conjuntos de hardware ligeramente diferentes (por ejemplo, CircuitPython admite placas Atmel SAM D21 y D51, pero abandonó la compatibilidad con ESP8266). A partir de la versión 4.0, CircuitPython se basa en la versión 1.9.4 de MicroPython. [13]
En 2017, Microsemi creó un puerto MicroPython para la arquitectura RISC-V (RV32 y RV64). [14]
En abril de 2019, se creó una versión de MicroPython para Lego Mindstorms EV3 . [15]
En enero de 2021, se creó un puerto MicroPython para el RP2040 (ARM Cortex-M0+, en Raspberry Pi Pico y otros). [16]
MicroPython tiene la capacidad de ejecutar Python, lo que permite a los usuarios crear programas simples y fáciles de entender. [17] MicroPython admite muchas bibliotecas estándar de Python, admitiendo más del 80% de las características de las bibliotecas más utilizadas de Python. [17] MicroPython fue diseñado específicamente para soportar la brecha de rendimiento típica entre los microcontroladores y Python. [18] El código Python puede acceder e interactuar directamente con el hardware, con mayores posibilidades de hardware que no están disponibles utilizando una aplicación Python normal que se ejecuta en un sistema operativo . [19]
La utilización de la tecnología de capa de abstracción de hardware (HAL) por parte de MicroPython permite que el código desarrollado sea portátil entre diferentes microcontroladores dentro de la misma familia o plataforma y en dispositivos que admiten y pueden descargar MicroPython. Los programas suelen desarrollarse y probarse en microcontroladores de alto rendimiento y distribuirse con la aplicación final utilizada en microcontroladores de menor rendimiento. [20]
MicroPython ofrece la funcionalidad, una vez que se ha escrito un nuevo código, de crear un módulo congelado y usarlo como una biblioteca que puede ser parte del firmware desarrollado . Esta característica ayuda a evitar la descarga repetitiva del mismo código probado, ya libre de errores, en un entorno MicroPython. Este tipo de módulo se guardará en el directorio de módulos de un microcontrolador para compilarlo y cargarlo en el microcontrolador, donde la biblioteca estará disponible mediante el comando de importación de Python para usarse repetidamente. [20]
El bucle de lectura-evaluación-impresión (REPL) permite a un desarrollador ingresar líneas de código individuales y ejecutarlas inmediatamente en una terminal . [21] Los sistemas basados en Linux y macOS tienen emuladores de terminal que se pueden usar para crear una conexión directa al REPL de un dispositivo MicroPython mediante una conexión USB en serie . El REPL ayuda con la prueba inmediata de partes de una aplicación , ya que cada parte del código se puede ejecutar y los resultados se pueden examinar visualmente. Una vez que se cargan diferentes partes del código en el REPL, se pueden usar características adicionales del REPL para experimentar con la funcionalidad de ese código. [17]
Comandos REPL útiles (una vez conectado a una consola serial): [21]
help()
: mensaje de ayudahelp("modules")
: enumera los módulos integradosimport board
↵ Enterdir(board)
: enumera todos los pines de la placa del microcontrolador que están disponibles para usarse en el código de un programaAunque MicroPython implementa completamente la versión 3.4 del lenguaje Python y gran parte de la 3.5, no implementa todas las características del lenguaje introducidas a partir de la 3.5 en adelante, [22] aunque sí algunas sintaxis nuevas de la 3.6 y características más recientes de versiones posteriores, por ejemplo de la 3.8 (expresiones de asignación) y la 3.9. Incluye un subconjunto de la biblioteca estándar. [23]
MicroPython tiene un soporte de hardware más limitado en el mercado de microcontroladores que otras plataformas populares, como Arduino con una menor cantidad de opciones de microcontroladores que admiten el lenguaje. [18] MicroPython no incluye un entorno de desarrollo integrado (IDE) o un editor específico a diferencia de otras plataformas. [18]
La sintaxis de MicroPython se adoptó de Python, debido a su estilo claro y fácil de entender y su potencia. [24] A diferencia de la mayoría de los otros lenguajes de programación, se utiliza menos puntuación y menos maquinaciones sintácticas para priorizar la legibilidad. [17]
MicroPython adopta el estilo de bloques de código de Python, con código específico para una función , condición o bucle en particular siendo sangrado. [17] Esto difiere de la mayoría de los otros lenguajes que normalmente usan símbolos o palabras clave para delimitar bloques. [17] Esto ayuda con la legibilidad del código de MicroPython ya que la estructura visual refleja la estructura semántica. Esta característica clave es simple pero importante ya que la sangría mal utilizada puede resultar en la ejecución del código bajo una condición incorrecta o un error general del intérprete . [17]
Los dos puntos (:) son el símbolo clave utilizado para indicar el final de una declaración de condición. [17] El tamaño de la sangría es equivalente a una tabulación o 4 espacios.
MicroPython tiene la capacidad de realizar varias operaciones matemáticas utilizando operaciones primitivas y lógicas. [19]
MicroPython es una implementación ágil y eficiente de Python con bibliotecas similares a las de Python. [25] Algunas bibliotecas estándar de Python tienen una biblioteca equivalente en MicroPython renombrada para distinguir entre las dos. Las bibliotecas de MicroPython son más pequeñas y se han eliminado o modificado funciones menos populares para ahorrar memoria . [19]
Los tres tipos de bibliotecas en MicroPython: [19]
MicroPython es altamente personalizable y configurable, con un lenguaje diferente para cada placa ( microcontrolador ) y la disponibilidad de bibliotecas puede variar. Algunas funciones y clases de un módulo o de todo el módulo pueden no estar disponibles o estar alteradas. [19]
Cuando los desarrolladores comienzan a crear una nueva aplicación, es posible que las bibliotecas y los controladores estándar de MicroPython no cumplan con los requisitos, ya que no cuentan con suficientes operaciones o cálculos. De manera similar a Python, existe la posibilidad de ampliar la funcionalidad de MicroPython con bibliotecas personalizadas que amplían la capacidad de las bibliotecas y el firmware existentes. [20]
En MicroPython, los archivos que terminan con .py tienen preferencia sobre otros alias de biblioteca, lo que permite a los usuarios ampliar el uso y la implementación de las bibliotecas existentes. [19]
A medida que la implementación y la popularidad de MicroPython siguen creciendo, más placas tienen la capacidad de ejecutar MicroPython. Muchos desarrolladores están creando versiones específicas para procesadores que se pueden descargar en diferentes microcontroladores. [19] La instalación de MicroPython en microcontroladores está bien documentada y es fácil de usar. [20] MicroPython permite que las interacciones entre el hardware del microcontrolador y las aplicaciones sean simples, lo que permite el acceso a una variedad de funciones mientras se trabaja en un entorno con recursos limitados, con un alto nivel de capacidad de respuesta. [17]
Los dos tipos de placas utilizadas para ejecutar MicroPython: [19]
Para mover un programa a una placa MicroPython, crea un archivo y cópialo en el microcontrolador para ejecutarlo. Con el hardware conectado a un dispositivo, como una computadora , la unidad flash de la placa aparecerá en el dispositivo, lo que permitirá mover archivos a la unidad flash. Habrá dos archivos de Python existentes, boot.py y main.py que normalmente no se modifican, main.py puede modificarse si desea ejecutar el programa cada vez que se inicia el microcontrolador ; de lo contrario, los programas se ejecutarán utilizando la consola REPL. [19]
Pyboard es la placa de microcontrolador oficial de MicroPython que es totalmente compatible con las funciones de software de MicroPython. Las funciones de hardware de Pyboard incluyen: [4]
La placa contiene una unidad interna (sistema de archivos) llamada /flash que se almacena dentro de la memoria flash de la placa; además, se puede insertar una tarjeta microSD en una ranura y se puede acceder a ella a través de /sd. Cuando se inicia, una placa debe seleccionar un sistema de archivos desde el que iniciar, ya sea /flash o /sd, y el directorio actual debe configurarse como /flash o /sd. De manera predeterminada, si se inserta una tarjeta SD, se utilizará /sd; si no, se utilizará /flash. Si es necesario, se puede evitar el uso de la tarjeta SD para el proceso de arranque creando un archivo vacío llamado /flash/SKIPSD que permanecerá en la placa y existirá cuando se inicie la placa y omitirá la tarjeta SD para el proceso de arranque. [4]
Cuando el pyboard se enciende normalmente o se presiona el botón de reinicio, entonces el pyboard se inicia en un modo estándar, lo que significa que se ejecuta el archivo boot.py, luego se configura el USB y finalmente se ejecutará el programa Python. [4]
Existe la posibilidad de anular la secuencia de arranque estándar manteniendo pulsado el interruptor de usuario mientras la placa se encuentra en proceso de arranque y, a continuación, pulsando el botón de reinicio mientras se mantiene pulsado el interruptor de usuario. Los LED de la placa pyboard cambiarán de modo y, una vez que hayan alcanzado el modo deseado por el usuario, se puede soltar el interruptor de usuario y la placa arrancará en el modo específico. [4]
Los modos de arranque son: [4]
Programa Hola mundo :
# imprimir en la consola serialimprimir ( '¡Hola, mundo!' )
Importar + encender un LED:
importar pyb# Encender el LEDpyb . LED ( 1 ) . encendido ()
Lectura de un archivo + bucle:
importar sistema operativo#abrir y leer un archivocon abierto ( '/readme.txt' ) como f :imprimir ( f . leer ())
MicroPython incluye un compilador cruzado que genera bytecode de MicroPython (extensión de archivo .mpy ). El código Python se puede compilar en bytecode directamente en un microcontrolador o se puede precompilar en otro lugar.
El firmware de MicroPython se puede construir sin el compilador, dejando solo la máquina virtual que puede ejecutar los programas mpy precompilados .
MicroPython se utiliza a través de firmware que se carga mediante un software estándar en un microcontrolador particular en la memoria flash y se comunica mediante una aplicación de terminal cargada en una computadora que emula una interfaz serial. [20]
Los principales usos de MicroPython se pueden generalizar en tres categorías: [20]
La implementación de MicroPython puede variar según la disponibilidad de bibliotecas estándar y de soporte y el tamaño de la memoria flash y RAM del microcontrolador. [20]