Glossário

baremetal

Um sistema sem um sistema operacional (completo), por exemplo um sistema baseado em MCU. Ao rodar em um sistema baremetal, o MicroPython funciona efetivamente como um pequeno sistema operacional, executando programas do usuário e fornecendo um interpretador de comandos (REPL).

buffer protocol

Qualquer objeto Python que pode ser convertido automaticamente em bytes, como objetos bytes, bytearray, memoryview e str, que implementam o “buffer protocol”.

board

Normalmente isso se refere a uma placa de circuito impresso (PCB) contendo um microcontrolador e componentes de suporte. O firmware do MicroPython é normalmente fornecido por placa, pois o firmware contém tanto funcionalidades específicas do MCU quanto funcionalidades em nível de placa, como drivers ou nomes de pinos.

bytecode

Uma representação compacta de um programa Python que é gerada ao compilar o código-fonte Python. É isso que a VM realmente executa. O bytecode é normalmente gerado automaticamente em tempo de execução e é invisível para o usuário. Observe que, embora o CPython e o MicroPython usem bytecode, o formato é diferente. Você também pode pré-compilar o código-fonte offline usando o cross-compiler.

callee-owned tuple

Esta é uma construção específica do MicroPython na qual, por motivos de eficiência, algumas funções ou métodos integrados podem reutilizar o mesmo objeto de tupla subjacente para retornar dados. Isso evita ter que alocar uma nova tupla a cada chamada e reduz a fragmentação do heap. Os programas não devem manter referências a callee-owned tuples e, em vez disso, devem apenas extrair os dados delas (ou fazer uma cópia).

CircuitPython

Uma variante do MicroPython desenvolvida pela Adafruit Industries.

CPython

O CPython é a implementação de referência da linguagem de programação Python e a mais conhecida. No entanto, é uma de muitas implementações (incluindo Jython, IronPython, PyPy e MicroPython). Embora a implementação do MicroPython difira substancialmente do CPython, ela busca manter o máximo de compatibilidade possível.

cross-compiler

Também conhecido como mpy-cross. Esta ferramenta roda no seu PC e converte um .py file contendo código MicroPython em um .mpy file contendo bytecode do MicroPython. Isso significa que ele carrega mais rápido (a placa não precisa compilar o código) e usa menos espaço na flash (o bytecode é mais eficiente em espaço).

driver

Uma biblioteca do MicroPython que implementa suporte para um componente específico, como um sensor ou display.

FFI

Sigla para Foreign Function Interface. Um mecanismo usado pela MicroPython Unix port para acessar funcionalidades do sistema operacional. Isso não está disponível em ports baremetal.

filesystem

A maioria dos ports e placas do MicroPython fornece um sistema de arquivos armazenado na flash que está disponível para o código do usuário por meio das APIs padrão de arquivos do Python, como open(). Algumas placas também tornam esse sistema de arquivos interno acessível ao host via armazenamento em massa USB.

frozen module

Um módulo Python que foi compilado de forma cruzada e empacotado na imagem do firmware. Isso reduz os requisitos de RAM, pois o código é executado diretamente da flash.

Garbage Collector

Um processo em segundo plano que roda em Python (e MicroPython) para recuperar memória não utilizada no heap.

GPIO

Entrada/saída de propósito geral (general-purpose input/output). O meio mais simples de controlar sinais elétricos (comumente chamados de “pinos”) em um microcontrolador. O GPIO normalmente permite que os pinos sejam entrada ou saída e que se defina ou leia seu valor digital (“0” ou “1” lógico). O MicroPython abstrai o acesso ao GPIO usando as classes machine.Pin e machine.Signal.

GPIO port

Um grupo de pinos GPIO, geralmente baseado nas propriedades de hardware desses pinos (por exemplo, controláveis pelo mesmo registrador).

heap

Uma região da RAM onde o MicroPython armazena dados dinâmicos. Ela é gerenciada automaticamente pelo Garbage Collector. Diferentes MCUs e placas têm quantidades muito distintas de RAM disponível para o heap, o que afetará a complexidade que seu programa pode ter.

interned string

Uma otimização usada pelo MicroPython para melhorar a eficiência do trabalho com strings. Uma interned string é referenciada pela sua identidade (única) em vez de pelo seu endereço e, portanto, pode ser comparada rapidamente apenas pelo seu identificador. Isso também significa que strings idênticas podem ser desduplicadas na memória. A internação de strings é quase sempre invisível para o usuário.

MCU

Microcontrolador. Os microcontroladores geralmente têm muito menos recursos do que um desktop, laptop ou telefone, mas são menores, mais baratos e exigem muito menos energia. O MicroPython é projetado para ser pequeno e otimizado o suficiente para rodar em um microcontrolador moderno comum.

micropython-lib

O MicroPython é (geralmente) distribuído como um único arquivo executável/binário com apenas alguns módulos integrados. Não há uma biblioteca padrão extensa comparável à do CPython. Em vez disso, há um projeto relacionado, mas separado, o micropython-lib, que fornece implementações para muitos módulos da biblioteca padrão do CPython.

