MicroPython – Python per programmare i microcontrollori

Introduzione

Grazie al successo e alla diffusione di Python come linguaggio di programmazione, oggi moltissimi sviluppatori hanno scelto questo linguaggio nei loro progetti e sono sempre di più le persone che hanno familiarità ed esperienza con questo linguaggio. Ma allora perchè i microcontrollori si programmano ancora in C?

Bene, le cose sembrano stiano prendendo un’altra direzione. E’ infatti uscito MicroPython, un software di sviluppo che permette la programmazione di microcontrollori utilizzando esclusivamente Python come linguaggio di programmazione. In questo articolo vedremo in dettaglio MicroPython. Inoltre parleremo anche di PyBoard, una scheda con microcontrollore progettata specificatamente per essere programmata in Python.

MicroPython - Python for programming microcontrollers main

MicroPython

MicroPython è un’applicazione basata interamente su Python 3. Questa applicazione permette a tutti gli sviluppatori di programmare i microcontrollori utilizzando alcune librerie di Python che sono state ottimizzate per funzionare sui microprocessori montati normalmente sui microcontrollori.

Lo sviluppo su MicroPython è davvero semplice. Non richiede alcuna installazione, è sufficiente aprire la pagina web (vedi qui) corrispondente sul sito ufficiale micropython.org. Infatti MicroPython è un’applicazione che funziona online, e così invece di installare un’applicazione sul tuo computer potrai lavorare direttamente dal browser.

MicroPython web online
MicroPython

MicroPython è quindi stato progettato e studiato appositamente per la programmazione su MicroControllori riadattando le librerie standard di Python. Infatti una volta scritto un programma in Python, MicroPython compila il codice in modo abbastanza compatto da poter occupare uno spazio limite di 256kB ed essere eseguito su dispositivi con 16kB di RAM.

Inoltre MicroPython funziona con codice Python altamente standard, quindi tutto ciò che viene sviluppato su questo ambiente è funzionante anche in altri ambienti di sviluppo in Python, e viceversa.

Compilatore con moduli hardware-specifici

La potenza di MicroPython sta proprio nel compilatore. Infatti questo software ha al suo interno una serie di moduli hardware-specifici in modo da poter compilare il codice in Python adeguatamente a seconda del microcontrollore utilizzato.

Ma non si limita a questo. Gli altri linguaggi di programmazione, come il C per Arduino per esempio, vengono utilizzati generalmente per scrivere un programma nella sua interezza, ed una volta corretto, viene compilato ed inviato al microcontrollore per essere eseguito (generalmente in loop). Mentre chi programma in Python, sa benissimo che Python è un linguaggio che fa uso di un interprete. Quindi si può utilizzare per scrivere programmi oppure per lavorare in runtime, lanciando un comando alla volta. Bene, con MicroPython è possibile scrivere un comando alla volta da console, che viene compilato in tempo reale ed inviato al microcontrollore.

MicroPython - terminal

Infatti, MicroPython ha un prompt interattivo (REPL) per eseguire i comandi uno alla volta in modo interattivo, che vengono eseguiti immediatamente. Il REPL ha una history, la tab completion, l’auto-indent ed la funzionalità copy-cut-paste, il tutto per rendere lo sviluppo del codice facile e semplice.

Infine, MicroPython, oltre alla libreria standard ottimizzata, ha una serie di moduli (come per esempio machine) che permette l’accesso a basso livello dell’hardware.

MicroPython - Mandelbrodt example
MicroPython – Mandelbrodt example

Per chi fosse interessato ad approfondire l’argomento, potrete trovare tutta la documentazione su questo sito.

Altrimenti esiste attualmente gìa in vendita un libro ricco di esempi, che copre in maniera esaustiva tutto l’argomento.

Python for Microcontrollers: Getting Started with MicroPython

MicroPython: il Progetto

MicroPython, sviluppato nel linguaggio C99, è un progetto interamente opensource. Il codice è sotto licenza MIT license, ed è disponibile a tutti su GitHub. Chiunque è libero di scaricare il codice per studio, oppure contribuire al miglioramento e perfezionamento di questo progetto.

Abbiamo parlato in precedenza che gli aspetti più importanti di questa applicazione sono le tecniche di codifica avanzate che sono state utilizzate per mantenere le stesse funzionalità di Python pur ottenendo dei compilati di piccola dimensione, per potersi adattare alle scarse risorse dei microcontrollori.

