24 aprile 2017

tutorial: come costruire una game console casalinga e portatile con il raspberry pi 3


Benvenuti!
Questo tutorial esplorerà varie possibilità per costruire una videogame console casalinga e portatile con l'ausilio di un raspberry pi 3 (qui trovate tutti i miei focus sul dispositivo).

Nota: il presente articolo contiene una infarinatura generale ed una panoramica tra i vari sistemi di gaming esistenti. Se avete proposte al riguardo o volete approfondire, non esitate a lasciare un commento o a contattarmi sui canali social.

Prima di addentrarci, vi riporto il video di supporto a questa guida che ho pubblicato sul mio canale YouTube:


Inoltre vi segnalo che nella pagina dedicata troverete tutti i tutorial da me pubblicati.


1. l'attrezzatura minima per iniziare


Per costruire una console casalinga e portatile occorrono:
  1. un raspberry pi 3 + una microSD (minimo classe 10) + un alimentatore/power bank (da almeno 2.4A) + un cavo HDMI + una tastiera e un mouse + uno o più gamepad + uno schermo LCD da collegare sui PIN GPIO
  2. Raspbian OS o uno degli OS pensati per il retrogaming
Per quanto riguarda il primo punto non occorre altro: tutta la configurazione può essere fatta sia da remoto che direttamente sul pi 3 stesso (una volta che avrete copiato Raspbian OS sulla microSD), e a progetto terminato il controllo avverrà direttamente via gamepad o comunque sul raspberry pi, quindi non è necessario alcun altro dispositivo esterno. Sarà indispensabile avere un alimentatore che eroghi in uscita almeno 2.4A (ovviamente il power bank sarà necessario per la portabilità) ed una microSD veloce e capiente (maggiore la dimensione, maggiore il numero di giochi che potrete caricare).
L'idea è quella di utilizzare uno dei sistemi per emulare varie console e sistemi di gaming, ma per chi vuole è possibile andare oltre, e per questo sfrutteremo Raspbian OS.


2. l'idea


Esistono più livelli (di più tra poco) che è possibile raggiungere nella costruzione della nostra console di gioco casalinga e portatile. L'idea è quella di creare un qualcosa che vada a "mimare" il funzionamento della nintendo switch (che ho recensito di recente, qui trovate tutti i miei focus al riguardo).
Per chi non lo sapesse, la nintendo switch è l'ultima console di nintendo e permette di giocare sia in mobilità (grazie allo schermo da 6.2" integrato sulla console stessa) sia sul TV di casa (tramite l'utilizzo di un'apposita dock che, via HDMI, trasmette l'output sul televisore e spinge un po' di più il SoC). Chiaramente quello a cui aspiriamo non potrà essere paragonato al 100% ad un prodotto del genere, ma da esso possiamo prendere in prestito alcuni concetti base:
  • consentire di giocare o solo in mobilità o solo via TV
  • passare automaticamente da un output all'altro alla connessione del cavo HDMI

Per quanto riguarda il primo punto, è possibile raggiungere facilmente lo scopo installando uno dei 3 sistemi pensati proprio per l'emulazione di console ed analizzati nel prossimo paragrafo. In aggiunta ad essi va configurato il display LCD collegato sui PIN GPIO del pi 3.
Per quanto riguarda il secondo punto, bisogna smanettare un pochino affinché venga direzionato l'output video sia sul display LCD che sulla porta HDMI (e da essa al TV collegato).

Bene, questa è l'idea: arrivare a coprire entrambi i punti, emulando vecchie console con cambio automatico dell'output tra LCD e TV alla connessione del cavo HDMI.


3. confronto tra i sistemi di emulazione


Prima di addentrarci nello smanettamento, vi ricordo che esistono 3 sistemi che permettono di emulare vecchie console: Retropie, Recalbox e Lakka. Questi sistemi sono stand alone, il che significa che possono essere installati direttamente su microSD ed utilizzati così come vengono distribuiti senza particolari configurazioni aggiuntive.

Usarli in questo modo corrisponde a coprire solo parte del primo punto discusso in precedenza, cioè giocare in casa via TV. Senza ulteriori configurazioni non sarà infatti possibile sfruttare lo schermo LCD...

Retropie (4.2) tra i tre è il sistema ad oggi più diffuso e famoso: basato su Raspbian OS, esso consta di uno stack software a più livelli già preinstallati e configurati in modo da rendere possibile l'esecuzione degli emulatori e -su di essi- dei giochi di nostro interesse. Al di sopra di Raspbian OS ci sono infatti Retroarch ed EmulationStation (+ altro software), con tutte le loro possibilità di configurazione avanzate e non. Sicuramente rispetto agli altri due sistemi, Retropie è quello più completo ma anche il più "pesante" e per certi versi meno intuitivo. L'installazione richiede il processo standard previsto da qualsiasi altro OS per raspberry pi, quindi via dd su Linux/Mac o via Wind32DiskImager su Windows. In alternativa è possibile utilizzare Etcher, utility di recente creazione con UI intuitiva e funzionante sia su Linux/Mac/Windows.