Alguns dos módulos são implementados em Python puro e rodam em qualquer port; o firmware da OpenMV congela uma seleção deles (drivers de sensores, rede e utilitários auxiliares) diretamente na imagem do firmware, de modo que podem ser importados sem instalar nada. Um número menor de módulos do micropython-lib usa FFI e só funciona na MicroPython Unix port; esses não estão disponíveis nas OpenMV Cams.

Diferentemente da stdlib do CPython, os módulos do micropython-lib que não são congelados são instalados individualmente — seja copiando-os para o sistema de arquivos ou, em placas com capacidade de rede, usando o mip.

MicroPython port

O MicroPython suporta diferentes placas, RTOSes e SOs, e pode ser adaptado com relativa facilidade a novos sistemas. O MicroPython com suporte a um sistema específico é chamado de “port” para aquele sistema. Diferentes ports podem ter funcionalidades amplamente distintas. Esta documentação destina-se a ser uma referência das APIs genéricas disponíveis em diferentes ports (“núcleo do MicroPython”). Observe que alguns ports podem ainda omitir algumas APIs descritas aqui (por exemplo, devido a restrições de recursos). Quaisquer diferenças desse tipo, e extensões específicas do port além da funcionalidade do núcleo do MicroPython, seriam descritas na documentação separada específica de cada port.

MicroPython Unix port

A unix port é um dos principais ports do MicroPython. Ela é destinada a rodar em sistemas operacionais compatíveis com POSIX, como Linux, MacOS, FreeBSD, Solaris, etc. Ela também serve de base para a port do Windows. A Unix port é muito útil para o desenvolvimento e teste rápidos da linguagem MicroPython e de recursos independentes de máquina. Ela também pode funcionar de maneira semelhante ao executável python do CPython.

mip

Um instalador de pacotes para o MicroPython (mip - “mip installs packages”). Ele instala pacotes do MicroPython a partir do micropython-lib, do GitHub ou de URLs arbitrárias. O mip pode ser usado no dispositivo em placas com capacidade de rede, e internamente por ferramentas como o mpremote.

Veja Gerenciamento de pacotes para mais informações sobre como usar o mip.

mpremote

Uma ferramenta para interagir com um dispositivo MicroPython. Veja Controle remoto do MicroPython: mpremote.

.mpy file

A saída do cross-compiler. Uma forma compilada de um .py file que contém bytecode do MicroPython em vez de código-fonte Python.

native

Geralmente refere-se a “código nativo”, ou seja, código de máquina para o microcontrolador alvo (ARM Thumb nas OpenMV Cams baseadas em Cortex-M). O decorador @micropython.native pode ser aplicado a uma função MicroPython para gerar código nativo em vez de bytecode para aquela função, o que provavelmente será mais rápido, mas usará mais RAM.

port

Geralmente é a forma abreviada de MicroPython port, mas também pode se referir a GPIO port.

.py file

Um arquivo contendo código-fonte Python.

pyboard.py

Uma ferramenta do lado do host, agora substituída, para interagir com uma placa MicroPython — executando scripts e acessando o sistema de arquivos pelo REPL bruto. Veja sua substituta, o mpremote.

REPL

Uma sigla para “Read, Eval, Print, Loop”. Este é o prompt interativo do Python, útil para depurar ou testar pequenos trechos de código. As OpenMV Cams disponibilizam o REPL para um PC host via USB (um dispositivo serial USB CDC).

small integer

O MicroPython otimiza a representação interna de inteiros de modo que valores “pequenos” não ocupem espaço no heap, e cálculos com eles não exijam alocação no heap. Na maioria dos ports de 32 bits, isso corresponde a valores no intervalo -2**30 <= x < 2**30, mas isso deve ser considerado um detalhe de implementação e não algo em que se basear.

stream

Também conhecido como “objeto semelhante a arquivo” (file-like object). Um objeto Python que fornece acesso sequencial de leitura e escrita aos dados subjacentes. Um objeto de stream implementa uma interface correspondente, que consiste em métodos como read(), write(), readinto(), seek(), flush(), close(), etc. Um stream é um conceito importante no MicroPython; muitos objetos de I/O implementam a interface de stream e, portanto, podem ser usados de forma consistente e intercambiável em diferentes contextos. Para mais informações sobre streams no MicroPython, veja o módulo io.

UART

Sigla para “Universal Asynchronous Receiver/Transmitter”. É um periférico que envia dados por um par de pinos (TX e RX). Muitas placas incluem uma forma de disponibilizar ao menos uma das UARTs para um PC host como uma porta serial via USB.

upip

Um gerenciador de pacotes para o MicroPython, agora obsoleto, inspirado no pip do CPython, mas muito menor e com funcionalidade reduzida. Veja sua substituta, o mip.

webrepl

Uma forma de conectar-se ao REPL (e transferir arquivos) em um dispositivo pela internet a partir de um navegador. Veja https://micropython.org/webrepl