Ecco alcune caratteristiche che sono state pubblicate sul sito ufficiale.

  • Alta configurabilità grazie a molte opzioni di configurazione a tempo di compilazione
  • molte architetture supportate (x86, x86-64, ARM, ARM Thumb, Xtensa)
  • una test suite estensiva con oltre 590 test, e più di 18,500 casi di test individuali
  • code coverage al 98.4% per quanto riguarda il core mentre al 96.3% per quanto riguarda il core più i moduli di estensione
  • tempo veolce di start-up dal boot per caricare il primo script (150 ms per effettuare il boot.py, su pyboard esecuzione a 168MHz)
  • un semplice, veloce e robusto mark-sweep garbage collector per la memoria heap
  • lancio dell’eccezione MemoryError nel caso dell’esaurimento dell’heap
  • lancio dell’eccezione RuntimeError quando si è raggiunto lo stack limit
  • supporto per il codice Python in esecuzione con un hard interrupt con latenza minima
  • tutti gli errori hanno un backtrace e riportano il numero della riga di codice sorgente relativa
  • constant folding nel parser/compiler
  • pointer tagging per fare il fit degli small integers, strings e altri oggetti in una machine word
  • transizione trasparente per small integer a big integer
  • supporto per il modello a 64-bit NaN boxing object
  • supporto per gli stuffed floats a 30 bit, che non richiedono la memoria heap
  • un cross-compiler ed il frozen bytecode, in modo da avere script pre-compilati che non occupano RAM (eccetto per gli oggetti dinamici creati)
  • multithreading attraverso il modulo “_thread”, con un global-interpreter-lock opzionale (ancora in via sviluppo)
  • un emitter nativo che scrive il codice macchina direttamente piuttosto che il bytecode per la virtual machine
  • inline assembler (per ora solo per il set di istruzioni Thumb e Xtensa)

Pyboard

MicroPython comunque è stato sviluppato tenendo conto di una scheda di riferimento, anch’essa sviluppata principalmente per lavorare con Python. Il nome di questa scheda è PyBoard.

MicroPython - Pyboard front and rear

Questa scheda è un progetto completamente open hardware e quindi gli schemi elettronici sono accessibili a tutti. Quindi potete realizzarla e modificarla a vostro piacimento, se invece preferite acquistarla è disponibile online ad un prezzo davvero ragionevole.

MicroPython pyboard

Le caratteristiche tecniche di questa scheda si possono riassumere nella seguente lista:

  • STM32F405RG microcontrollore
  • CPU 168 MHz Cortex M4
  • Flash ROM 1024KiB e 192KiB RAM
  • Connettore Micro USB per l’alimentazione e la comunicazione seriale
  • Micro SD card slot, supporto schede SD di capacità standard e ad alta
  • Accelerometro a 3 assi (MMA7660)
  • Orologio in tempo reale con batteria di backup opzionale
  • 24 GPIO a sinistra e destra e 5 GPIO su riga in basso, oltre a LED e attivare GPIO disponibili su riga in basso
  • 3x 12-bit convertitori analogico digitali, disponibile su 16 pin, 4 con analogica schermatura a terra
  • 2x 12-bit digitale-analogico (DAC) convertitori, disponibili sui pin X5 e X6
  • 4 LED (rosso, verde, giallo e blu)
  • 1 reset e 1 interruttore utente
  • On-board regolatore di 3.3V di tensione LDO, in grado di fornire fino a 300 mA, ingresso gamma di tensione 3,6 V a 10 V
  • DFU bootloader in ROM per un facile aggiornamento del firmware

La scheda è dotata di una porta USB micro per la connessione con il computer e allo stempo per l’alimentazione. Inoltre è presente uno slot per inserire una microSD come memoria. Inoltre ha al suo interno alcuni chip integrati molto interessanti come un accelerometro, alcuni convertitori analogico-digitali e 4 LED multicolori.

Come possiamo vedere dalle immagini della pyboard, si può notare immediatamente un esteso pinout. La figura seguente mostra in dettaglio la funzione di ciascun PIN presente.

pyboard quick reference
Pinout del Pyboard

Conclusioni

In questo breve articolo abbiamo fatto una presentazione a MicroPython, un software che permette la programmazione di Python per microcontrollori. Abbiamo visto in dettaglio le caratteristiche di questo progetto totalmente opensource ed in particolare del compilatore che è in grado di produrre codice compilato hardware-specifico a seconda dei microcontrollori e di piccole dimensioni. Inoltre abbiamo dato un rapido sguardo alla scheda pyBoard, un microcontrollore sviluppato appositamente per essere programmato in Python. Nei prossimi articoli verranno proposti alcuni tutorial sulla programmazione in Python in questo ambiente di sviluppo.

Lascia un commento