Negli ultimi anni il linguaggio Rust ha progressivamente conquistato spazio in ambiti che fino a poco tempo fa sembravano dominio esclusivo di C e C++. Se nel mondo server e cloud la sua crescita è ormai consolidata, nel settore embedded il percorso è ancora in piena evoluzione. Proprio per questo motivo progetti pratici e raccolte di esempi rappresentano uno strumento prezioso per comprendere quanto l’ecosistema sia realmente maturo.
La combinazione tra Raspberry Pi Pico 2, il nuovo microcontrollore RP2350 e il framework asincrono Embassy offre un’interessante fotografia dello stato attuale dello sviluppo embedded in Rust. Non si tratta semplicemente di una serie di demo dedicate a sensori e periferiche, ma di un vero laboratorio che permette di affrontare problematiche concrete come la gestione di bus I2C, la comunicazione 1-Wire, il rendering grafico accelerato tramite DMA, la connettività Wi-Fi e persino l’integrazione con Matter per la smart home. Il risultato è una panoramica sorprendentemente completa delle possibilità offerte oggi da Rust nel mondo dei microcontrollori.
RP2350: l’evoluzione della piattaforma Pico
Raspberry Pi Pico 2 introduce il microcontrollore RP2350, successore diretto dell’RP2040 che ha contribuito al successo della prima generazione di schede Pico.
La nuova architettura porta con sé una maggiore potenza di elaborazione e una notevole flessibilità progettuale. Il chip integra infatti due core Arm Cortex-M33 e introduce il supporto all’ecosistema RISC-V, offrendo agli sviluppatori la possibilità di sperimentare con architetture differenti mantenendo la stessa piattaforma hardware.
Dal punto di vista embedded, il RP2350 rappresenta un passo avanti significativo anche sotto il profilo della sicurezza e delle funzionalità avanzate, rendendo la scheda adatta non soltanto a progetti hobbistici ma anche a prototipi professionali e applicazioni industriali.
L’hardware mantiene la filosofia minimalista tipica della famiglia Pico: il LED integrato collegato alla GPIO25 continua a rappresentare il punto di partenza ideale per i primi test, mentre il layout dei pin rende immediata l’integrazione con sensori, display e moduli di comunicazione esterni.

