Raspberry Pi e il bello dell’Open Source

Ogni volta che prendo conoscenza del fatto che è nato un nuovo progetto Open Source sono sempre incuriosito dalla novità. Questa volta ho preso confidenza con Raspberry Pi, un esperimento davvero molto ben riuscito che sta facendo parecchio discutere di sé. Ce ne siamo occupati anche noi, in diverse occasioni: lo abbiamo descritto, lo abbiamo messo in palio ed abbiamo pubblicato un simpatico esperimento. Questi sono i miei primi 30 minuti con la scheda in mano.

Una caratteristica dei progetti che nascono come Open Source, e che hanno a che fare con sistemi operativi Linux, è quella di richiedere all'utente una grande capacità di interessarsi, lavorare, impegnarsi ma anche e soprattutto di capire.

Non è possibile utilizzare l’Open Source come fosse una consolle per videogiocatori ma si richiede all'utente passione e dedizione. Ecco perché ho voluto scrivere queste righe, per farvi vedere cosa mi è successo nei primi minuti di utilizzo e come una semplice scheda mi abbia portato ad imparare velocemente qualcosa che non conoscevo per nulla. Ma cominciamo dall'inizio.

Il mio "hands on"

Una delle cose di cui si sono lamentati in molti è stato il numero ingente di richieste e di ordini, che hanno portato a ritardi considerevoli nelle spedizioni. La Raspberry Foundation ha fatto davvero fatica a "stare dietro" al numero di richieste che gli utenti hanno fatto; io ho avuto fortuna perché mi sono trovato in una fase in cui si erano quasi messi "a regime". Per questo motivo ho aspettato solo tre settimane. Oggi, però, se faceste anche voi un ordine, sicuramente ci metterebbe un tempo sicuramente inferiore, circa un terzo.

Questo è quello che mi è arrivato

La dotazione che ho scelto è stata molto semplice poiché avevo più o meno già tutto quello che mi serviva. Si tratta di un pc-on-a-board, quindi di una scheda funzionalmente completa a meno di tutte le periferiche che è necessario avere. Ovviamente, però, la scheda di memoria era indispensabile e, come l'immagine mostra chiaramente, si tratta di un supporto su cui è precaricato Raspian, un sistema operativo molto diffuso, snello ed efficace.

Per metterlo in funzione, almeno configurandolo come postazione multimediale, vi serviranno certamente:

  • una tastiera;
  • un mouse;
  • un Hub USB (per ogni evenienza...in fondo ha solo 2 porte USB!);
  • un cavo HDMI (se volete usare questa uscita video);
  • un adattatore Wi-Fi USB;
  • un trasformatore DC 5 V - 700 mA;
  • un paio di cuffie oppure delle casse con Jack da 3,5mm.

Un solo appunto c'è da fare a questo elenco, ovvero il fatto che serva effettivamente utilizzare un paio di cuffie. L'audio, infatti, può anche "viaggiare" sull'uscita video ma lo vedremo meglio più avanti.

Una volta che avete collegato il tutto avete qualcosa di questo tipo

della quale vale la pena di fare uno zoom

Di questo genere di figure ne avrete viste sicuramente tantissime ed è proprio per questo che adesso passiamo a vedere che cosa bisogna fare per metterlo in funzione.

All'accensione (ma solo alla prima) il menu è il seguente

e, da qui, è necessaria solo qualche semplice operazione per essere subito operativi.

Primo avvio e prime difficoltà

Al primo avvio del sistema operativo ho già notato i primi problemi, tra i quali quello più evidente è stato il layout della tastiera. Quello predefinito è in inglese ed ovviamente questo mi ha causato non pochi problemi nel lavorare da shell di comando.

Avete un problema di layout, manco a dirlo, se scrivere utilizzando i tasti che vedete sulla tastiera ma su schermo compaiono caratteri differenti. Nel caso di layout in inglese ci saranno caratteri come "/" opppure "-" che non corrispondono nella disposizione italiana.

Per effettuare la riconfigurazione, basta usare la riga di codice

sudo dpkg-reconfigure keyboard-configuration

e seguire le istruzioni. Oppure, si può scrivere:

sudo nano /etc/default/keyboard

e cercare il punto in cui dice

XKBLAYOUT="gb"

e cambiare quelle due lettere, che sono una sigla della nazione, in quelle della nazione che vi interessa.
Per risolvere questo genere di problemi esiste la Troubleshooting guide, una utile guida che vi risolverà diversi grattacapi!

Per fare in modo che questi cambiamenti siano effettivi, basterà un semplice reboot (e ricordate di farlo da super-user!).

