← Torna al diario
Storia

Ripartire da una pagina bianca

Lasciare il Raspberry Pi per un ESP32, riscrivere tutta la codebase in C++, ripensare la scocca in modo più semplice. Il prototipo cambia fondamenta.

Nell'articolo precedente ti presentavo la versione Raspberry Pi del progetto: un sistema completo, funzionante, open source. E concludevo dicendo che era il momento di voltare pagina. Ecco quindi l'inizio del seguito.

Perché lasciare il Raspberry Pi

All'uso quotidiano, il Raspberry Pi ha i suoi limiti. È caro, consuma tanto, parte lentamente, e fa girare un sistema operativo completo per quello che resta, in fondo, un lettore audio pilotato da NFC. È troppo per quello che fa.

Dopo qualche ricerca e dei consigli preziosi, ho finito di convincermi a mettere in pausa la versione Raspberry Pi per concentrarmi sullo sviluppo della versione ESP32. Più semplice, molto meno cara, consumo bassissimo e, soprattutto, controllo totale su quello che gira. Niente OS, niente aggiornamenti che spaccano i driver, niente livelli di astrazione inutili. Solo l'applicazione, direttamente sul microcontrollore.

Non è stata una scelta facile. Lavoravo da un bel po' sulla versione Python ed ero occupato a sistemare bug, solo che quella parte cominciava a tirarsi per le lunghe, mentre in parallelo mi rendevo conto che l'ESP32 era più interessante per il seguito. Volevo trovare il giusto equilibrio tra finire quello che avevo cominciato e abbandonare un progetto in corso.

La scelta si è imposta da sola.

Riscrivere tutta la codebase

Il problema è che non si porta del Python su un ESP32. È stato necessario riprendere tutto in C++. E io non conoscevo il linguaggio.

Python
print("Hello, World!")
C++
#include <iostream>

int main() {
  std::cout << "Hello, World!\n";
  return 0;
}
Confronto tra Python e C++ per stampare un Hello World

Era una sfida enorme. Il C++ non ha niente a che vedere con quello che facevo fino a quel momento: gestione manuale della memoria, compilazione, vincoli sulle risorse, niente garbage collector. Un altro modo di pensare.

Come per il proof of concept iniziale, le IA generative mi hanno aiutato parecchio. Per partire, capire i pattern, individuare quello che facevo male. Ma questa volta, il salto concettuale era più grande: ho dovuto imparare davvero, non solo trasporre i miei riflessi da sviluppatore iOS.

Ma dopo qualche mese di testa bassa, ho qualcosa di funzionante. Il sistema funziona, legge le carte, suona la musica, gestisce le playlist. Lo scheletro sta in piedi, e sta in piedi su un microcontrollore da qualche euro.

Trovare la scheda giusta

Sono partito da un Arduino Nano ESP32-S3. Schedina pulita, perfetta per cominciare. Ma mancava tutto il resto: lettore NFC, uscita audio, lettore SD, gestione dell'alimentazione. A ogni componente, un modulo esterno, dei fili. Comodo per iniziare, ma non utilizzabile così com'è per i miei bambini.

Breadboard ESP32 con lettore NFC, DAC audio, lettore SD e gestione dell'alimentazione cablati in moduli separati
Breadboard ESP32 con lettore NFC, DAC audio, lettore SD e gestione dell'alimentazione cablati in moduli separati

Cercando un po', sono finito su una scheda che mette insieme dei componenti di base per far partire il progetto: il NFC Reader di HermitX, nella sua versione N8R8. ESP32-S3, lettore NFC integrato, uscita audio, lettore SD, ma niente gestione della batteria. Una scheda pensata per questo tipo d'uso, che mi evita di ricablare tutto a ogni iterazione.

La scheda NFC Reader di HermitX accanto alla batteria, all'altoparlante, ai potenziometri e ai pulsanti del prototipo
La scheda NFC Reader di HermitX accanto alla batteria, all'altoparlante, ai potenziometri e ai pulsanti del prototipo

È su questa scheda che gira il prototipo attuale.

La scocca, in modo più semplice

Mentre riscrivevo il firmware, ho anche ripreso la modellazione della scocca. La v3 aveva una struttura cubica, pensata come l'ossatura di un cubo stampata in 3D con placche in MDF tagliate al laser per le facce. Bella sul rendering, ma pesante da stampare, e ogni fallimento costava ore di print.

Ho quindi semplificato tutto. Niente più struttura complessa, niente più pannelli da allineare al decimo di millimetro. Una scatola semplice, più compatta, più facile da stampare, che ospita la scheda, l'altoparlante, la batteria, e basta.

Meno pezzi, meno calibrazione, meno occasioni per sbagliare.

Il prototipo in 3D, ruotalo per esplorarlo.

Quello che resta da sistemare

Il grande cantiere irrisolto è sempre la gestione della batteria. Sono ancora sullo stesso LiPo Rider della v3, e ha lo stesso difetto: quando si stacca l'USB, il passaggio sulla batteria provoca una micro-interruzione che fa riavviare la scheda.

La buona notizia è che l'ESP32 parte in dieci secondi. Contro uno o due minuti sul Raspberry Pi. Non è perfetto, ma non c'è proprio paragone. All'uso cambia tutto: si stacca, si riavvia, ed è quasi trasparente.

Cosa mi porto a casa

Ripartire da una pagina bianca, sul momento, fa paura. Si lascia dietro del codice che funzionava, una scocca che girava tutti i giorni a casa, mesi di bricolage. Ma era la decisione giusta.

Il progetto è più allineato con quello che dovrebbe essere: un oggetto semplice, sobrio, che fa una cosa e la fa bene. E il vincolo forte del microcontrollore, paradossalmente, mi costringe a scrivere codice più pulito di quello che facevo sul Raspberry Pi. E il punto più positivo: ci si può finalmente girare con la box, perché è molto più leggera e tiene più di cinque ore con la batteria.

Un bambino poggia una carta sulla box, la musica parte da sola

Il seguito è stabilizzare il firmware, sistemare la questione dell'alimentazione, e pensare seriamente a quello che trasformerà questo prototipo in qualcosa che altre persone possano costruire. Te ne riparlerò nel prossimo articolo.

Newsletter

Resta informato

Lasciaci la tua email per seguire l'avanzamento del progetto e non perderti il lancio.