Dic 152014
 

Dai, non dite che non ve lo aspettavate prima o poi un articolo su RaspBerry su questo blog. Devo dire la verità, ne ho uno comperato un bel po’ di tempo fa e dopo l’installazione iniziale non l’ho più usato ma non tanto perchè non lo ritenga una piattaforma valida, quanto perchè non avevo nulla di specifico da fargli fare. Molti paragonano Arduino e Raspberry, ma in realtà le due cose sono talmente diverse che mi chiedo come si possa solamente pensare di paragonarli in modo diretto. Di fatto Raspberry è un PC su cui farci girare un sistema operativo compatibile, l’unica piccola grossa differenza con un PC è che ha delle uscite di input / output (GPIO) che possono essere utilizzate similmente a quanto avviene con Arduino. Il mio scopo attuale è davvero molto semplice, voglio collegare Arduino via USB a Raspberry per monitorizzare in modo molto semplice ciò che viene inviato attraverso la porta USB per permettermi di fare lunghe sessioni di debug senza dover necessariamente utilizzare un PC più grosso ed ingombrante. Ho scelto l’uso della porta USB anzichè dei pin seriali per evitare di perderci a discutere sulla necessità di convertire i livelli dei segnali da 5 a 3.3V  e viceversa cosa che peraltro dipende dal tipo di Arduino utilizzato.

Primi passi

La prima cosa da preparare per poter utilizzare Raspberry è preparare una SD con il sistema operativo. Eh già, essendo un PC vero e proprio ha bisogno di un sistema operativo e non avendo un hard disk, sarà proprio lo slot SD a permetterci di dargli in pasto il sistema operativo che preferiamo. Già questa prima scelta potrebbe diventare assai complessa, ci sono infatti molti sistemi già pronti fra cui poter scegliere, si va da Android a versioni Linux configurate per trasformare Raspberry in un vero e proprio multimedia-center. Ma a noi interessa un sistema generico senza troppe specializzazioni, per cui opteremo per la più classica Raspbian che potete scaricare dal sito ufficiale. Una volta scaricata l’immagine con il sistema operativo ci sono dei passi da eseguire che potere trovare in questa pagina, dove ci sono i riferimenti in base al fatto che il vostro computer sia un Mac oppure un PC con Windows o Linux. Di base si tratta di prendere il file con l’immagine del sistema operativo che abbiamo appena scaricato e “installarlo” sulla scheda in modo tale che poi Raspberry lo identifichi come un sistema operativo vero e proprio. Io, su Windows, ho usato Win32 Disk Imager. Vi segnalo che ho avuto un sacco di errori durante la fase di scrittura che ho risolto usando un lettore esterno al posto di quello integrato nel PC. Se proprio non vi bastano le informazioni contenute nella pagina ufficiale, ci sono tantissimi tutorial già pronti in rete, anche in italiano. Non ha molto senso che mi metta a copiare ciò che già potete trovare altrove, lo scopo di questo articolo è solo quello di darvi le dritte principali per preparare Rasberry a fare da semplice “serial-logger” per le nostre applicazioni Arduino.

Se siete riusciti a preparare la SD card, collegate Raspberry al vostro televisiore, alimentate la scheda e dategli la SD appena preparata e come per magia verrà caricato il sistema operativo (no, non cercarlo, non c’è il pulsante di accensione). Come gran parte dei sistemi operativi, ci saranno delle schermate che ci permettono di configurare alcune opzioni durante la prima fase di installazione, nel caso specifico il raspi-config. A questo punto una domanda: come facciamo a fare le selezioni? Con il potere della mente? Ci sono due possibili vie, quella più facile è collegare tastiera e mouse sulla porta USB. Se non avete un minimo di dimestichezza con le reti informatiche vi consiglio questa via, semplice e senza troppoe complicazioni.

In caso contrario vediamo come effettuare il controllo remoto attraverso il PC. In questo caso però raspberry deve essere collegato con l’apposito cavo al vostro router in modo da essere visibile sulla rete locale, in cambio possiamo scollegare il televisore perchè tanto non lo andremo ad usare. Giusto per completezza vi segnalo che esistono dei dongle wifi compatibili con Raspberry che permettono appunto di eliminare la necessità del cavo di rete rendendo l’installazione ancora più semplice.