Una questione di visualizzazione

Altra problematica è stata quella della risoluzione, nonchè della visualizzazione. Al primo avvio mi sono accorto immediatamente che la risoluzione dello schermo era sbagliata, o meglio che utilizzare la visualizzazione così com'era mi creava non pochi problemi. Infatti lo schermo non era completamente visibile ma c'erano delle regioni laterali che "sforavano" i bordi dello schermo. Tecnicamente Raspberry dovrebbe essere in grado di interrogare lo schermo e, tramite il collegamento video, ricevere l’EDID dello stesso proponendo immediatamente la risoluzione migliore perché quella più adatta allo schermo in uso.

Devo precisare (perché può essere molto utile ad altri utenti) che il monitor che ho utilizzato è un Samsung SyncMaster 2032MW, ovvero un monitor TV 16:9 capace del Wide Screen. Collegando la scheda ad altri televisori (veri e propri), invece, questo problema è stato completamente assente. Rincuorato di questo, ho capito che l'unico modo per risolvere questa questione era mettermi al lavoro per cercare di cambiare la risoluzione.

Cercare la soluzione di un problema che riguardi Raspberry Pi non è cosa dura in verità poiché la comunità globale è perennemente al lavoro su questa scheda.

È anche possibile consultare il loro Forum in cui viene spiegato che la risoluzione viene gestita dal file /boot/config.txt.

A questo punto, è stato semplicemente necessario aprire il file e cominciare a cercare.

Le righe di testo che vengono riportate qui di seguito non sono tutte utili ma solo alcune lo saranno al fine di questa applicazione.

# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1

# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=0

# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
overscan_left=10
overscan_right=15
overscan_top=-10
overscan_bottom=-8

# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720

# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1

# uncomment to force a specific HDMI mode (this will force VGA)
hdmi_group=1
hdmi_mode=20

# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
hdmi_drive=2

# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4

# uncomment for composite PAL
sdtv_mode=2
sdtv_aspect=3

#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800

# for more options see http://elinux.org/RPi_config.txt

Ma andiamo con ordine e cerchiamo di capire cosa c'è da fare, come si può fare e che risultati si ottengono.

Prima di tutto una precisazione importante: qui si vede chiaramente che il formato in cui scriviamo è del tipo "property=value" in cui il valore è un intero (ma non solo e lo vedremo tra un attimo). Si può anche utilizzare una seriei di opzioni aggiuntive, che però dipendono dalla particolare riga di codice in uso.

Nel file che ho condiviso con voi c'è un "#" davanti a diverse righe. Ciò dipende dal fatto che nelle versioni più recenti vengono specificate quelle righe con valori "qualsiasi" e si abilitano solo "de-commentandole". Come tutti gli amanti della programmazione avranno certamente capito, lo scopo di questo carattere speciale è poter inserire un po' di testo all'interno di un codice che non venga eseguito perchè semplicemente "saltato" dal compilatore nell'esecuzione. In particolare il carattere "#" impone il salto dell'intera riga, come accade anche in tanti linguaggi (ad esempio proprio in C). Il testo utilizzato in questo caso, come potete vedere, serve a spiegare la funzione del codice che verrà eseguito e a questo punto colgo l'occasione per consigliare a tutti coloro che programmano di commentare abbondantemente il codice che scrivono come abitudine.

La visualizzazione del video dipende dal monitor, dalla nazione in cui siete (per la frequenza di rete!) e dalla sua massima risoluzione.

Alcuni dei parametri che vi serviranno sono:

  • sdtv_mode che definisce lo standard televisivo per l'uscita. (default=0)
  • sdtv_aspect che definisce l'aspect ratio (default=1 -> 4:3)
  • hdmi_safe che utilizza un "safe mode". Può essere utilizzato come test per verificare il funzionamento. Tutte le opzioni del video vengono "settate" in maniera da essere sicuramente compatibili.

Stessa cosa vale per parametri come

  • hdmi_force_hotplug=1;
  • config_hdmi_boost=4;
  • hdmi_group=1;
  • hdmi_mode=1;
  • disable_overscan=0

hdmi_ignore_edid permette di ignorare l'EDID/display data.

Ed ora veniamo a due parametri di grande importanza:
hdmi_drive che seleziona tra il DVI e l'HDMI
hdmi_group che definisce il tipo di uscita HDMI

Se non si specifica il gruppo, oppure lo si imposta a "0", l'EDID suggerirà il gruppo cui "fare riferimento".

Le opzioni per il "group" sono:

  • hdmi_group=1 -> CEA
  • hdmi_group=2 -> DMT

