Iniziare con il Raspberry Pi (parte 2)

Raspberry-Pi-logo

Introduzione

Benvenuti alla seconda parte dell’articolo. Per chi non avesse letto ancora la prima parte, potete raggiungerla attraverso questo link:

In questa sezione tratteremo i seguenti argomenti:

  • Accesso al Raspberry
  • Aggiornare il Raspberry
  • I comandi base 

Aggiornamento 2017: L’ultimo modello di Raspberry Pi attualmente in commercio è il Raspberry Pi 3, con il nuovo alimentatore da 5V 2,5A. Comunque è disponibile anche un kit ufficiale che comprende già la scheda con tutti gli accessori necessari (vedi qui).

Accesso al Pi

Da Locale

Dopo che il Raspberry Pi si è avviato, vi verranno chiesti i dati di login. Se non avete modificato la password durante la configurazione iniziale, il login di default è: User: pi Password: raspberry E siete già pronti per lavorare.

Da Remoto

Per accedere al Raspi da remoto, dobbiamo procurarci il tool per stabilire la connessione SSH. Per Windows esistono diverse soluzioni, il mio tool preferito è PuTTY perchè è piccolo e funziona bene, ma ne esistono per tutti i gusti, basta dare un’occhiata qui. Se invece lavorate con Linux, SSH è solitamente installato di default (se così non fosse, sudo aptitude install openssh-client e avete risolto), e si lancia da terminale con il comandossh user@serverip

Pi, dove sei?

Adesso per poterci connettere abbiamo bisogno di sapere l’indirizzo IP del Raspberry Pi. Sfortunatamente la maggior parte dei router assegna gli indirizzi abbastanza casualmente, quindi non è semplice stabilire l’indirizzo esatto al primo colpo. Per trovare il Raspi abbiamo due strade: la prima è andare tra le impostazioni del proprio router (generalmente basta digitare nella barra degli indirizzi del browser l’indirizzo del router – spesso è 192.168.1.1 – per arrivare alla pagina di setup). Una volta dentro alla configurazione del router dobbiamo spulciare le varie schede finchè non troviamo Tabella di assegnazione indirizzi DHCP o simile.

raspberry_busted
Fig.1: Busted!

Se non avete modificato l’hostname durante la configurazione (come invece io ho fatto) troverete in tabella raspberrypi. Annotiamoci l’indirizzo corrispondente, ci servirà per aprire la connessione SSH. La seconda strada per trovare l’indirizzo IP del nostro Raspi è usare nmap. Nmap è un tool pensato per scansionare una rete o una macchina in particolare, per determinare quali porte e quali servizi sono attivi. Questa procedura la raccomando agli smanettoni e a chi ha voglia di provare qualcosa di nuovo. Nmap è un programma molto potente che però non vedremo in dettaglio, raccomando quindi la lettura della reference guide. Per gli utenti Windows, scaricate l’eseguibile da qui (Latest release self-installer), installate il programma seguendo la procedura guidata e avviatelo.

raspberry_nmap
Fig.2: nmap può anche essere avviato dal prompt dei comandi

Nella casella obbiettivo (ce le hanno messe loro le due b) inseriamo l’indirizzo di tutta la nostra rete: faremo una scansione di tutti gli apparecchi collegati al router. La rete interna di casa è solitamente identificata con 192.168.1.0/24 (dove /24 è la maschera di sottorete 255.255.255.0), ma in alcuni casi può essere anche 192.168.0.0/24. Per averne certezza controllate l’indirizzo IP del vostro computer e rimpiazzate l’ultimo numero con uno 0. Selezioniamo come metodo di scansione quella veloce e avviamo la scansione.

raspberry_nmap2
Fig.3: Ci hanno messo due b per davvero

Dopo pochi istanti il programma ci sputerà fuori la lista delle macchine collegate tra cui comparirà anche il nostro Raspi. Lo distinguete subito dagli altri perchè è l’unico host con solo la porta 22 (SSH) aperta e perchè il MAC address identifica come costruttore “Raspberry Pi Foundation”.