Recalbox (4.0.1), invece, è in forte ascesa: questo sistema utilizza direttamente RetroArch ed EmulationStation (+ altri software) senza basarsi su un sistema operativo complesso come può essere Raspbian OS o altra distribuzione GNU/Linux. Ciò gli permette di essere decisamente più leggero ed anche la sua installazione è piuttosto semplice: basterà copiare sulla microSD i file estratti dal pacchetto scaricabile dal sito ufficiale, ed inserire la scheda di memoria nel raspberry pi. Nessuno step particolare aggiuntivo. Una volta avviato, l'OS è praticamente identico a Retropie (personalizzazioni peculiari a parte) visto l'utilizzo comune di RetroArch ed EmulationStation tra i due sistemi. L'assenza di un OS sottostante, però, lo rende più semplice da gestire e mantenere.

Lakka (2.0), infine, è l'outsider: si tratta di un sistema basato su LibreELEC il che gli consente di essere compatibile con tantissimi SBC ed anche altri device. Ma la peculiarità di questo OS è che non utilizza EmulationStation come front-end: esso è codificato direttamente su RetroArch, cosa che garantisce una unificazione della UI (indipendentemente dall'emulatore in uso) e tanti altri benefici derivanti dal fatto di avere meno strati software. Anche in questo caso, come per Retropie, l'installazione prevede il processo standard comune a qualsiasi altro OS per raspberry pi.


Come detto, installare questi sistemi così come vengono forniti vi permetterà di creare una videogame console o retrogame machine senza passaggi ulteriori, ma essa funzionerà soltanto in casa con il pi 3 collegato al TV. Per questo motivo l'idea è quella di partire da Raspbian OS e su di esso configurare un'istanza di Retropie con piccole aggiunte necessarie ai nostri scopi.


4. i codici e la configurazione hardware/software


Una volta che avrete scaricato e configurato Raspbian OS (con P.I.X.E.L.), a raspberry pi 3 spento, collegate il display LCD sui PIN GPIO. Io ho utilizzato il display da 3.5" di Kuman (che vi ho già mostrato in questo video-focus) il quale, per poter essere utilizzato, prevede l'installazione del pacchetto software reperibile da qui. Per maggiori dettagli rimando al video su di esso pubblicato, in ogni caso sappiate che potrete utilizzare qualsiasi display vorrete.

Una volta che il sistema sarà in grado di riconoscere il display LCD e voi sarete in grado di switchare manualmente tra LCD ed HDMI (lanciando gli appositi script forniti dal produttore), tornate alla visualizzazione via HDMI e potrete così passare allo step successivo: fare in modo che sia possibile riprodurre in contemporanea l'output video sia su LCD che su TV.

A questo punto ci sono alcuni passi da seguire: scaricare un pacchetto software che ho preparato (e che contiene alcuni script che potrete utilizzare in seguito) ed il tool fbcp. Per prelevare il mio pacchetto, seguite i seguenti passi:
  1. aprendo il terminale, digitate cd per essere sicuri di trovarvi nella home
  2. digitate git clone https://github.com/geekonerd/display_loader.git
  3. terminato il download troverete nella cartella display_loader script e configurazioni