mentre il "mode" definisce la risoluzione, sia per CEA sia per DMT. Ecco le opzioni supportate:

(CEA)
hdmi_mode=1    VGA
hdmi_mode=2    480p  60Hz
hdmi_mode=3    480p  60Hz  H
hdmi_mode=4    720p  60Hz
hdmi_mode=5    1080i 60Hz
hdmi_mode=6    480i  60Hz
hdmi_mode=7    480i  60Hz  H
hdmi_mode=8    240p  60Hz
hdmi_mode=9    240p  60Hz  H
hdmi_mode=10   480i  60Hz  4x
hdmi_mode=11   480i  60Hz  4x H
hdmi_mode=12   240p  60Hz  4x
hdmi_mode=13   240p  60Hz  4x H
hdmi_mode=14   480p  60Hz  2x
hdmi_mode=15   480p  60Hz  2x H
hdmi_mode=16   1080p 60Hz
hdmi_mode=17   576p  50Hz
hdmi_mode=18   576p  50Hz  H
hdmi_mode=19   720p  50Hz
hdmi_mode=20   1080i 50Hz
hdmi_mode=21   576i  50Hz
hdmi_mode=22   576i  50Hz  H
hdmi_mode=23   288p  50Hz
hdmi_mode=24   288p  50Hz  H
hdmi_mode=25   576i  50Hz  4x
hdmi_mode=26   576i  50Hz  4x H
hdmi_mode=27   288p  50Hz  4x
hdmi_mode=28   288p  50Hz  4x H
hdmi_mode=29   576p  50Hz  2x
hdmi_mode=30   576p  50Hz  2x H
hdmi_mode=31   1080p 50Hz
hdmi_mode=32   1080p 24Hz
hdmi_mode=33   1080p 25Hz
hdmi_mode=34   1080p 30Hz
hdmi_mode=35   480p  60Hz  4x
hdmi_mode=36   480p  60Hz  4xH
hdmi_mode=37   576p  50Hz  4x
hdmi_mode=38   576p  50Hz  4x H
hdmi_mode=39   1080i 50Hz  reduced blanking
hdmi_mode=40   1080i 100Hz
hdmi_mode=41   720p  100Hz
hdmi_mode=42   576p  100Hz
hdmi_mode=43   576p  100Hz H
hdmi_mode=44   576i  100Hz
hdmi_mode=45   576i  100Hz H
hdmi_mode=46   1080i 120Hz
hdmi_mode=47   720p  120Hz
hdmi_mode=48   480p  120Hz
hdmi_mode=49   480p  120Hz H
hdmi_mode=50   480i  120Hz
hdmi_mode=51   480i  120Hz H
hdmi_mode=52   576p  200Hz
hdmi_mode=53   576p  200Hz H
hdmi_mode=54   576i  200Hz
hdmi_mode=55   576i  200Hz H
hdmi_mode=56   480p  240Hz
hdmi_mode=57   480p  240Hz H
hdmi_mode=58   480i  240Hz
hdmi_mode=59   480i  240Hz H
Dove c'è la "H" vuol dire che il formato è 16:9.