raspberry_busted2
Fig.4: Busted!

Per gli utenti di Linux basta installare nmap con il solitosudo aptitude install nmap

e lanciare la scansione consudo nmap 192.168.1.0/24

Il comando sudo non è essenziale, ma se non lo usate nmap non visualizzerà i MAC address degli host.

raspberry_nmap3
Fig.5: nmap lanciato da bash

Per una lista completa delle opzioni di comando:nmap --help

oppure (meglio)man nmap

Primo accesso

Da Windows lanciamo PuTTY e accediamo finalmente al Raspberry Pi. Inseriamo l’indirizzo IP che abbiamo trovato prima e clicchiamo su Open

raspberry_putty
Fig.6: Ci sono millemila opzioni

Alla prima connessione comparirà un avviso che ci avverte che il computer non conosce l’host al quale si sta collegando, e vi chiede se può fidarsi o meno. Clicchiamo su  e proseguiamo.

raspberry_putty2
Fig.7: E siamo dentro!

Inseriamo il nome utente di default pi, premiamo [INVIO] e inseriamo la password di default raspberry (se non l’avete cambiata durante la configurazione iniziale). Premiamo [INVIO] ancora una volta e il Raspberry Pi ci accoglierà con un po’ di informazioni relative al sistema operativo. Da Linux il procedimento è simile a quanto già descritto; apriamo il terminale e digitiamossh pi@indirizzoip

dove ovviamente indirizzo ip va sostituito con l’indirizzo del Raspi. SSH ci avviserà che il computer non conosce l’host a cui si sta collegando e ci chiede conferma per continuare. Digitiamoyes e premiamo [INVIO], inseriamo la password quando richiesto, premiamo [INVIO] e il gioco è fatto.

raspberry_putty3
Fig.8: La bestia sullo sfondo è un gatto

Tips ‘n’ Tricks – parte 1

Alcuni suggerimenti per rendere il Pi più comodo da usare.

INDIRIZZI STATICI

Siccome ogni volta che accendiamo il Raspi il router potrebbe cambiargli indirizzo IP, è buona norma impostare un indirizzo statico (riferitevi al manuale del vostro router per i dettagli sulla procedura) in modo che il Raspberry Pi si trovi sempre allo stesso indirizzo.

raspberry_putty4
Fig.9: Il Raspberry Pi con indirizzo locale statico

BRIDGING

Non sempre si ha il router nei pressi del proprio banco di lavoro o il posto dove generalmente conduciamo le nostre prove. Quindi ci sarebbe da tirare un cavo ethernet per tutta la casa… non proprio il massimo della comodità. Ad esempio, nel mio caso, il mio PC è collegato in wifi e ho necessità di lavorare sulla stessa scrivania, lontana dal router. La soluzione al problema è semplice: basta collegare la porta Ethernet del PC con quella del Raspberry Pi, e creare unbridge tra l’interfaccia wifi del PC e l’interfaccia Ethernet dello stesso. In questo modo, tutto il traffico proveniente dal router viene girato sulla porta Ethernet e viceversa. In internet si trovano molte guide[+] per fare il bridging di due interfacce, e con Windows è una procedura decisamente semplice e indolore.

raspberry_bridging
Fig.10: Tutto qua

WI-FI

In alternativa all’opzione bridging, si possono comprare dei piccoli adattatori wifi (wifi dongle) per collegarci al Raspi senza fili. Questa procedura può sembrare difficile se non siete pratici di Linux, ma in realtà non è niente di complesso. Ancora, di guide se ne trovano moltissime, basta una veloce ricerca con Google[+].

Aggiornare il Raspi

Prima di metterci all’opera, è buona norma aggiornare (e tenere aggiornato) il software del Raspberry Pi. L’operazione è automatica e ci consente di avere sempre le ultime versioni di tutti i programmi che usiamo, primo tra tutti Python e le sue librerie. Da terminale digitiamosudo aptitude update

