Antigravity: un driver scritto dall'IA

Indice

Fra tutti i modelli di Raspberry Pi e di Arduino con cui al momento passo la giornata, il mio preferito è senza dubbio il Raspberry Pi Pico, un microcontrollore piccolo ma potente, in grado di essere programmato non solo in C/C++ tramite l’IDE di Arduino, ma anche in MicroPython e CircuitPython, due versioni diverse (e concorrenti) di Python specifiche per i microcontrollori.

A differenza degli altri modelli di Raspberry Pi, il Pico non dispone di una connessione dedicata alla videocamera, ma può utilizzare quelle con interfaccia SPI,1 come ad esempio la Arducam Mini 5MP Plus.

In teoria non dovrebbe essere un lavoro difficile. Dopo aver dato una occhiata alla documentazione ufficiale, si tratta solo di collegare la videocamera al Pico, scaricare il driver e i programmi di test dal repository GitHub del produttore, copiarli sul Pico dopo aver installato la versione di Python supportata, e infine provare a scattare qualche foto.

Non avrei potuto sbagliarmi di più.

Ci vuole un driver

Gli unici due programmi di di test disponibili, uno per Arduino e l’altro per CircuitPython, prevedevano di utilizzare Windows per visualizzare il video prodotto dalla videocamera, una cosa insolita dato che la stragrande maggioranza di chi lavora con questi dispositivi usa Linux o macOS. CircuitPython, poi, è meno diffuso di MicroPython, e io avrei preferito usare quest’ultimo per compatibilità con gli altri componenti già collegati al Pico.

Con un po’ di pazienza, e avendo a disposizione un programma che insegna ad usare le funzioni principali per gestire il dispositivo, si può provare a tradurre il codice CircuitPython in MicroPython (e viceversa),2 ma in questo caso non c’era nulla del genere a disposizione.

Altra guide trovate sul web sembravano promettenti, ma alla prova dei fatti non funzionavano. L’unica opzione rimasta era quella di bypassare i tool ufficiali e di scriversi da solo un driver per la videocamera.

Una parola!

Io so come scrivere il codice per risolvere una equazione differenziale o per analizzare dei dati di misura. Me la cavo anche con la programmazione di microcontrollori ed affini per catturare i dati dei sensori collegati. Ma qui si tratta di ben altro. Si tratta di studiare nei dettagli come funziona a basso livello la comunicazione fra il Pico e la videocamera. Un lavoro da ingegneri specializzati, che scrivono i driver che poi permettono a noi umani di eseguire operazioni complesso come scattare una foto con poche righe di codice Python.

E allora perché non mettere al lavoro uno degli agenti integrati in Antigravity per fargli fare quello che io non sono capace di fare?

Non sarei stato obbligato ad usare Antigravity, anche Claude Code, Google Gemini, Deepseek o uno degli altri mille LLM che abbiamo a disposizione avrebbe potuto tranquillamente lavorarci su. Ma, come ho già scritto, usare uno degli agenti integrati in Antigravity permette di lavorare direttamente nell’editor e di accedere al sistema operativo sottostante, una vantaggio enorme quando si deve provare e riprovare mille volte il codice prodotto.


L’IA al lavoro

Quando si leggono tanti articoli entusiastici sul vibe coding, ovvero sullo sviluppo del software eseguito dall’intelligenza artificiale senza nessun intervento o quasi da parte del programmatore umano, sembra tutto facile (tanto per citarne qualcuno, questo articolo che ha avuto milionate di letture oppure questo senza dimenticare il tweet che ha iniziato tutto).3 In sostanza, scrivi due-tre righe chiedendo all’LLM o all’agente di turno di fare questo o quello, te ne vai a pranzo o a fare una passeggiata e quando torni è tutto pronto.4

Proviamo per una volta a fare lo stesso con Gemini, dandogli solo le informazioni essenziali e verificando cosa riesce a fare davvero. In questo caso queste informazioni si riducono al link alla pagina web della videocamera e a una tabella che descrive come sono collegati i pin della videocamera al Pico (sono più di tre righe, lo so, ma io sono prolisso).

Prompt

