Glossario

baremetal

Un sistema privo di un sistema operativo (completo), ad esempio un sistema basato su MCU. Quando viene eseguito su un sistema baremetal, MicroPython funziona di fatto come un piccolo sistema operativo, eseguendo i programmi utente e fornendo un interprete a riga di comando (REPL).

buffer protocol

Qualsiasi oggetto Python che può essere convertito automaticamente in byte, come gli oggetti bytes, bytearray, memoryview e str, che implementano tutti il «buffer protocol».

board

Tipicamente si riferisce a un circuito stampato (PCB) contenente un microcontrollore e i componenti di supporto. Il firmware di MicroPython viene solitamente fornito per ogni scheda, poiché contiene sia funzionalità specifiche dell’MCU sia funzionalità a livello di scheda, come driver o nomi dei pin.

bytecode

Una rappresentazione compatta di un programma Python generata compilando il codice sorgente Python. È ciò che la VM esegue effettivamente. Il bytecode viene tipicamente generato automaticamente in fase di esecuzione ed è invisibile all’utente. Nota che, sebbene sia CPython sia MicroPython usino il bytecode, il formato è diverso. È anche possibile precompilare il codice sorgente offline usando il cross-compiler.

callee-owned tuple

Si tratta di un costrutto specifico di MicroPython in cui, per ragioni di efficienza, alcune funzioni o metodi integrati possono riutilizzare lo stesso oggetto tupla sottostante per restituire i dati. Questo evita di dover allocare una nuova tupla a ogni chiamata e riduce la frammentazione dell”heap. I programmi non dovrebbero mantenere riferimenti alle callee-owned tuple, ma estrarne solo i dati (oppure farne una copia).

CircuitPython

Una variante di MicroPython sviluppata da Adafruit Industries.

CPython

CPython è l’implementazione di riferimento del linguaggio di programmazione Python, nonché la più conosciuta. È tuttavia una delle tante implementazioni (tra cui Jython, IronPython, PyPy e MicroPython). Sebbene l’implementazione di MicroPython differisca sostanzialmente da CPython, mira a mantenere la maggiore compatibilità possibile.

cross-compiler

Conosciuto anche come mpy-cross. Questo strumento viene eseguito sul tuo PC e converte un .py file contenente codice MicroPython in un .mpy file contenente bytecode MicroPython. Ciò significa che si carica più velocemente (la scheda non deve compilare il codice) e occupa meno spazio sulla flash (il bytecode è più efficiente in termini di spazio).

driver

Una libreria MicroPython che implementa il supporto per un determinato componente, come un sensore o un display.

FFI

Acronimo di Foreign Function Interface. Un meccanismo usato dal MicroPython Unix port per accedere alle funzionalità del sistema operativo. Non è disponibile sui port baremetal.

filesystem

La maggior parte dei port e delle schede MicroPython fornisce un filesystem memorizzato in flash che è disponibile al codice utente tramite le API standard di Python per i file, come open(). Alcune schede rendono inoltre questo filesystem interno accessibile all’host tramite l’archiviazione di massa USB.

frozen module

Un modulo Python che è stato cross compilato e incluso nell’immagine del firmware. Questo riduce i requisiti di RAM, poiché il codice viene eseguito direttamente dalla flash.

Garbage Collector

Un processo in background che viene eseguito in Python (e MicroPython) per recuperare la memoria inutilizzata nell”heap.

GPIO

General-purpose input/output. Il mezzo più semplice per controllare i segnali elettrici (comunemente chiamati «pin») su un microcontrollore. Le GPIO consentono tipicamente ai pin di essere ingresso o uscita e di impostare o leggere il loro valore digitale (logico «0» o «1»). MicroPython astrae l’accesso alle GPIO usando le classi machine.Pin e machine.Signal.

GPIO port

Un gruppo di pin GPIO, solitamente basato sulle proprietà hardware di questi pin (ad esempio controllabili dallo stesso registro).

heap

Una regione di RAM in cui MicroPython memorizza i dati dinamici. È gestita automaticamente dal Garbage Collector. MCU e schede diverse dispongono di quantità di RAM molto differenti per l’heap, il che influirà sulla complessità che il tuo programma può raggiungere.

interned string

Un’ottimizzazione usata da MicroPython per migliorare l’efficienza nel lavorare con le stringhe. Una interned string è referenziata dalla sua identità (univoca) anziché dal suo indirizzo e può quindi essere confrontata rapidamente solo tramite il suo identificatore. Ciò significa inoltre che le stringhe identiche possono essere deduplicate in memoria. L’interning delle stringhe è quasi sempre invisibile all’utente.

MCU

Microcontrollore. I microcontrollori dispongono solitamente di risorse molto inferiori rispetto a un desktop, un laptop o un telefono, ma sono più piccoli, più economici e richiedono molta meno energia. MicroPython è progettato per essere abbastanza piccolo e ottimizzato da poter funzionare su un comune microcontrollore moderno.

micropython-lib

MicroPython viene (di solito) distribuito come un singolo file eseguibile/binario con solo pochi moduli integrati. Non esiste una libreria standard estesa paragonabile a quella di CPython. Esiste invece un progetto correlato, ma separato, micropython-lib che fornisce le implementazioni di molti moduli della libreria standard di CPython.