Aptitude è il programma che gestisce gli aggiornamenti e la modifica dei pacchetti (parti di software). Con l’istruzioneupdate, diciamo ad aptitude di aggiornare il proprio database di pacchetti disponibili. Una volta terminato il processo rilanciamo il comando con l’opzione upgrade, che aggiornerà il software vecchio all’ultima versione disponibile. Le versioni dei programmi installati vengono comparate con quelle presenti nel database di aptitude, ecco perchè bisogna fareupdate prima di upgrade.sudo aptitude upgrade

Aptitude ci mostrerà una lista dei programmi che verranno aggiornati e ci chiederà conferma prima di proseguire. DigitiamoY (che sta ovviamente per yes) e lasciamo che aptitude faccia il suo mestiere.

raspberry_aggiornamento
Fig.11: “Ma sei un acher??” [cit. chiunque vi veda lavorare da terminale]

Siamo quasi pronti per iniziare con l’elettronica, ma prima…

I comandi di base

La prima volta che si devono eseguire delle operazioni da terminale ci si sente sempre un po’ scombussolati. Copiare file, creare cartelle, scrivere un programma… Come si fa senza mouse? In questo elenco vediamo molto molto velocemente i comandi che utilizzeremo (che sono anche i più comuni). Ricordate sempre che tutti i programmi sono provvisti di manuale, che potete visualizzare lanciando il comandoman comando

La maggior parte dei comandi può anche fornire un elenco veloce di opzioni utili con cui possono essere lanciati. Per leggere questo elenco usate l’opzione –help. Ad esempio lanciate il comandols --help

e rimarrete impressionati dalla quantità di cose che ls può fare. Inoltre, non mi stanco mai di ricordarlo, Google è il vostro miglior amico. Per un utilizzo più comodo del terminale, ricordate che i comandi che avete lanciato sono tenuti in memoria (fino a 1000 se non cambiate la configurazione di bash) e si possono scorrere in ordine cronologico premendo i tasti freccia su e giù. Inoltre se volete cercare un comando che avete eseguito un po’ di tempo fa, potete cercarlo digitando Ctrl+R e scrivendo una parte del comando. Per scorrere i risultati premete Ctrl+R fino a quando non avrete trovato quello che vi interessa. Come ultimo suggerimento, la combinazione Ctrl+U cancella tutto quello che è stato scritto prima del cursore del terminale. Questa scorciatoia è utile quando dovete cancellare dei comandi lunghi senza tenere premuto Backspace per dieci minuti e per quando avete sbagliato a digitare la password e volete cancellarla interamente.

Interrompere un programma in esecuzione: CTRL+C

Se lanciate un programma per errore o volete terminarlo senza aspettare che esca normalmente usate la combinazioneCtrl+C per cancellare il processo. Questa shortcut è utile per fermare i nostri script in python se abbiamo previsto dei cicli senza fine o se ci siamo dimenticati del comando exit() in fondo al programma.

Spegnere il Raspberry Pi: poweroff

Quando abbiamo finito di lavorare è bene spegnere il Raspi tramite il comando poweroff e non tagliare di netto l’alimentazione. Il comando poweroff necessita dei privilegi di amministrazione per poter essere lanciato.sudo poweroff

L’alimentazione potrà essere tolta quando tutte le spie salvo quella rossa (PWR) saranno spente.

Chiudere la connessione SSH: logout

Per disconnettersi dal terminale del Raspberry Pi senza spegnerlo, basta digitare:logout

Ottenere i privilegi amministrativi: sudo

Questo comando l’abbiamo già usato diverse volte in testa ad altri comandi. Il suo scopo è di lanciare un programma con i diritti amministrativi (Super User DO). In sostanza, certe modifiche – installazione, disinstallazione pacchetti, rimozione file di sistema, cambio dei permessi degli utenti, … – possono essere fatte solo da chi dispone dell’autorizzazione. Il comando sudo chiede sempre la password per autorizzare un programma a girare con i diritti di root (il Super User), tranne nel caso del Raspberry Pi in cui è stato modificato un parametro per lanciare sudo senza chiedere nulla.