I have a Rasperry Pi Pico 2W connected to a Arducam 5MP Plus OV5642 Mini Module Camera Shield (https://www.arducam.com/arducam-5mp-plus-spi-cam-arduino-ov5642.html). I have connected the camera to the Pico using the standard layout found in the documentation:

Camera CS MOSI MISO SCK GND VCC SDA SCL
Pico GP5 GP3 GP4 GP2 GND 3V3 GP8 GP9

Please write a basic Micropython code to test that everything is right and that the camera can take photos

Gemini ci lavora su furiosamente, tira fuori codice MicroPython che non funziona, si ingegna a correggerlo in base ai miei suggerimenti e finisce sempre per fare nuovi errori (dico sempre Gemini per semplicità, ma sono passato anche a Gemini 3.1 Pro, Claude Opus 4.6 e Claude Sonnet 4.6 via via che finivano i token).

A un certo punto, non sapendo più che pesci prendere, Gemini ipotizza anche che ci sia un problema hardware, come un collegamento sbagliato o una videocamera difettosa (ma interrogando i singoli pin della videocamera è facile verificare che tutto funziona correttamente).

Dopo ore ed ore di lavoro e dato che con MicroPython non riesce a combinare niente di buono, gli chiedo di passare ad Arduino, che è una piattaforma software più matura. Ci vogliono altre ore di lavoro ma alla fine, testardamente, ce la fa, e quella qui sotto è la prima immagine in assoluto scattata con il codice Arduino generato da Gemini (l’immagine originale era al contrario e io mi sono limitato a ruotarla di 180°).

Va detto che subito dopo faccio un errore gravissimo che mi, anzi ci, costringe a rifare tutto da capo. Ma questo è argomento di un’altra storia.

Una volta generato un programma funzionante in Arduino, chiedo a Gemini di rifare tutto per CircuitPython. Anche questo port richiede parecchie ore di lavoro, inframmezzate da un paio di riavvi forzati del Mac che, dopo qualche bug di troppo, è stato obbligato a disabilitare la comunicazione fra le porte USB e il Pico.

In teoria dovrei ripetere il ciclo per la terza volta con MicroPython. Ma l’idea di perdere chissà quanto altro tempo a guardare Gemini che lavora mi fa venire i brividi e lascio perdere, almeno per ora.

Conclusioni

Non so cosa usano quelli che scrivono gli infiniti articoli che proclamano che chiunque, anche se non sa un tubo di programmazione, può farsi scrivere dall’IA in poco tempo un programma perfettamente funzionante.

Anche se di programmazione ne so qualcosa, a me è successo solo per gli esperimenti più semplici descritti nei due articoli precedenti. E men che meno è successo in questo caso. Va detto, però, che sono in buona compagnia.

Immagine generata da Google Gemini.

È vero, seguendo alla lettera i dettami del vibe coding, qui non ho scritto nemmeno una riga di codice e ho fatto eseguire a Gemini perfino i comandi di Terminale che potrei scrivere ad occhi chiusi. Ma è altrettanto vero che se non avessi dialogato di continuo con l’agente, se non lo avessi guidato passo passo, se non avessi corretto i suoi tanti tanti errori, a volte davvero banali, Gemini non sarebbe andato da nessuna parte.

E ci sono volute molte ore di lavoro ininterrotto, fin troppe ore secondo me, per ottenere qualcosa di utilizzabile.

Altro che programmazione rapida ed intuitiva. Altro che codice basato sulle buone vibrazioni stile anni ‘60. Altro che programmazione for dummies!5

Se non ti rimbocchi le maniche e non ti dai da fare in prima persona con il codice, anche quello prodotto da un agente più o meno intelligente, non vai da nessuna parte. Sarebbe bello essere smentito.


  1. L’interfaccia SPI (Serial Peripheral Interface) è una interfaccia di comunicazione seriale, molto utilizzata per collegare un microcontrollore (master) ad uno o più dispositivi periferici (slave) in modo veloce ed affidabile. ↩︎

  2. Mentre scrivevo l’articolo ho trovato questo video, che spiega come mescolare nello stesso script codice MicroPython e CircuitPython. Se funzionasse anche in casi più complicati di accendere e spegnere un LED sarebbe davvero una svolta. ↩︎

  3. Sarà un caso che sono sempre post lunghissimi ma senza mai uno straccio di prova, un prompt, qualche brano di codice, dei link a supporto delle tante affermazioni non verificate e non verificabili? ↩︎

  4. Mai nessuno, da vero nerd, dice che va a fare un po’ di sesso. ↩︎

  5. Dal titolo di una famosa serie di guide introduttive agli argomenti più svariati, che spaziavano da come usare il DOS a come giocare a scacchi. ↩︎