Ora scaricate il tool fbcp:
  1. sempre dal terminale (in una cartella qualsiasi, anche quella display_loader creata poc'anzi) digitate git clone https://github.com/tasanakorn/rpi-fbcp.git
  2. terminato il download assicuratevi di avere installato il tool cmake (in caso è sufficiente installarlo tramite sudo apt-get install cmake con tutte le sue dipendenze) quindi digitate cd rpi-fbcp, ed uno per volta i quattro comandi: mkdir build, cd build, cmake .. (occhio ai puntini) ed infine make; finita la compilazione lanciate il comando sudo install fbcp /usr/local/bin/fbcp
  3. una volta che avrete eseguito i miei script (descritti fra poco) potrete lanciare il comando fbcp e riuscire a vedere contemporaneamente lo stesso output sia su TV che sul display LCD
  4. premete ctrl + c sulla tastiera per bloccare il processo
Nota: avrete notato che la dimensione dell'immagine visualizzata sul display LCD sarà identica a quella mostrata sul TV, il che significa che (ad esempio nel mio caso, con un display da 3.5") essa sia fondamentalmente minuscola. Tornerò su questo punto in seguito.


Una volta avuto sia il tool fbcp (che copia frame per frame l'output) sia i miei script, potrete configurare il raspberry pi affinché esso sia in grado di rilevare automaticamente la tipologia di monitor in uso.
I settings presenti nei file config-HDMI.txt e config-LCD.txt sono pensati appositamente per il display Kuman ma potete sostituire questi file di configurazione con i vostri (solitamente forniti dal produttore del display LCD). La cosa importante è che in essi sia presente la voce hdmi_force_hotplug=1 e che entrambi abilitino gli overlays per il display LCD.

NOTA BENE: questo tutorial è stata redatto nel mese di Aprile 2017 con l'ultima versione di Raspbian OS e dei driver per il display LCD di Kuman all'epoca disponibili. Nel corso dei mesi successivi possono essere state apportate modifiche sia al sistema operativo che ai driver stessi le quali potrebbero richiedere un vostro intervento di sostituzione dei file config-HDMI.txt e config-LCD.txt con le versioni aggiornate distribuite dal produttore del display!


Nella cartella che vi ho fornito trovate lo script che permette di gestire automaticamente, all'avvio del raspberry pi, la scelta se utilizzare il display LCD oppure l'HDMI a seconda che il pi 3 sia collegato o meno ad un monitor esterno. Al momento si tratta di una "versione 1.0" che soffre di alcuni "problemi" che non sono certo possano essere risolti facilmente, ma sono aperto a vostri suggerimenti e/o soluzioni!

In particolare:
  • avviando il pi 3 scollegato dal TV, viene forzata la risoluzione dell'LCD quindi collegando il cavo HDMI sul TV verrà impiegata una risoluzione potenzialmente molto bassa (scomodo per chi ha televisori HD o superiori)
  • avviando il pi 3 collegato al TV, viene forzata la risoluzione del TV quindi scollegando il cavo HDMI e passando allo schermo LCD si vedrà tutto potenzialmente molto piccolo (scomodo per chi ha schermi LCD di piccole dimensioni)
  • al momento è impossibile disattivare lo schermo LCD quando il pi 3 è collegato al TV, quindi l'immagine si vedrà sempre su entrambi

Affinché possano essere abilitati i miei script, da terminale eseguite i seguenti comandi:
  • cd per tornare alla home
  • cd display_loader
  • sudo cp -r rc.local /etc/rc.local
  • riavviate il raspberry pi


Una volta che avrete verificato che riavviando il pi 3 collegato al TV e/o scollegato da esso venga scelta la risoluzione "corretta", e soprattutto che collegando il cavo HDMI l'output venga automaticamente duplicato sia sul LCD sia su TV, potrete installare Retropie.

Per l'installazione di Retropie rimando alla guida pubblicata sul sito ufficiale, che trovate qui. Una volta completata (può impiegare un po' di tempo) avrete la possibilità di decidere se avviare sempre Retropie, Raspbian OS oppure nessuno dei due.
Arrivati fin qui avrete coperto entrambi i punti desiderati descritti nella fase II e quindi avrete a disposizione un sistema che permette l'emulazione di tantissime retro console. L'unica cosa che dovrete fare prima di iniziare a giocare sarà configurare i vostri gamepad/joystick/controller e copiare sul pi 3 tutti i giochi che vorrete per gli emulatori di vostro interesse!

Nota: vi consiglio di effettuare tutte le configurazioni in modalità TV poiché in quella LCD potreste avere difficoltà a visualizzare correttamente tutte le schermate di configurazione.


In realtà è possibile andare oltre alle retro console ed eseguire anche vecchi giochi sviluppati per architetture x86 (sia Linux che Windows). Nei prossimi giorni pubblicherò un focus dedicato a questa possibilità, ma vi anticipo che utilizzando il tool Exagear, che è un software che richiede una licenza a pagamento, e Wine (che invece è gratuito) è possibile eseguire applicazioni OpenGL sviluppate per sistemi operativi x86 e giocare a vecchi giochi storici, come Diablo 2, Counter Strike e tantissimi altri titoli. Ovviamente dati i limiti hardware del raspberry pi 3, non potremo giocare a videogame troppo recenti, ma ci possiamo accontentare!


5. conclusioni ed ultime note


Indipendentemente dal punto in cui avrete deciso di fermarvi (installare Retropie/Recalbox/Lakka ed usare solo il monitor TV, oppure configurare Raspbian OS + Retropie affinché supporti output video sia via LCD che HDMI, o -ancora- andare oltre ed usare anche Exagear) avrete creato una stazione di gioco per la casa (e/o in mobilità)!

Nota: il progetto può essere migliorato ad esempio aggiungendo un modulo batteria che effettivamente renda più facile l'uso in modalità portatile, oppure costruendo grazie alla stampa 3D un vero e proprio case dedicato o, infine, migliorando gli script affinché lo switch tra HDMI e LCD diventi più efficiente...


Bene: come indicato ad inizio guida, alcuni aspetti sono stati appositamente lasciati in secondo piano, ma se siete interessati ad approfondirli non esitate a contattarmi nei commenti di questo tutorial o del video ad esso correlato, oppure sui canali social!

Spero che la guida vi sia stata utile. Al prossimo tutorial!

Nessun commento:

Posta un commento