(DMT)
hdmi_mode=1    640x350   85Hz
hdmi_mode=2    640x400   85Hz
hdmi_mode=3    720x400   85Hz
hdmi_mode=4    640x480   60Hz
hdmi_mode=5    640x480   72Hz
hdmi_mode=6    640x480   75Hz
hdmi_mode=7    640x480   85Hz
hdmi_mode=8    800x600   56Hz
hdmi_mode=9    800x600   60Hz
hdmi_mode=10   800x600   72Hz
hdmi_mode=11   800x600   75Hz
hdmi_mode=12   800x600   85Hz
hdmi_mode=13   800x600   120Hz
hdmi_mode=14   848x480   60Hz
hdmi_mode=15   1024x768  43Hz  DO NOT USE
hdmi_mode=16   1024x768  60Hz
hdmi_mode=17   1024x768  70Hz
hdmi_mode=18   1024x768  75Hz
hdmi_mode=19   1024x768  85Hz
hdmi_mode=20   1024x768  120Hz
hdmi_mode=21   1152x864  75Hz
hdmi_mode=22   1280x768        reduced blanking
hdmi_mode=23   1280x768  60Hz
hdmi_mode=24   1280x768  75Hz
hdmi_mode=25   1280x768  85Hz
hdmi_mode=26   1280x768  120Hz reduced blanking
hdmi_mode=27   1280x800        reduced blanking
hdmi_mode=28   1280x800  60Hz
hdmi_mode=29   1280x800  75Hz
hdmi_mode=30   1280x800  85Hz
hdmi_mode=31   1280x800  120Hz reduced blanking
hdmi_mode=32   1280x960  60Hz
hdmi_mode=33   1280x960  85Hz
hdmi_mode=34   1280x960  120Hz reduced blanking
hdmi_mode=35   1280x1024 60Hz
hdmi_mode=36   1280x1024 75Hz
hdmi_mode=37   1280x1024 85Hz
hdmi_mode=38   1280x1024 120Hz reduced blanking
hdmi_mode=39   1360x768  60Hz
hdmi_mode=40   1360x768  120Hz reduced blanking
hdmi_mode=41   1400x1050       reduced blanking
hdmi_mode=42   1400x1050 60Hz
hdmi_mode=43   1400x1050 75Hz
hdmi_mode=44   1400x1050 85Hz
hdmi_mode=45   1400x1050 120Hz reduced blanking
hdmi_mode=46   1440x900        reduced blanking
hdmi_mode=47   1440x900  60Hz
hdmi_mode=48   1440x900  75Hz
hdmi_mode=49   1440x900  85Hz
hdmi_mode=50   1440x900  120Hz reduced blanking
hdmi_mode=51   1600x1200 60Hz
hdmi_mode=52   1600x1200 65Hz
hdmi_mode=53   1600x1200 70Hz
hdmi_mode=54   1600x1200 75Hz
hdmi_mode=55   1600x1200 85Hz
hdmi_mode=56   1600x1200 120Hz reduced blanking
hdmi_mode=57   1680x1050       reduced blanking
hdmi_mode=58   1680x1050 60Hz
hdmi_mode=59   1680x1050 75Hz
hdmi_mode=60   1680x1050 85Hz
hdmi_mode=61   1680x1050 120Hz reduced blanking
hdmi_mode=62   1792x1344 60Hz
hdmi_mode=63   1792x1344 75Hz
hdmi_mode=64   1792x1344 120Hz reduced blanking
hdmi_mode=65   1856x1392 60Hz
hdmi_mode=66   1856x1392 75Hz
hdmi_mode=67   1856x1392 120Hz reduced blanking
hdmi_mode=68   1920x1200       reduced blanking
hdmi_mode=69   1920x1200 60Hz
hdmi_mode=70   1920x1200 75Hz
hdmi_mode=71   1920x1200 85Hz
hdmi_mode=72   1920x1200 120Hz reduced blanking
hdmi_mode=73   1920x1440 60Hz
hdmi_mode=74   1920x1440 75Hz
hdmi_mode=75   1920x1440 120Hz reduced blanking
hdmi_mode=76   2560x1600       reduced blanking
hdmi_mode=77   2560x1600 60Hz
hdmi_mode=78   2560x1600 75Hz
hdmi_mode=79   2560x1600 85Hz
hdmi_mode=80   2560x1600 120Hz reduced blanking
hdmi_mode=81   1366x768  60Hz
hdmi_mode=82   1080p     60Hz
hdmi_mode=83   1600x900        reduced blanking
hdmi_mode=84   2048x1152       reduced blanking
hdmi_mode=85   720p      60Hz
hdmi_mode=86   1366x768        reduced blanking

A questo punto è bastato controllare dove, in questo elenco, fosse riportata la risoluzione da me desiderata e cambiando questo file ho risolto in parte il problema. Per modificarlo, da shell è bastato scrivere

sudo nano /boot/config.txt

La seconda parte del problema, ovvero il fatto che la visualizzazione fosse "centrata" è stata risolta per tentativi modificando, come vedete sopra, i parametri di overscan. Questi vengono utilizzati per indicare quanti pixel, da sx e da dx per esempio, è necessario "scartare" prima di iniziare la visualizzazione. Per verificare l'EDID del vostro display basterà scrivere

tvservice -s

e leggere cosa vi propone.

Noterete, poi, che anche la riga hdmi_drive=2 non è commentata e questo perchè, con collegamento HDMI, questo permette di ascoltare anche i suoni tramite cavo video.

Ma in che parte del mondo siamo qui?!

Altro problema che ho avuto è stato quello di impostare l'ora corretta. Quella predefinita è quella inglese, il che significa che segnava un'ora in meno. Questo è stato davvero un piccolo problema da risolvere ma ha comunque richiesto un po' di impegno. Avevo già avuto questo problema con Ubuntu (che è una distro Debian based) quindi sapevo già che avrei dovuto scrivere

sudo dpkg-reconfigure tzdata

e selezionare l'area geografica di riferimento. ETC fornisce le time zones compatibili con UNIX comprendendo CUT, GMT e UTC. Per selezionare la città, basta seguire le istruzioni che seguono ed i cambiamenti dovrebbero essere immediati.

