Pybricks: il firmware open source per LEGO Powered UP

Nel 2018 LEGO ha introdotto una nuova linea di prodotti che uniscono il mondo dei mattoncini a quello dell’animazione meccanica mediante l’utilizzo di motori, luci e sensori: il sistema LEGO Powered Up.

Il sistema è caratterizzato da un “brick intelligente” (denominato Hub) al quale è possibile collegare 2, 4 o 6 motori/attuatori/sensori esterni determinando la loro interazione/attivazione sulla basa di una logica programmabile tramite un’apposita App che, mediante connessione BLE (Bluetooth Low Energy), invia comandi e riceve informazioni da/verso l’Hub.

Il sistema Powered Up rappresenta una notevole novità rispetto al precedente sistema Power Function ma presenta (quanto meno ad oggi) alcuni limiti che ne pregiudicano il pieno utilizzo in specifici scenari.

Quello più “sofferto” da una buona fetta di AFOL è la necessità di utilizzare uno smartphone/tablet per determinare il comportamento del sistema.

Non è possibile, pertanto, programmare in modo permanente un Hb affinché all’accensione, senza la necessità di ulteriori “controller” esterni, agisca autonomamente secondo una logica programmata in precedenza.

O meglio… non era possibile finché due appassionati, David e Laurens, non hanno deciso di scrivere un firmware alternativo a quello ufficiale LEGO, implementando funzionalità aggiuntive. E, tra queste, quella che io ritengo la funzionalità principale: la possibilità di memorizzare un nostro programma nella memoria flash dell’Hub.

Questo firmware si chiama Pybricks.

Ma cos’è un firmware? In parole semplici, è un programma software memorizzato in modo permanente nella memoria “non volatile” di un dispositivo elettronico basato su un microcontrollore e che viene eseguito all’accensione del dispositivo stesso.

Gli Hub del sistema Powered Up hanno ovviamente un firmware predisposto dagli ingegneri LEGO. Un firmware che può essere aggiornato tramite l’apposita App LEGO Powered Up, al fine di implementare nuove funzionalità e/o correggere bug non rilevati in fase di sviluppo.

Ed è proprio grazie alla possibilità di aggiornare il firmware che David e Laurens hanno deciso di scriverne una versione alternativa, effettuando un porting di MicroPython adatto per girare sul microcontrollore STM32 che equipaggia i dispositivi LEGO, estendendo le possibilità di base dello Smart Hub.

Grazie a Pybrick, pertanto, è possibile programmare (come un minimo di competenze di programmazione che si possono apprendere facilmente) i comportamenti di motori e sensori secondo una logica scritta:

#moduli utilizzati
from pybricks.hubs import CPlusHub
from pybricks.pupdevices import Light
from pybricks.parameters import Port
from pybricks.tools import wait

#Crea un'instanza dell'oggetto di tipo CPlusHub
hub = CPlusHub()

#Definisci un device di tipo 'Light' connesso alla porta A dell'Hub
lightLED = Light(Port.A)

#Esegui un ciclo aumentando a step di 10 (ogni mezzo secondo) la luminosità della luce
iBrightness=0
while iCounter < 100:
  iBrightness = iBrightness + 10
  lightLED.on(iBrightness)
  wait(500)

#aspetta 2 secondi, poi spegni l'Hub
wait(2000)
hub.shutdown()

Nei futuri appunti spiegherò passo-passo come caricare il firmware Pybricks, come programmarlo e, soprattutto, come memorizzare un programma in modo ‘permanente’.

Ultima cosa da tener sempre a mente: in qualsiasi momento si potrà comunque ripristinare il firmware originale LEGO o sostituire il programma che abbiamo caricato in modo ‘permanente’ sull’Hub 😉

Lascia una risposta

L'indirizzo email non verrà pubblicato.I campi obbligatori sono contrassegnati *