Dal browser
alla scrivania.
Il gioco online funziona da solo. Questa guida è per chi vuole portarlo anche su un ESP32 touch.
Prima di cominciare
Il firmware è progettato per ESP32-2432S028 con display ST7789 da 240 × 320 pixel e touch XPT2046. Altre varianti CYD, in particolare ILI9341, richiedono modifiche ai driver: non caricare alla cieca questo firmware.
Servono cavo USB dati, Wi-Fi a 2,4 GHz, Python 3 e Arduino CLI. Parti dal sorgente e dal README incluso. Conserva un backup della flash se il dispositivo contiene già una partita o un altro progetto.
Scarica il progetto completo ↓
Scarica il binario applicativo 5.1.1 ↓
Il solo binario applicativo richiede bootloader e partizioni
compatibili min_spiffs. Per la prima installazione usa compilazione
e upload del progetto.
1. Prepara il dispositivo
Nel progetto scaricato trovi le istruzioni di compilazione e i driver in README.md. Installa le librerie indicate, compila con lo schema partizioni min_spiffs e carica via USB. Non cancellare la NVS quando aggiorni una versione esistente.
Alla prima accensione configura il Wi-Fi dal display. Collegati alla rete “Tamagotchi-…” con la password temporanea mostrata, poi apri http://192.168.4.1 e inserisci la rete di casa.
2. Crea la tua partita online
Crea un account, conserva il codice di recupero e adotta uno o due cuccioli. Nel gioco apri “Dal browser alla scrivania” e premi “Prepara collegamento ESP32”.
Scaricherai un file PRIVATO contenente una credenziale per il tuo dispositivo. Non pubblicarlo, non inserirlo nel firmware condiviso e non caricarlo su GitHub. Ogni account può collegare un solo ESP32 alla volta.
3. Collega la stessa partita
Installa pyserial in un ambiente Python e usa lo script incluso:
python3 -m pip install pyserial python3 scripts/link_device.py \ --port /dev/cu.usbserial-2140 \ --credentials /percorso/tamagotchi-dispositivo-PRIVATO.json \ --confirm-replace-local-game
Sostituisci porta e percorso con quelli del tuo computer. Su Windows la porta è, per esempio, COM3.
Al primo collegamento la partita online viene caricata sul dispositivo. La precedente partita locale viene conservata nei backup dell’account quando il server riceve il primo stato. Il dispositivo si riavvia dopo il salvataggio della credenziale.
Una partita, due accessi
Le cure nel browser vengono applicate subito sul server. L’ESP32 scambia gli aggiornamenti circa ogni 3 secondi, oltre al tempo della richiesta. Se è spento, il gioco online continua; sul dispositivo lo ritrovi alla successiva connessione.
Senza rete il dispositivo continua localmente. Se nel frattempo la versione online è cambiata, ha priorità lo stato online e la copia del dispositivo viene conservata nei backup. Questa è una scelta esplicita per evitare che una vecchia copia cancelli una nuova adozione o una cura fatta dal browser. L’orologio online continua a scorrere e può quindi causare un riallineamento anche senza nuove cure.
Puoi esportare e ripristinare i backup, fermare i bisogni con la pausa vacanze e revocare il collegamento dall’account. Una revoca impedisce nuovi scambi; i dati già salvati nella memoria del dispositivo rimangono lì.
Puoi anche generare sul display un QR per autorizzare un telefono, con accesso a uno dei cuccioli oppure come genitore. La conferma avviene sul dispositivo. Chi possiede l’account principale conserva il controllo della partita.
Gli aggiornamenti delle unità collegate a un account si installano via USB seguendo il README. L’aggiornamento conserva la memoria di gioco. Le unità della precedente modalità familiare mantengono il proprio percorso OTA.
Dentro il progetto
Ideazione e direzione: Giuseppe Lupo. Sviluppo con il supporto di Codex. Due consulenti d’eccezione, i miei figli, hanno proposto modifiche e nuove funzionalità.
Il pacchetto contiene firmware, piattaforma Node.js, test e istruzioni per un’installazione indipendente. Per ospitarla altrove, cambia origine, endpoint e certificato TLS nel firmware e configura HTTPS e storage persistente sul server.
La piattaforma pubblica è ospitata su Labs di Giuseppe Lupo. Non richiede ChatGPT per funzionare. Il sorgente è disponibile qui anche se il repository di lavoro GitHub è privato.