Getting Started: MicroPython

Il 2005 è l’anno in cui si fa risalire la nascita del movimento makers, in corrispondenza del lancio a febbraio della rivista Makequando il primo numero è stato messo in vendita, Maker Media non esisteva ancora come società. A quel tempo, la rivista era gestita ancora dalla casa editrice O’Reilly Media fondata da Dale Dougherty.

Nel primo anno, Make diventò così popolare che si decise di portare il concetto di “show and tell” della rivista nel mondo reale con la prima Maker Faire Bay Area nel 2006 tenutasi al parco di San Mateo in California. Altro evento importante per il movimento makers fu il lancio nel 2007 della RepRap di Adrian Bowyer, la prima stampante 3D open source.

Python Embedded

Abbiamo così iniziato ad assistere al diffondersi di schede embedded indirizzate non solo ad un pubblico di specialisti, ma anche di appassionati. Questa svolta ha portato a progetti come MicroPython (2013), l’italiano  Zerynth (2015) e  CircuitPython (2017) che permettono di utilizzare Python anche con sistemi embedded.
Nel 2013 il fisico australiano Damien George , trasferitosi nel Regno Unito per un post-doc a Cambridge, avviò su KickStarter la campagna di crowdfunding “Micro Python: Python for microcontrollers” per finanziare la realizzazione di una scheda hardware PyBoard con la piattaforma STM-32F405RG in grado di implementare un compilatore Python 3.

Nonostante la facilità di apprendimento di Python non era ancora presente su sistemi embedded e fu così che a Damien venne l’idea di implementare Python su un micro-controllore per controllare le articolazioni di un robot per la RoboCup:

I needed something very small, but powerful — something with a lot of input and output lines that was able to precisely control motors for the robot’s joints

Lo scopo di MicroPython è di portare il meglio di Python sui sistemi embedded e allentare la dipendenza dallo sviluppo di software in C,  anche se, sotto il cofano, MicroPython rimane scritto in C.
L’opportunità di una scheda di prototipazione programmabile in Python è stata colta dagli sviluppatori che hanno supportato la campagna di crowdfunding, superando l’obiettivo prefissato da Damien di 15.000$ in poco tempo raggiungendo i 97.803$.

Il successo di MicroPython ha attirato l’attenzione di Adafruit Industries che nel luglio del 2017 ha sviluppato una versione di MicroPython, chiamata CircuitPython con l’intento di agevolare la programmazione delle schede di sviluppo Adafruit a basso costo.
MicroPython e CircuitPython supportano set di hardware leggermente diversi, ad esempio CircuitPython supporta le schede Atmel SAM D21 e D51, ma ha abbandonato il supporto per ESP8266. A partire dalla versione 4.0, CircuitPython è basato sulla versione 1.9.4 di MicroPython.

MicroPython

MicroPython funziona allo stesso modo di CPython, analizza il notro script Python, lo compila in bytecode ed infine lo esegue in una virtual machine (VM). Questi passaggi occupano RAM durante la compilazione di Python in bytecode e durante l’esecuzione del bytecode con MicroPython VM.

Modules

MicroPython mira ad essere il più compatibile possibile con Python, ma è progettato per funzionare su devices dalle risorse hardware limitate.

>>> help("modules")




Tutte le versioni di MicroPython sono dotate di moduli per interagire con l’hardware, i pin GPIO,  le periferiche e i componenti collegati tramite tali pin. Ad esempio i devices con funzionalità di rete, includeranno moduli per supportare queste funzionalità come WiFi, json, requests.

__main__          machine           ubinascii         ure
_boot             math              ucollections      urequests
_onewire          micropython       ucryptolib        urllib/urequest
_uasyncio         neopixel          uctypes           uselect
_webrepl          network           uerrno            usocket
apa102            ntptime           uhashlib          ussl
btree             onewire           uheapq            ustruct
builtins          port_diag         uio               usys
dht               ssd1306           ujson             utime
ds18x20           uarray            umqtt/robust      utimeq
esp               uasyncio/__init__ umqtt/simple      uwebsocket
flashbdev         uasyncio/core     uos               uzlib
framebuf          uasyncio/event    upip              webrepl
gc                uasyncio/funcs    upip_utarfile     webrepl_setup
inisetup          uasyncio/lock     upysh             websocket_helper
lwip              uasyncio/stream   urandom
Plus any modules on the filesystem




PyCharm: MicroPython Plug-in

Per iniziare a scrivere in Python sul micro-controllore possiamo utilizzare come ambiente di sviluppo PyCharm che comprende un editor, un tool di analisi, debugger e la possibilità di estenderne le funzionalità attraverso l’utilizzo di plug-in.
Andrey Vlasovskikh , team leader presso JetBrains, ha sviluppato un plug-in ufficiale per MicroPython con il quale ci sarà possibile interagire con i micro-controllori supportati come: ESP8266, PyBoard e BBC Micro:bit.

Sitografia

Pycharm
[1] JetBrains, Announcing the MicroPython Plugin for PyCharm, Blog, 15/01/2018

MicroPython
[1] Madhumita Venkataramanan, Micro Python: more powerful than Arduino, simpler than the Raspberry Pi, Wired, 06/12/2013

CircuitPython
[1] The many forks of MicroPython, Blog, 12/02/2020
[2] What is CircuitPython?, Blog, 19/12/2017

Viper/Zerynth
[1] Viper, la suite di sviluppo per microcontrollori, diventa Zerynth e arriva sul mercato, 02/03/2016