La casa è un diritto!

Ultimo, ma certamente non ultimo, il problema del case! Mi sono accorto troppo tardi di non averlo ordinato. A questo punto mi sono chiesto come fare a dotarlo di una “casetta”. La verità è che la miglior risposta a questa domanda è stato un altro quesito: cosa resta di un bambino che giocava con le Lego quando cresce e studia ingegneria? La risposta è semplice: un ingegnere che gioca.

Ed ecco qui, con quattro pezzi dei più famosi cubetti ormai chiusi in uno scatolone ed un po' di fantasia la soluzione che ho trovato

ed oltre a lasciare aperti dei varchi per permettere le connessioni mi sono tolto lo sfizio di farlo apribile sfruttando un paio di cerniere:

Ora che tutti i primi problemi sono stati risolti, sono pronto per mettermi a lavorare con questa incredibile scheda ma mi accorgo che è molto scomoda da accendere poichè non è dotata di un vero e proprio pulsante di accensione. La condizione di ON, infatti, è dettata dalla presenza dell'alimentazione. In pratica, quando il trasformatore è sotto tensione, la scheda si avvia.

Un tasto di accensione

Ci ho messo un po' per accorgermene, devo ammetterlo, ma alla fine mi sono reso conto che Raspberry Pi non ha un tasto di accensione. La cosa non è particolarmente scomoda ma ammettiamolo: non è poi così usuale. Fortunatamente, cercando e ricercando schematici su schematici, ho avuto una bella sorpresa: una predisposizione c'è! Si tratta del Jumper P6, totalmente inutilizzato nella scheda e facilmente accessibile. Avevo due contatti ed un saldatore pronti all'uso e mi sono subito lanciato nell'impresa.

Vi ho evidenziato la locazione di alloggiamento e qui di seguito vi riporto una foto del retro della scheda dopo la saldatura.

Nulla di particolarmente difficile, in realtà, sia nella realizzazione sia nell'uso. In quel momento non avevo un pulsante a disposizione per cui ho usato un Jumper che avevo "in serbo" per un'occasione speciale.

Il funzionamento è davvero elementare: accendiamo Raspberry Pi nel modo in cui siamo abituati e quando vogliamo spegnerlo, basta chiudere il circuito, ovvero inserire un Jumper (non appena compro un pulsante carino, lo aggiungo e consiglio anche a voi di farlo...è davvero comodo!).

Quando il Jumper viene tolto, la scheda si riavvia ed è praticamente come se riprendesse dallo stand-by.

Una volta, poi, acquistato il pulsante giusto, il tutto ha questo simpatico aspetto

Prima di passare alle conclusioni, vi faccio vedere come si può rendere ancora più smart il tutto ottimizzando ancora spazi e tool. In uso sul mio Raspberry Pi ora c'è una tastiera in soluzione compatta che comprende anche il mouse. Si chiama Tocamy ed è un modello della Trust che ho comprato per molto poco e con facilità.

Ed ecco quanto smart appare il tutto.

In conclusione

Prima di concludere ci terrei a fare una piccola osservazione: state molto attenti a quante periferiche collegate alle porte USB  e scegliete un alimentatore adeguato al carico perchè le dimensioni contenute ed il basso consumo di potenza potrebbero giocarvi brutti scherzi. Con un Hard Disk portatile (USB 2.0) ed un lettore mp3 attaccati alle USB, la scheda non ha retto il carico eccessivo (rispetto ai 700 mA), si è spenta e mi è stato possibile riavviarla solo dopo aver rimosso le periferiche.

Detto questo, l'ho consigliata ad amici e parenti, ne ho parlato con molti colleghi e questa semplice prima esperienza, anche confrontata con le loro, ha dimostrato come lavorando un po' e sapendo cosa cercare, il mondo dell’Open Source si dimostra una sfida continua. Ed è davvero soddisfacente riuscire a superare questi ostacoli, per quanto piccoli.

Scarica subito una copia gratis

6 Commenti

  1. Avatar photo Emanuele 25 Febbraio 2013
  2. Avatar photo delfino_curioso 25 Febbraio 2013
  3. Avatar photo Piero Boccadoro 26 Febbraio 2013
  4. Avatar photo Piero Boccadoro 26 Febbraio 2013
  5. Avatar photo Giorgio B. 27 Febbraio 2013
  6. Avatar photo Piero Boccadoro 7 Marzo 2013

Scrivi un commento

Seguici anche sul tuo Social Network preferito!

Send this to a friend