raspberry_vignetta
Fig.12: http://xkcd.com/149/

Quando un programma si rifiuta di funzionare per problemi di privilegi va preceduto da sudo. Provate a fare un aggiornamento con aptitude senza usare sudo in testa; dopo l’elenco degli errori vi verrà chiesto: are you root?

Leggere il contenuto di una cartella: ls

ls (che sta per List) è un semplice comando che elenca il contenuto di una cartella. ls può essere lanciato con o senza opzioni. Le opzioni più comuni sono:

  • -l elenca i file dettagliatamente
  • -a mostra anche i file nascosti (all)
  • -h scrive le dimensioni dei file in formato human-readable

Tutte le opzioni si possono trovare digitando ls –help.

raspberry_ls
Fig.13: ls -lah è l’equivalente di ls -l -a -h

Le colonne visualizzano (da sinistra verso destra):

  1. permessi del file/cartella (drwx e tutta la sfilza di trattini); i permessi li vedremo più avanti
  2. numero di hard link esistenti per ogni elemento, questo dato non ci interessa
  3. utente con i permessi di owner (di solito è il creatore del file)
  4. nome del gruppo che ha i permessi sul file (se non pocciate con la gestione utenti corrisponde all’utente owner)
  5. dimensioni (per le cartelle è sempre 4K essendo solo un link e non un file vero e proprio)
  6. mese, giorno, anno (o orario se l’anno è quello corrente) di creazione del file
  7. nome del file

Da ricordare che i file che iniziano con un punto sono file nascosti e senza l’opzione -a non vengono visualizzati.

Cambiare cartella: cd

Il comando cd si usa per spostarsi tra le cartelle (Change Directory). Se nessuna cartella è specificata dopo il comando, si ritorna nella cartella home. La cartella home è quella in cui ci troviamo non appena effettuiamo il login, ed è indicata con il simbolo tilde ~ (posto dopo la scritta utente@hostname: e prima del dollaro $) che significa che ci troviamo in/home/pi o più in generale in /home/utente. Se ad esempio vogliamo accedere alla cartella “documenti”, supponendo sia nella nostra cartella home, digitiamo:

cd documenti/

Attenzione a non mettere lo slash / prima del nome della cartella, altrimenti “documenti” verrà cercato nella cartella di base di tutto il sistema che è appunto / (noi stiamo cercando /home/pi/documenti, non /documenti). Per fare un confronto con Windows, possiamo immaginare la cartella / di Linux come il C:\ di Win e il /home/pi come C:\Users\pi(o C:\Documents & Settings\pi per i nostalgici). Attenzione anche alle maiuscole e minuscole, cd è case sensitive e non troverà “Documenti” se la cartella inizia con una d minuscola. Un’altra cosa utile è il percorso .. che ci permette di salire di un livello. Ad esempio se siamo in ~/documenti/programmi e vogliamo tornare in ~/documenti, ci basterà digitare cd ..

raspberry_ls2
Fig.14: Cambiare cartella SENZA MOUSE? ERESIA!

La cartella sulla quale state lavorando è sempre scritta prima del dollaro $

raspberry_ls3

Protip: Bash ha la magnifica funzione autocomplete che completa i nomi dei percorsi e dei file senza che l’utente stia a scrivere tutto. Digitate cd, scrivete l’iniziale della cartella che vi interessa e premete due volte TAB.

Creare e rimuovere una cartella: mkdir e rmdir

Per creare una cartellamkdir documenti

Per eliminarlarmdir documenti

Notare che rmdir cancella solo cartelle vuote, se dentro rimane un file (anche nascosto) si rifiuterà di procedere. Usatels -a per visualizzare tutti i file all’interno.

Creazione di un file: touch

Anche questo è un comando semplice, non fa altro che creare un file vuoto. Per usarlo basta invocare il comando con il nome del file che si vuole creare, ad esempio:touch script.py

Se provate a fare ls -l troverete un file dalle entusiasmanti dimensioni di 0 Byte.

