Chiosco museo economico
Come realizzare un chiosco per museo con due monitor e due RaspberryQuando Sabina ci ha chiesto di realizzare un chiosco per il museo di casa Martini, che avesse un monitor che presentasse dei video, e un qualcosa di touch per l’interfaccia, abbiamo pensato a varie soluzioni:
- un tablet come dispositivo di ingresso touch che parlasse con un piccolo server collegato allo schermo
- un tablet che oltre che fungere da dispositivo di ingresso touch, facesse anche il play del video tramite una porta HDMI sul monitor esterno
Queste ci sembravano le soluzioni migliori, per stare in un budget basso. Android e magari un Raspberry per pilotare il monitor esterno.
La migliore, perché più semplice e con meno pezzi, ci sembrava la seconda. Abbiamo cercato a lungo un tablet android grande (queste erano le spec) con usb per alimentazione, e uscita video meglio se con mini HDMI per il secondo monitor.
Purtroppo non abbiamo trovato tanti tablet sopra i 12”, anzi alla fine uno solo, un Hannspree HansPad 13.3 Oxygen. Ci sembrava, in caso, perfetto.
Lo abbiamo comprato e purtroppo a quel punto ci siamo accorti che, by design, se si collega quaclsoa alla mini HDMI, il monitor touch del tablet si spegne (ma curiosamente rimane attivo al tocco). Lo abbiamo rimandato indietro
A questo punto abbiamo ragionato.. conveniva avere un Android e un Raspberry? Come si sarebbero parlati?
Anche qui le soluzioni erano due: o via WIFI, e in caso uno dei due avrebbe dovuto fare da hotspot per l’altro, per non tirare in ballo un terzo hotspot,
o via cavo USB
La prima sembrava fattibile, e lo è. Android permette di generare un hotspot al volo. Purtroppo avremmo dovuto gestire il reboot della macchina, o il fatto che questa si sarebbe spenta e riaccesa a caso, quando magari sarebbe finita la batteria e/o avrebbero spento l’alimentazione del totem. Per ripristinare l’hotspot, avremmo dovuto o usare una app tipo Tasker o scrivere un modulo noi. Purtroppo Tasker, se non gira su un Android rootato, non permette di attivare hotspot. E scrivere noi la cosa, con privilegi di root, per un progetto così piccolo, non sarebbe stato economicamente conveniente.
L’altra alternativa era fare diventare il Raspberry un hotspot. Ma qui non mi ricordo.. se era lui che si attivava con password di default, ecc ecc.. il che è pericolosissimo perché lo fa sempre al reboot, per cui ad un malintenzionato basterebbe aspettare che il totem si spegnesse e riaccendese per potere prendere il controllo del raspberry.. o meglio provarci. Ah si..
NON MI RICORDO!
Altra alternativa, era cablare i due dispositivi (dunque un Android con due prese USB, una per parlare al Raspberry e una per alimentarsi), trattando il Raspberry come dispositivo OTG. Si può fare, (ci sono tanti tutorial, ad esempio questa guida) ma anche qui non ci sembrava robusto.
Perché Android con due prese usb ce ne sono poche.. e la connessione OTG su Android è.. Androidiana. Poco stabile
Alla fine abbiamo optato per due Raspberry, uno che mostra l’interfaccia utente su un monitor touch, e che comanda, in base ai tocchi del visistatore, un secondo raspberry che pilota il monitor con i video, il tutto collegando i due con un semplice cavo USB.
Il due Raspberry sono configurati con ethernet-over0USB e il secondo ha un piccolo demone che si assicura che, dopo un reboot, salga bene l’interfaccia usb0
. Dettagliamo il collegamento qui
Per mostrare i video abbiamo comprato un programma di digital signage, info-beamer. MOlto carino, è programmabile in LUA. AL cosa bella è che tra gli esempi c’è proprio quello che ci serve: una modalità in cui sul monitor c’è sempre un video in loop, e poi quando riceve via UDP un comando e un nome di file, fa il play di quel file sul monitor. Chiaramente i file sono precaricati prima sul piZero, ma in questo modo non abbiamo dovuto neanche scrivere un seppur semplice server.
Inoltre info beamer è motlo veloce ecc ecc
Sul Raspberry principale abbiamo scritto una semplice app PHP che mostra interfaccia e poi, quando serve, chiama una funzione PHP (tramite AJAX JS, ma si poteva fare anche direttamente all’interno della pagina, tanto era veloce ugualemnte) una semplice funzione che manda al raspberryZero il comando UDP appropriato.