Se i led della scheda di rete non si accendono, molto probabilmente avete disattivato il DHCP del router, cosa che gli impedisce di assegnare un indirizzo a Raspberry. Se invece vedete le lucine più o meno lampeggianti, significa che la connessione di rete c’è e siete pronti per cominciare. A questo punto la cosa più semplice è entrare nella schermata di configurazione del router e annotarsi l’indirizzo che ha assegnato a raspberry, in alternativa potremmo usare un software per analizzare il traffico di rete e scovare l’indirizzo. Se avete problemi con queste pratiche vi ricordo che potete collegate una tastiera sulla porta USB, l’uscita HDMI al televisore e risolvervi un sacco di inutili grattacapi.

Se avete scovato l’indirizzo non dovete far altro che fare una connessione SSH. Se come me state usando un PC con windows dovrete appoggiarvi ad un tool fra quelli che potete trovare in rete, io ad esempio utilizzo putty che è composto da un solo file eseguibile. Cose da sapere sono l’utente di default impostato, ossia pi, e la password preimpostata che è raspberry. Se avete un mac non dovete invece far altro che aprire un terminale e digitare ssh pi@192.168.X.X, modificando ovviamente l’indirizzo IP in base a quello del vostro RaspBerry (che d’ora in poi chiamerò RB). A questo punto avete un terminale che comanda la macchina remota e potete farci ciò che volete. Se volete potete subito utilizzare lo script di configurazione, basterà digitare:

sudo raspi-config

e si aprirà la medesima schermata che potevamo vedere sul televisore di cui vedremo più avanti le principali voci.

raspi-config

Il mio problema è che non ho grandi conoscenze di linux ed il terminale mi crea qualche imbarazzo di troppo, ma non preoccupatevi perchè tutto questo lavoro l’abbiamo fatto in realtà per installare il VNC server che ci permetterà di usare l’interfaccia grafica in remoto come se fossimo sulla macchina.

sudo apt-get install tightvncserver tightvnc-java

Con questa riga di comando fate si che venga installato il server vnc; ora non dovete far altro che lanciarlo (si noti che questa seconda operazione deve essere eseguita ad ogni riavvio).

vncserver :1 -geometry 1280x1024 -depth 24

Attenzione allo spazio prima dei : . A questo punto potete usare un qualunque client, io ad esempio uso il TightVNC per windows e potrete visualizzare l’interfaccia grafica della macchina remota. Vi faccio notare che RB una volta avviato il server VNC vi fornisce un messaggio del tipo:

New ‘X’ desktop is raspberrypi:1

Il numero terminale, in questo caso l’1 è di fondamentale importanza in quanto possono esserci numerose istanze virtuali all’interfaccia grafica e quell’1 indica la porta a cui ci dobbiamo connettere, motivo per cui nel client VNC dobbiamo indicare qualcosa del tipo 192.168.1.70:1, ossia l’IP (che cambierà a seconda della rete / configurazioni) seguito da : ed il numero della sessione. Si faccia caso che quel numero l’abbiamo deciso noi con il comando vncserver.
Si lo so che sono stato un po’ noioso, ma abbiamo imparato cose importanti come gestire una connessione SSH, lanciare il server VNC oltre che svelare il nome utente base e la relativa password di accesso. Devo dire che la connessione si comporta bene, ma c’è un piccolo problema, a seconda delle esigenze che ognuno ha. Il vncserver permette di gestire un sacco di connessioni virtuali, ma non la sessione di root, ossia quella che viene mandata nell’output HDMI: per farla corta siete in grado di aprire varie sessioni grafiche ma non sarete in grado di controllare quella mostrata sul vostro televisore. Se il vostro scopo è controllare quella dovete installare un server diverso.

sudo apt-get install x11vnc

Una volta installato il server x11vnc basterà un comando come il seguente per aprire la sessione remota:

x11vnc  -display :0

In questo caso la connessione risulta più lenta che nei casi precedenti ma avrete il completo controllo del desktop riprodotto sul televisore. In nessuno dei due casi abbiamo utilizzato l’avvio automatico durante il boot del sistema, in questo modo possiamo salvare preziose risorse del nostro RB anche se ci sarà la piccola seccatura di dover avviare a mano il server ogni volta che ne abbiamo bisogno.

Raspi-config

Vediamo brevemente le principali opzioni da configurare:

  • expand_rootfs: Permette di espandere il sistema operativo su tutta la SD in modo da non lasciare spazio libero lasciandovi la possibilità di sfruttarla al 100%
  • change_pass: Indispensabile cambiare la password!
  • change_timezone: RB non ha un suo orologio interno, preleva l’orario da internet, ma dovete specificare in che fuso orario vi trovate.
  • ssh: vi conviene lasciarlo sempre attivo per accedere tramite terminale remoto
  • boot_behaviour: Potete decidere di avviare RB senza modalità grafica

