Glosario

baremetal

Un sistema sin un sistema operativo (completo), por ejemplo un sistema basado en un MCU. Al ejecutarse en un sistema baremetal, MicroPython funciona efectivamente como un pequeño sistema operativo, ejecutando los programas del usuario y proporcionando un intérprete de comandos (REPL).

protocolo de búfer

Cualquier objeto de Python que se pueda convertir automáticamente en bytes, como los objetos bytes, bytearray, memoryview y str, que implementan todos el «protocolo de búfer».

placa

Normalmente se refiere a una placa de circuito impreso (PCB) que contiene un microcontrolador y componentes de soporte. El firmware de MicroPython se proporciona normalmente por placa, ya que el firmware contiene tanto funcionalidad específica del MCU como funcionalidad a nivel de placa, como controladores o nombres de pines.

bytecode

Una representación compacta de un programa de Python que se genera al compilar el código fuente de Python. Esto es lo que la VM ejecuta realmente. El bytecode se genera normalmente de forma automática en tiempo de ejecución y es invisible para el usuario. Ten en cuenta que, aunque tanto CPython como MicroPython usan bytecode, el formato es diferente. También puedes precompilar el código fuente sin conexión usando el compilador cruzado.

callee-owned tuple

Esta es una construcción específica de MicroPython en la que, por razones de eficiencia, algunas funciones o métodos incorporados pueden reutilizar el mismo objeto de tupla subyacente para devolver datos. Esto evita tener que asignar una nueva tupla en cada llamada y reduce la fragmentación del heap. Los programas no deben conservar referencias a las callee-owned tuples y, en su lugar, solo extraer datos de ellas (o hacer una copia).

CircuitPython

Una variante de MicroPython desarrollada por Adafruit Industries.

CPython

CPython es la implementación de referencia del lenguaje de programación Python, y la más conocida. Sin embargo, es una de muchas implementaciones (incluidas Jython, IronPython, PyPy y MicroPython). Aunque la implementación de MicroPython difiere sustancialmente de CPython, su objetivo es mantener la mayor compatibilidad posible.

cross-compiler

También conocido como mpy-cross. Esta herramienta se ejecuta en tu PC y convierte un archivo .py que contiene código de MicroPython en un archivo .mpy que contiene bytecode de MicroPython. Esto significa que se carga más rápido (la placa no tiene que compilar el código) y usa menos espacio en la memoria flash (el bytecode es más eficiente en cuanto a espacio).

driver

Una biblioteca de MicroPython que implementa soporte para un componente concreto, como un sensor o una pantalla.

FFI

Acrónimo de Foreign Function Interface (interfaz de funciones externas). Un mecanismo que utiliza el puerto Unix de MicroPython para acceder a la funcionalidad del sistema operativo. No está disponible en los puertos baremetal.

filesystem

La mayoría de los puertos y placas de MicroPython proporcionan un sistema de archivos almacenado en la memoria flash que está disponible para el código del usuario a través de las APIs estándar de archivos de Python, como open(). Algunas placas también hacen accesible este sistema de archivos interno al anfitrión a través del almacenamiento masivo USB.

frozen module

Un módulo de Python que ha sido compilado de forma cruzada e integrado en la imagen del firmware. Esto reduce los requisitos de RAM, ya que el código se ejecuta directamente desde la memoria flash.

Recolector de basura

Un proceso en segundo plano que se ejecuta en Python (y en MicroPython) para recuperar la memoria no utilizada del heap.

GPIO

Entrada/salida de propósito general (general-purpose input/output). El medio más sencillo para controlar señales eléctricas (comúnmente llamadas «pines») en un microcontrolador. La GPIO normalmente permite que los pines sean de entrada o de salida, y establecer o leer su valor digital («0» o «1» lógico). MicroPython abstrae el acceso a la GPIO mediante las clases machine.Pin y machine.Signal.

GPIO port

Un grupo de pines GPIO, normalmente basado en las propiedades de hardware de estos pines (por ejemplo, que sean controlables por el mismo registro).

heap

Una región de RAM donde MicroPython almacena datos dinámicos. La gestiona automáticamente el Recolector de basura. Los distintos MCU y placas tienen cantidades muy diferentes de RAM disponible para el heap, lo que afectará a la complejidad que puede tener tu programa.

interned string

Una optimización que utiliza MicroPython para mejorar la eficiencia del trabajo con cadenas. Una cadena internada se referencia por su identidad (única) en lugar de por su dirección y, por tanto, se puede comparar rápidamente solo por su identificador. También significa que las cadenas idénticas se pueden deduplicar en memoria. La internación de cadenas es casi siempre invisible para el usuario.

MCU

Microcontrolador. Los microcontroladores suelen tener muchos menos recursos que un ordenador de escritorio, un portátil o un teléfono, pero son más pequeños, más baratos y requieren mucha menos energía. MicroPython está diseñado para ser lo bastante pequeño y optimizado como para ejecutarse en un microcontrolador moderno medio.

micropython-lib

MicroPython se distribuye (normalmente) como un único archivo ejecutable/binario con solo unos pocos módulos incorporados. No hay una biblioteca estándar extensa comparable a la de CPython. En su lugar, existe un proyecto relacionado pero independiente, micropython-lib, que proporciona implementaciones de muchos módulos de la biblioteca estándar de CPython.