Spostare/rinominare un file: mv

Se vogliamo spostare (o rinominare) un file ci basterà invocare mv specificando il file attuale e la nuova destinazionemv script.py vecchioscript.backup (rinomina script.py in vecchioscript.backup) mv script.py documenti/script.py (sposta script.py nella cartella documenti)

Si possono anche spostare più file contemporaneamente a patto che la destinazione sia la stessa. Se ad esempio volessimo spostare due script nella cartella python:mv script1.py script2.py python/

Oppure se vogliamo spostare tutti gli script presenti nella cartella python:mv *.py python/

In questo modo tutti i file che finiscono con “.py” vengono spostati.

Protip: Possiamo selezionare tutti i file che iniziano con le stesse parole, che terminano con le stesse parole o che contengono delle parole uguali usando delle combinazioni diverse del testo con il carattere speciale asterisco *. Vediamo alcuni esempi comuni:mv script.* archivio/ – sposta tutti i file che iniziano con script, ad esempio script.py e script.backupmv *script* archivio/ – sposta tutti i file che contengono la parola script, ad esempio primo_script.py,primo_script.backupsecondo_script.pymv * archivio/ – sposta tutti i file nella cartella archivio

Copiare un file: cp

Questo comando si usa nello stesso modo di mv. Da ricordare l’opzione -r che permette di copiare anche i file presenti nelle sottocartelle. Se abbiamo due file nella cartella documenti e un altro nella cartella documenti/archivio, il comando:cp -r documenti/* backup/

copierà tutto ciò che è presente in documenti nella cartella backup. Quindi alla fine avremo anche la cartella backup/archivio con il suo file all’interno.

Eliminare un file: rm

Banalmente:rm script.py

Per una lista di opzioni invocate rm con l’opzione –help.

Cambiare i permessi: chmod

Il comando chmod permette di cambiare le modalità di accesso ad un file. Quando invochiamo il comando ls -l i file ci vengono elencati assieme alle loro caratteristiche. La prima colonna specifica i permessi.-rwxrw-r--

I permessi si leggono in questo modo: il primo carattere è una d se l’elemento è una cartella, mentre è un trattino  se si tratta di un file. Gli altri nove caratteri sono divisibili in tre terne. La prima rappresenta i permessi che ha l’utente creatore (owner) del file, la seconda rappresenta i permessi del gruppo di cui l’owner fa parte e la terza rappresenta i permessi di tutti gli altri utenti del sistema. I permessi sono così descritti:

  • r – permesso di lettura (include la sua visibilità in elenco quando si invoca ls)
  • w – permesso di scrittura (modifica/eliminazione del file)
  • x – permesso di esecuzione (il file può essere invocato come comando ed eseguito a terminale)

Essendo un argomento complesso, vediamo solamente il comando che ci interessa durante l’uso del Pi. Per approfondimenti leggete qui e qui. La cosa importante per gli script che andremo a scrivere sarà renderli eseguibili. Di default, quando un utente crea un file, gli vengono assegnati d’ufficio i permessi di lettura e scrittura. Per rendere un file eseguibile, ci basta digitare:chmod u+x script.py

In questo modo abbiamo stabilito che l’owner (u) ha anche i permessi di esecuzione x. Per rimuovere uno dei permessi, ad esempio per rendere un file non modificabile e non eseguibile, useremo lo stesso comando utilizzando il  al posto del+:chmod u-wx script.py

Cambiare la password: passwd

Per cambiare la password ci basta invocare passwd. Ci verrà chiesro di introdurre la password attuale, quella nuova e di ridigitare la nuova password. Se tutto è andato bene, la procedura guidata uscirà senza errori, altrimenti visualizzerà il messaggio Password unchanged!
E con questo abbiamo terminato la prima delle tre parti dell’articolo. Nelle parti successive affronteremo i seguenti argomenti:

  • il primo circuito e il primo programma in Python
  • una serie di esempi da realizzare con la scheda Raspberry.

Allora, a presto!

Lascia un commento