L’immagine rappresenta il pinout della Raspberry Pi Pico 2, cioè la mappa completa dei pin disponibili sulla scheda e delle loro funzioni. Fonte: Mariusz Jurgielewicz
Perché Embassy sta diventando importante nel segmento embedded Rust
Se il microcontrollore costituisce la base hardware del progetto, Embassy rappresenta il vero elemento distintivo sul piano software.
Tradizionalmente molte applicazioni embedded utilizzano cicli infiniti che interrogano continuamente sensori e periferiche: è un approccio che funziona bene nei progetti semplici ma tende a diventare sempre più complesso man mano che aumentano le funzionalità del firmware.
Embassy introduce nel mondo embedded il paradigma async/await già ampiamente diffuso nello sviluppo software moderno: invece di mantenere la CPU occupata durante le operazioni di attesa, i task possono essere sospesi per lasciare spazio ad altre attività.
Il vantaggio diventa immediatamente evidente in applicazioni che devono gestire simultaneamente più periferiche: un sensore può attendere la conclusione di una transazione I2C mentre un altro task aggiorna un display, un terzo elabora dati provenienti da un accelerometro e un quarto gestisce una connessione di rete.
La raccolta di esempi disponibile su GitHub e realizzata da Mariusz Jurgielewicz mostra concretamente come il modello possa essere applicato a dispositivi reali.
Sensori e bus I2C: dalla misura ambientale al rilevamento del movimento
Una parte significativa del repository è dedicata all’interfaccia I2C, probabilmente uno dei protocolli più utilizzati nel mondo embedded per la comunicazione con sensori esterni.
La configurazione proposta utilizza il controller I2C0 del microcontrollore RP2350, assegnando la GPIO4 alla linea SDA (Serial Data, usata per il trasferimento dei dati) e la GPIO5 alla linea SCL (Serial Clock, sincronizza la comunicazione). Si tratta di una soluzione semplice ma molto flessibile, compatibile con numerosi dispositivi I2C disponibili in commercio.
Tra i primi esempi troviamo il sensore HS3003 prodotto da Renesas. Si tratta di un componente progettato per applicazioni che richiedono misure ambientali particolarmente accurate. Il dispositivo è in grado di rilevare temperature comprese tra -40°C e +125°C con una precisione dichiarata di ±0,2°C, mentre la misura dell’umidità relativa copre l’intervallo tra 0% e 100% RH con accuratezza pari a ±1,5%.
Entrambe le misurazioni sono effettuate con una risoluzione di 14 bit, caratteristica che rende il sensore adatto non soltanto a progetti didattici ma anche a sistemi di monitoraggio ambientale professionali.
Il codice mostra come Embassy gestisca le operazioni sul bus I2C in modo completamente asincrono, consentendo al microcontrollore di continuare a svolgere altre attività mentre attende la risposta del dispositivo.
Lo stesso principio è applicato all’ADXL345, accelerometro triassiale che rappresenta uno dei componenti più diffusi nell’ambito della sensoristica di movimento. Il dispositivo offre una risoluzione a 13 bit e può misurare accelerazioni fino a ±16g.
Le informazioni prodotte dal sensore permettono di determinare orientamento, vibrazioni, urti e movimenti nello spazio tridimensionale. Applicazioni di questo tipo sono comuni nella robotica, nei sistemi di monitoraggio industriale, nei dispositivi wearable e nelle piattaforme IoT che richiedono la rilevazione di eventi fisici.
Quando il tempo conta: la sfida dei protocolli 1-Wire
Se i dispositivi I2C rappresentano uno scenario relativamente semplice, la situazione cambia radicalmente quando si affrontano protocolli che richiedono temporizzazioni estremamente precise. Il sensore DS18B20 costituisce un caso emblematico.
Nel repository GitHub è proposto un esempio di termometro digitale che utilizza proprio il protocollo 1-Wire, una tecnologia che consente di comunicare attraverso una singola linea dati condivisa tra più dispositivi.
La semplicità del cablaggio nasconde una complessità significativa dal punto di vista software. Ogni bit è trasmesso attraverso impulsi con durata accuratamente definita e anche piccole variazioni temporali possono compromettere la comunicazione.
Per affrontare questa sfida il progetto utilizza una particolare implementazione chiamata PreciseDelay, progettata per fornire ritardi sub-microsecondo privi di jitter sul Cortex-M33 del RP2350.
Grazie a questo approccio il firmware riesce a comunicare correttamente con il DS18B20, acquisendo misure comprese tra -55°C e +125°C con un’accuratezza tipica di ±0,5°C nella fascia di utilizzo più comune.
Si tratta di un esempio particolarmente interessante perché dimostra come Rust possa essere utilizzato efficacemente anche in scenari dove il controllo temporale è fondamentale.
Grafica embedded moderna: framebuffer, DMA e rendering asincrono
Uno degli aspetti più sorprendenti del repository riguarda la gestione grafica. Molti sviluppatori associano ancora i microcontrollori a semplici display monocromatici o a interfacce utente molto basilari: gli esempi inclusi nel progetto mostrano invece come sia possibile realizzare applicazioni grafiche decisamente più sofisticate.
La comunicazione avviene attraverso il bus SPI del RP2350 utilizzando GPIO18 per il clock, GPIO19 per MOSI, GPIO16 per MISO, GPIO20 per la linea Data/Command e GPIO21 per il reset del display.
La prima dimostrazione consiste nella visualizzazione di un’immagine a colori da 320×240 pixel su un display TFT Adafruit da 2,2 pollici. Sebbene possa sembrare una semplice prova di funzionamento, l’esempio introduce tutti gli elementi necessari per comprendere il funzionamento della pipeline grafica.
Le cose diventano ancora più interessanti con la versione animata che riproduce una nevicata sopra una foto panoramica. In questo scenario il firmware utilizza un framebuffer off-screen, un piccolo motore fisico per simulare il movimento dei fiocchi e trasferimenti DMA verso il display. L’aspetto più rilevante è che il processore non rimane bloccato durante la trasmissione delle immagini.
Mentre il controller DMA aggiorna il pannello TFT, la CPU continua a calcolare la posizione dei nuovi elementi grafici e a gestire eventuali altre attività del sistema.
Si tratta di una tecnica ampiamente utilizzata nei dispositivi embedded moderni e il progetto offre un esempio concreto e facilmente studiabile della sua implementazione.
Dalla sensoristica alla smart home con Matter e WiFi
La parte probabilmente più avanzata dell’intera raccolta riguarda l’esempio dedicato a Matter.
Negli ultimi anni il settore della domotica ha sofferto una forte frammentazione, con produttori che adottavano protocolli e piattaforme incompatibili tra loro: Matter nasce proprio con l’obiettivo di creare uno standard condiviso capace di semplificare l’interoperabilità tra dispositivi.
L’esempio trasforma una Raspberry Pi Pico 2 W in una lampadina intelligente compatibile con i principali ecosistemi domestici. La procedura di configurazione sfrutta inizialmente Bluetooth Low Energy per il provisioning. Attraverso questa connessione il dispositivo riceve le credenziali della rete WiFi e completa il processo di collegamento in modo sicuro.
Successivamente, la comunicazione avviene attraverso la rete wireless utilizzando lo stack rs-matter. Una volta completata la configurazione, il dispositivo può essere aggiunto direttamente a Home Assistant, Apple Home o Google Home e viene riconosciuto come una normale lampadina smart.
L’azione dell’utente è riflessa immediatamente sull’hardware tramite un LED esterno collegato alla GPIO15 attraverso una resistenza compresa tra 220 e 330 ohm.
Il progetto dimostra come un microcontrollore dal costo contenuto possa integrarsi all’interno di infrastrutture IoT articolate utilizzando protocolli standardizzati e tecnologie normalmente associate a prodotti commerciali molto più complessi.
Molto più di una raccolta di esempi
Il valore del lavoro svolto da Jurgielewicz risiede principalmente nella capacità di mostrare come tecnologie diverse possano convivere all’interno di una singola piattaforma software.
Sensori ambientali, accelerometri, protocolli sensibili alle temporizzazioni, display grafici, trasferimenti DMA, Bluetooth, WiFi e Matter rappresentano problematiche molto differenti tra loro. Il fatto che tutte queste funzionalità siano implementate utilizzando lo stesso framework asincrono e lo stesso linguaggio di programmazione offre una dimostrazione concreta della maturità raggiunta dall’ecosistema Rust embedded.
Per chi desidera comprendere lo stato attuale dello sviluppo firmware con Rust, la combinazione tra Raspberry Pi Pico 2 ed Embassy rappresenta oggi uno dei punti di partenza più interessanti disponibili. Non soltanto perché consente di apprendere nuove tecnologie, ma perché mostra chiaramente come la programmazione embedded stia evolvendo verso modelli sempre più sicuri, modulari e capaci di gestire sistemi complessi senza sacrificare prestazioni ed efficienza.