Algunos de los módulos están implementados en Python puro y se ejecutan en cualquier puerto; el firmware de OpenMV congela una selección de estos (controladores de sensores, redes y utilidades auxiliares) directamente en la imagen del firmware para que se puedan importar sin instalar nada. Un número menor de módulos de micropython-lib usan FFI y solo funcionan en el puerto Unix de MicroPython; estos no están disponibles en las OpenMV Cam.

A diferencia de la biblioteca estándar de CPython, los módulos de micropython-lib que no están congelados se instalan individualmente, ya sea copiándolos en el sistema de archivos o, en placas con capacidad de red, usando mip.

MicroPython port

MicroPython admite distintas placas, RTOS y sistemas operativos, y se puede adaptar con relativa facilidad a sistemas nuevos. A MicroPython con soporte para un sistema concreto se le denomina un «puerto» (port) a ese sistema. Los distintos puertos pueden tener funcionalidades muy diferentes. Esta documentación pretende ser una referencia de las APIs genéricas disponibles en los distintos puertos (el «núcleo de MicroPython»). Ten en cuenta que algunos puertos pueden seguir omitiendo algunas de las APIs descritas aquí (por ejemplo, debido a limitaciones de recursos). Cualquiera de estas diferencias, así como las extensiones específicas de cada puerto más allá de la funcionalidad del núcleo de MicroPython, se describirían en la documentación específica de cada puerto, que es independiente.

MicroPython Unix port

El puerto Unix es uno de los principales puertos de MicroPython. Está pensado para ejecutarse en sistemas operativos compatibles con POSIX, como Linux, MacOS, FreeBSD, Solaris, etc. También sirve de base para el puerto de Windows. El puerto Unix es muy útil para el desarrollo y las pruebas rápidas del lenguaje MicroPython y de las características independientes de la máquina. También puede funcionar de forma similar al ejecutable python de CPython.

mip

Un instalador de paquetes para MicroPython (mip - «mip installs packages»). Instala paquetes de MicroPython desde micropython-lib, GitHub o URLs arbitrarias. mip se puede usar en el propio dispositivo en placas con capacidad de red, e internamente lo usan herramientas como mpremote.

Consulta Gestión de paquetes para obtener más información sobre el uso de mip.

mpremote

Una herramienta para interactuar con un dispositivo MicroPython. Consulta Control remoto de MicroPython: mpremote.

.mpy file

La salida del compilador cruzado. Una forma compilada de un archivo .py que contiene bytecode de MicroPython en lugar de código fuente de Python.

native

Normalmente se refiere al «código nativo», es decir, el código máquina para el microcontrolador de destino (ARM Thumb en las OpenMV Cam basadas en Cortex-M). El decorador @micropython.native se puede aplicar a una función de MicroPython para generar código nativo en lugar de bytecode para esa función, lo que probablemente será más rápido pero usará más RAM.

port

Normalmente es la abreviatura de puerto de MicroPython, pero también puede referirse a GPIO port.

.py file

Un archivo que contiene código fuente de Python.

pyboard.py

Una herramienta del lado del anfitrión, ya superada, para interactuar con una placa MicroPython: ejecutar scripts y acceder al sistema de archivos a través del REPL en bruto. Consulta su reemplazo, mpremote.

REPL

Un acrónimo de «Read, Eval, Print, Loop» (leer, evaluar, imprimir, repetir). Es el prompt interactivo de Python, útil para depurar o probar fragmentos cortos de código. Las OpenMV Cam ponen el REPL a disposición de un PC anfitrión a través de USB (un dispositivo serie USB CDC).

small integer

MicroPython optimiza la representación interna de los enteros de modo que los valores «pequeños» no ocupen espacio en el heap, y los cálculos con ellos no requieran asignación en el heap. En la mayoría de los puertos de 32 bits, esto corresponde a valores en el intervalo -2**30 <= x < 2**30, pero esto debe considerarse un detalle de implementación y no debe darse por sentado.

stream

También conocido como «objeto similar a un archivo» (file-like object). Un objeto de Python que proporciona acceso secuencial de lectura y escritura a los datos subyacentes. Un objeto de flujo (stream) implementa una interfaz correspondiente, que consta de métodos como read(), write(), readinto(), seek(), flush(), close(), etc. Un flujo es un concepto importante en MicroPython; muchos objetos de E/S implementan la interfaz de flujo y, por tanto, se pueden usar de forma coherente e intercambiable en distintos contextos. Para obtener más información sobre los flujos en MicroPython, consulta el módulo io.

UART

Acrónimo de «Universal Asynchronous Receiver/Transmitter» (transmisor-receptor asíncrono universal). Es un periférico que envía datos a través de un par de pines (TX y RX). Muchas placas incluyen una forma de hacer que al menos uno de los UART esté disponible para un PC anfitrión como puerto serie a través de USB.

upip

Un gestor de paquetes para MicroPython ya obsoleto, inspirado en el pip de CPython, pero mucho más pequeño y con funcionalidad reducida. Consulta su reemplazo, mip.

webrepl

Una forma de conectarse al REPL (y transferir archivos) de un dispositivo a través de internet desde un navegador. Consulta https://micropython.org/webrepl