Alcuni dei moduli sono implementati in puro Python e funzionano su qualsiasi port; il firmware OpenMV congela una selezione di questi (driver per sensori, networking e helper di utilità) direttamente nell’immagine del firmware in modo che possano essere importati senza installare nulla. Un numero più ridotto di moduli micropython-lib usa FFI e funziona solo sul MicroPython Unix port; questi non sono disponibili sulle OpenMV Cam.

A differenza della libreria standard di CPython, i moduli di micropython-lib che non sono congelati nel firmware vengono installati singolarmente, copiandoli sul filesystem oppure, sulle schede con capacità di rete, usando mip.

MicroPython port

MicroPython supporta diverse schede, RTOS e OS, e può essere adattato con relativa facilità a nuovi sistemi. MicroPython con supporto per un determinato sistema è chiamato «port» verso quel sistema. Port diversi possono avere funzionalità molto diverse. Questa documentazione intende essere un riferimento per le API generiche disponibili sui diversi port («MicroPython core»). Nota che alcuni port potrebbero comunque omettere alcune delle API descritte qui (ad esempio a causa di vincoli di risorse). Eventuali differenze di questo tipo, e le estensioni specifiche del port oltre le funzionalità del MicroPython core, sono descritte nella documentazione separata specifica del port.

MicroPython Unix port

Il port unix è uno dei principali MicroPython port. È destinato a funzionare su sistemi operativi compatibili con POSIX, come Linux, MacOS, FreeBSD, Solaris, ecc. Funge inoltre da base per il port Windows. Il port Unix è molto utile per lo sviluppo e il test rapidi del linguaggio MicroPython e delle funzionalità indipendenti dalla macchina. Può anche funzionare in modo simile all’eseguibile python di CPython.

mip

Un installatore di pacchetti per MicroPython (mip - «mip installs packages»). Installa i pacchetti MicroPython da micropython-lib, da GitHub o da URL arbitrari. mip può essere usato direttamente sul dispositivo sulle schede con capacità di rete e internamente da strumenti come mpremote.

Consulta Gestione dei pacchetti per maggiori informazioni sull’uso di mip.

mpremote

Uno strumento per interagire con un dispositivo MicroPython. Vedi Controllo remoto di MicroPython: mpremote.

.mpy file

L’output del cross-compiler. Una forma compilata di un .py file che contiene bytecode MicroPython anziché codice sorgente Python.

native

Di solito si riferisce al «codice nativo», cioè codice macchina per il microcontrollore di destinazione (ARM Thumb sulle OpenMV Cam basate su Cortex-M). Il decoratore @micropython.native può essere applicato a una funzione MicroPython per generare codice nativo invece di bytecode per quella funzione, che sarà probabilmente più veloce ma userà più RAM.

port

Di solito è l’abbreviazione di MicroPython port, ma potrebbe anche riferirsi a GPIO port.

.py file

Un file contenente codice sorgente Python.

pyboard.py

Uno strumento lato host ora superato per interagire con una scheda MicroPython, eseguendo script e accedendo al filesystem tramite il REPL raw. Vedi il suo sostituto, mpremote.

REPL

Un acronimo di «Read, Eval, Print, Loop». È il prompt interattivo di Python, utile per il debug o per testare brevi frammenti di codice. Le OpenMV Cam rendono il REPL disponibile a un PC host tramite USB (un dispositivo seriale USB CDC).

small integer

MicroPython ottimizza la rappresentazione interna degli interi in modo che i valori «piccoli» non occupino spazio nell”heap e i calcoli che li coinvolgono non richiedano allocazione nell’heap. Sulla maggior parte dei port a 32 bit, ciò corrisponde ai valori nell’intervallo -2**30 <= x < 2**30, ma questo dovrebbe essere considerato un dettaglio implementativo e non se ne dovrebbe fare affidamento.

stream

Conosciuto anche come «oggetto file-like». Un oggetto Python che fornisce accesso sequenziale in lettura-scrittura ai dati sottostanti. Un oggetto stream implementa una corrispondente interfaccia, che consiste in metodi come read(), write(), readinto(), seek(), flush(), close(), ecc. Lo stream è un concetto importante in MicroPython; molti oggetti di I/O implementano l’interfaccia stream e possono quindi essere usati in modo coerente e intercambiabile in contesti diversi. Per maggiori informazioni sugli stream in MicroPython, consulta il modulo io.

UART

Acronimo di «Universal Asynchronous Receiver/Transmitter». È una periferica che invia dati su una coppia di pin (TX e RX). Molte schede includono un modo per rendere disponibile almeno una delle UART a un PC host come porta seriale tramite USB.

upip

Un gestore di pacchetti per MicroPython ora obsoleto, ispirato a pip di CPython, ma molto più piccolo e con funzionalità ridotte. Vedi il suo sostituto, mip.

webrepl

Un modo per connettersi al REPL (e trasferire file) su un dispositivo tramite Internet da un browser. Vedi https://micropython.org/webrepl