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.
print("Hello, World!")#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}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.

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.

È 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.
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.
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.