Se avete seguito tutti i passi ora avete un RB pronto all’uso per farci ciò che volete. Prima di procedere vediamo alcuni comandi utili e come effettuare gli aggiornamenti da terminale:

Aggiornamento del sistema

Le istruzioni qui sotto vi permettono di manternere raspberry aggiornato da terminale. 

sudo apt-get update : aggiorna la lista dei pacchetti disponibili
sudo apt-get upgrade : efftettua l’aggiornamento dei pacchetti
sudo apt-get autoclean : cancella i file di installazione non più necessari

sudo apt-get install rpi-update : per installare rpi-update
sudo rpi-update :  per aggiornare il firmware del Raspberry Pi

ricordo due comandi utili:

sudo reboot : riavvia il sistema
sudo halt : spegne RB: attenzione che non essendoci pulsante di accensione / spegnimento, per riaccenderlo dovete staccare e riattaccare la corrente.

Colleghiamo Arduino

Fatte queste doverose introduzioni passiamo allo scopo dell’articolo, ossia il collegamento con Arduino, cosa che si risolve davvero in poche righe. Fisicamente è estremamente semplice collegare Arduino a RaspBerry, basta usare il calssico cavo USB. Potete anche installare l’IDE su RB con il semplice comando

sudo apt-get install arduino

A questo punto potete sia programmare Arduino con uno sketch che aprire il monitor seriale per comunicare tramite questa interfaccia; il tutto non è un fulmine di velocità, ma funziona senza problemi. Ma il mio scopo era quello di salvare il contenuto del monitor seriale su un file in modo da poter rivedere con calma cosa succede nel tempo. Non sono un esperto Linux, con Windows utilizzo realterm, ma qui ho dovuto affidarmi un pò alla rete. Ho provato jpnevulator per cui potete istallarlo con il classico:

sudo apt-get install jpnevulator

A questo punto sarà sufficiente lanciare il software di monitoraggio e reindirizzare l’output su un file che nel caso specifico ho chiamato debuglog.log. In questo file verranno memorizzate tutte le informazioni cha Arduino invia sulla porta seriale.

jpnevulator --ascii --timing-print --tty /dev/ttyACM0 --read > debuglog.log

Come vedete il lavoro da fare è stato davvero molto semplice.

 

Altre piccole operazioni con Raspberry PI

Data la mia scarsa conoscenza dell’ambiente linux, ci sono alcune piccole cose che vorrei lasciar scritte in modo che io stesso quando ne avrò di nuovo bisogno potrò trovarle facilmente.

Una prima cosa di cui avevo bisogno era connettermi al NAS di casa in modo da poter usufruire dei contenuti che ho. Potremmo farlo in modo estemporaneo in modo che la condivisione funzioni sino al prossimo riavvio, oppure fare in modo che la condivisione venga ripristinata ad ogni riavvio. Credo che la seconda soluzione sia la più conveniente.

Vi faccio notare che è possibile accedere facilmente al NAS anche attraverso il file manager, entrando nelle risorse di rete, cosa che ho fatto inizialmente, ma benchè vedessi senza problemi la struttura di directory e files, non ero in grado di vederne i contenuti; immagino a causa di qualche problema con i permessi, sta di fatto che la soluzione non era sufficiente. La prima cosa da fare è creare una cartella dentro la quale faremo magicamente comparire il contenuto del nas, nel mio caso /home/pi/NAS. A questo punto dobbiamo editare il file etc/fstab:

sudo nano etc/fstab

In fondo inseriamo una riga contenente:

//IP_NAS/cartella remota_NAS /percosolocale cifs username=NAS_USERNAME,password=NAS_PASSWORD,workgroup=WORKGROUP,users,auto,user_xattr 0 0

ovviamente il primo parametro (rosso) sarà qualcosa del tipo //192.168.1.50/miacartella/accediqui mentre il secondo (blu) nel nostro esempio corrisponde a /home/pi/NAS. Altrettanto ovvia è la necessità di modificare nome utente e password per l’accesso al NAS. Ora salvate (CTRL+X) ed è venuto il momento di testare se abbiamo fatto le cose come si deve. Proviamo un:

sudo mount -a

Se non si verifica nessun errore, ora nella nostra cartella /home/pi/NAS ci sarà il contenuto del NAS. Ovviamente i permessi di lettura e scrittura dipendono anche dalla configurazione del NAS.