Ciao ragazzi!
Con il video di oggi volevo iniziare una nuova
serie di focus che non si discosta molto dai
vari Tutorial, Pillole o contenuti che di
solito potete trovare qui sul canale, ma che
racchiuderà nel corso del tempo prove, test,
smanettamenti vari che voglio condividere
con voi nonostante si tratti di progetti potenzialmente
incompleti o non sempre funzionanti al 100%,
ma non per questo non interessanti!
Insomma stiamo parlando di Esperimenti.
E quello che vedremo ora è proprio un esperimento
per il quale chiederò anche il vostro aiuto.
Nei giorni scorsi è spuntato fuori un nuovo
progetto molto interessante per Raspberry Pi
che consente di creare in casa il proprio
sistema di car infotainment basato su Android Auto.
Per chi non conoscesse Android Auto, stiamo
parlando dell'incarnazione del robottino verde
in un sistema di intrattenimento in automobile.
In realtà quello che fa Androidauto non è
troppo diverso da quello che fa ad esempio
Chromecast su TV, non stiamo parlando come
nel caso di Android TV di un sistema operativo
completo che funziona in modo indipendente.
In questo caso, come vale esattamente per
Chromecast, abbiamo due componenti una che
va installata sullo smartphone e l'altra che
è solitamente presente sull'automobile.
Questa coppia di componenti è stata così
pensata poiché permette di tenere tutta la
parte più complessa del sistema sullo smartphone,
e quindi più facilmente aggiornabile via
Play Store o con aggiornamenti firmware che
solitamente è molto più complicato rilasciare
ed installare nei sistemi proprietari che
i vari costruttori di automobili utilizzano
sulle loro macchine.
Che cosa consente di fare Androidauto?
Beh fondamentalmente quello che fa è spostare
su un display più ampio mappe, musica, notifiche
e quant'altro tenendo però sempre a cuore
la nostra sicurezza durante la guida.
Ad esempio ci sarà la voce a leggerci messaggi
e darci istruzioni di varia natura; non sarà
possibile eseguire molte applicazioni mentre
si è al volante, ma solo quelle pensate per
funzionare col sistema stesso.
Inoltre il tutto può essere controllato via
assistente digitale o con il touchscreen con
icone grandi, etc...
Android Auto, come tutte le altre incarnazioni
del robottino verde, è un sistema grosso
modo open i cui sorgenti vengono rilasciati
da google, e quindi qualche smanettone curioso
ha pensato bene di sfruttare quel codice per
costruire fai-da-te la componente che dovrebbe
essere nell'automobile.
Sì perché l'altra componente invece, quella
per lo smartphone, è semplicemente scaricabile
dal Play Store con l'unico vincolo di avere
sul telefono Android in versione 5 o successiva.
A questo punto ho pensato bene di testare
in prima persona il progetto e sfruttare il
mio Raspberry Pi 3 con il display touchscreen
di Kuman che vi avevo mostrato tempo fa.
E sono usciti fuori aspetti interessanti.
Ma andiamo con ordine.
Questo progetto può essere portato a termine
in due modi, a seconda della vostra dotazione:
se disponete del display da 7" ufficiale di
Raspberry Pi allora esiste un sistema operativo
già completamente preconfigurato e pronto
all'uso, chiamato Crankshaft, che è sufficiente
scaricare, scrivere su microSD e fondamentalmente
il gioco è completato.
Ci sono poi alcune personalizzazioni possibili
(come l'accensione del sistema all'avvio dell'automobile
e lo spegnimento automatico all'arresto della
vettura), ma grosso modo può essere utilizzato
anche così com'è senza aggiunte.
Ovviamente stiamo parlando sempre di un sistema
non ufficiale, non distribuito da Google,
né certificato, etc etc, quindi alcune cose
potrebbero non funzionare o verificarsi problemi
durante il suo utilizzo.
L'altra strada, invece, sempre non ufficiale
e tutte le controindicazioni del caso, è
quella di utilizzare openauto e aasdk, che poi
sono gli stessi progetti alla base di Crankshaft.
Però visto che vanno compilati a manella
e visto che sono i layer sottostanti al sistema
finale, è anche possibile modificarli e svilupparci
sopra.
Comunque, indipendentemente dalla strada che
vorrete o potrete seguire, è importante verificare
(magari prima di effettuare un acquisto di
un display o altre periferiche ad hoc) se
il vostro telefono supporti Android Auto e
se Crankshaft o openauto siano in grado di
dialogare con esso.
Ad esempio, e purtroppo io l'ho scoperto solo
alla fine, sembra che il mio telefono non
sia compatibile con openauto nonostante Android Auto,
come avete visto, su di esso funzioni senza problemi.
Come fare per verificare la compatibilità?
Semplicissimo, una volta installato Crankshaft
o openauto (cosa che vedremo tra poco), sarà
sufficiente collegare il vostro smartphone
ad una delle prese USB del Raspberry Pi e
verificare che sul monitor collegato al Pi
stesso venga mostrato il sistema di Google.
Se come nel mio caso la schermata dovesse
rimanere fissa sul messaggio "Collegare il
telefono, etc" allora il sistema non sarà
stato in grado di riconoscere il vostro smartphone,
in alternativa sarete pronti a godervi il
vostro sistema di car infotainment fai-da-te.
E questo è il motivo per il quale ho pensato
di creare questa nuova serie di focus su progetti
sperimentali che ad alcuni possono funzionare
e ad altri no.
L'aiuto che vi chiedo è proprio quello di
lasciare un commento qui sotto, in caso voleste
provare anche voi il progetto, indicando il
modello del vostro smartphone e se viene riconosciuto
oppure no.
Ma ora, bando alla ciance, e vediamo quali
sono i passaggi per trasformare il Pi 3 nella
componente secondaria di Android Auto, quella
che va in automobile.
Come dicevo, io ho un display di Kuman da
3.5": chiaramente ha davvero poco senso utilizzare
un display così perché è praticamente più
piccolo della dimensione di un qualsiasi smartphone
in circolazione e tanto varrebbe utilizzare
direttamente quello...
In ogni caso al momento non ho altri display
sotto mano e poi volevo anche provare a riutilizzarlo
dopo un bel po' di inattività.
La prima cosa che ho scoperto è che con la
nuova versione di Raspbian OS, il sistema
operativo ufficiale della fondazione che va
utilizzato come base per installare il progetto
openauto, dicevo il nuovo ramo Stretch di
Debian/Raspbian OS non utilizza più la vecchia
libreria evdev per la gestione del touchscreen,
ma viene sfruttato libinput.
Questa nuova libreria non funziona correttamente
al primo colpo con i display come questo che
sfruttano i driver che circolano con il nome
LCD-show, e occorre smanettare un po' per
sistemare i problemi.
In realtà l'output video viene mostrato senza
problemi, quello che non va è il touchscreen.
Ci sono due strade per risolvere l'inghippo:
o lavorare con i tool forniti da libinput
per correggere il riconoscimento dell'input
sullo schermo, oppure come alla fine ho deciso
di fare io riabilitare evdev ed utilizzare
la vecchia libreria che funzionava out-of-the-box.
Quindi, una volta scaricato ed installato
Raspbian OS Stretch su microSD, collegato
il display sul GPIO, ed avviato il Pi; una
volta scaricati i driver LCD-show ed estratti
nella cartella /boot/LCD-show, occorre installare
il pacchetto xserver-xorg-input-evdev con
il solito comando sudo apt-get install.
Una volta fatto ciò occorre recarsi nel path
/usr/share/X11/xorg.conf.d/ ed aprire con
il comando sudo nano il file 40-libinput.conf.
A questo punto occorre cercare la sezione
con Identifier "libinput touchscreen catchall"
e sostituire Driver "libinput" con Driver
"evdev".
Ctrl+X quindi Y e poi invio per uscire e salvare
la modifica.
A questo punto lanciate il comando
sudo /boot/LCD-show/LCD35-show
(se come avete il display da 3.5") e l'OS
sarà riavviato e ripartirà direttamente mostrando
l'output sul display invece che via HDMI.
E dovrebbe funzionare il touchscreen correttamente.
Questa procedura ho voluto raccontarvela non
tanto per l'utilizzo con openauto, quanto
più perché spesso mi capita di ricevere
commenti circa il non funzionamento di questo
display con le nuove versioni Raspbian etc.
Con questa procedura tornerà a funzionare
a dovere.
Ne approfitto anche per ribadire il concetto
che ormai, forse, non ha neanche più molto
senso acquistare questo specifico modello
di display o similari, mentre conviene
più puntare sui modelli che integrano una
porta HDMI così da poter collegare direttamente
via quella connessione il display al Pi e
risolvere gran parte delle rogne (soprattutto
se non si è interessati al touchscreen).
Altro problema di questo display in relazione
all'uso con openauto è la sua risoluzione
davvero bassa, 480x320 pixel che come vedremo
non permetterà di visualizzare correttamente
la UI di Android Auto.
Ma come ribadito più volte questo è un esperimento
ed utilizzando un display con risoluzione
480p, 720p o 1080p non avrete problemi di
sorta visto che sono le 3 risoluzioni video
al momento supportate dal progetto Android Auto.
Risolto il problema del display, occorre configurare
openauto.
Niente di più facile: un paio di comandi
e un po' di tempo, e fondamentalmente il sistema
si installerà da solo.
La prima cosa da fare è compilare l'aasdk
e per fare ciò occorre installare via terminale
su Raspbian OS alcune librerie.
Con il comando che vedete a video verrà prelevato
tutto l'occorrente e prontamente configurato.
Una volta terminata l'installazione e configurazione delle
dipendenze, si deve clonare il repository dell'aasdk.
Digitate cd per tornare alla home quindi git
clone -b master seguito dalla URL del github
dell'sdk (che vedete a video).
Finito il download con mkdir aasdk_build e
poi cd aasdk_build create ed entrate
nella suddetta cartella.
Da qui con il comando cmake ed i parametri
che potete vedere a video avvierete la configurazione
alla compilazione, terminata la quale vi sarà
possibile tramite comando make senza alcun
parametro buildare l'sdk.
Terminata la procedura che impiegherà qualche
minuto, possiamo passare ad openauto.
Openauto utilizza le librerie QT ed ha qualche
altra dipendenza che deve essere soddisfatta.
Quindi, anche in questo caso, il primo passo
è quello di sfruttare sudo apt-get install
ed installare tutti i pacchetti che vedete
elencati a video.
Terminata l'installaziona va buildato ilclient
recandosi con cd /opt/vc/src/hello_pi/libs/ilclient
e digitando make.
A questo punto non resta altro che passare
ad openauto vero e proprio.
Digitate cd per tornare alla home, quindi
clonate il repository github che vedete a
video con git clone -b master e la sua URL
e terminato il download create la cartella
openauto_build con mkdir ed entrateci dentro
con cd.
A questo punto, come per aasdk, va configurato
il make tramite il lungo comando che vedete
a video nel quale, eventualmente, se le aveste
cambiate, vanno modificate le cartelle che
puntano all'aasdk.
Finita la configurazione date make ed il gioco
sarà fatto.
Ci vorrà qualche minuto affinché il sistema
buildi openauto, ma una volta terminato potete
avviare l'app direttamente tramite touchscreen
sul pi.
Si trova nella cartella home dentro openauto/bin/autoapp.
Essa viene lanciata a tutto schermo ed il
Pi 3 rimane in attesa che colleghiate il vostro
smartphone ad una porta USB.
A questo punto installate l'app Android Auto
sul vostro smartphone se ancora non lo aveste
fatto, configuratela avviandola la prima volta,
e da questo punto in poi vi sarà sufficiente
collegare un cavo USB tra telefono e Pi per sfruttare
il Pi 3 come sistema di intrattenimento in auto.
Come già anticipato il mio telefono capisce
di essere connesso ad un sistema Android Auto,
compare infatti perfino la notifica persistente
di sistema, ma poi l'implementazione di openauto
non riesce a mostrare nulla.
Peccato.
Vi aspetto nei commenti per sapere se siete
stati più fortunati di me.
E anche per sapere se utilizzereste un sistema
del genere fai-da-te.
Bene. Direi che l'esperimento è concluso.
Purtroppo non posso farvi vedere Android Auto
direttamente sul display del Pi ma sappiate
che alla fine viene replicata 1:1 la stessa
schermata che potete vedere avviando su smartphone
l'app Android Auto, app che qualora openauto
o Crankshaft funzionino a dovere dovrete comunque
aver installata ma non avviare direttamente.
Per completare il progetto, infine, potreste
collegare un microfono e uno speaker (oppure
sfruttare il BT della vostra auto) per una
esperienza a 360° del sistema.
Fatemi sapere magari con un feedback al video
se vi piace questo nuova serie di focus che
credo mi permetterà di portarvi ancora più
contenuti rispetto al passato quando, se qualcosa
non funzionava a dovere, evitavo completamente
di parlarvene.
Se ancora non lo foste, iscrivetevi al canale
attivando le notifiche per essere prontamente
avvisati quando pubblicherò tutti questi
nuovi contenuti.
Per qualsiasi domanda come sempre mi trovate
qui nei commenti, sul blog e su tutti i canali
social (i link sono in descrizione così come tutti
i riferimenti ai software esaminati nel video).
Non mi resta altro che salutarvi, al prossimo
esperimento. Ciao!
