Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)

Post on 15-Jul-2015

909 views 6 download

Transcript of Raspberry pi per tutti (workshop presso Warehouse Coworking Pesaro)

RASPBERRY PIPER TUTTI

13 dicembre 2014 - Warehouse Coworking Factory - Pesaro

Chi sono

Gabriele Guizzardihttp://www.brainandbytes.comguizzardi@brainandbytes.com

Cosa è Raspberry PiIl Raspberry Pi è un single-board computer (un calcolatore implementato su

una sola scheda elettronica) sviluppato nel Regno Unito dalla Raspberry Pi

Foundation. Il suo lancio al pubblico è avvenuto alla fine del mese di febbraio

2012. Attualmente, viene venduto in due versioni, al prezzo di 25 e 35 dollari

statunitensi.

L'idea di base è la realizzazione di un dispositivo economico, concepito per

stimolare l'insegnamento di base dell'informatica e della programmazione nelle

scuole. (Wikipedia)

5

FondazioneLo sviluppo del dispositivo è portato avanti dalla Raspberry Pi Foundation, organizzazione di beneficenza registrata presso la Charity Commission for England and Wales[10]. Il suo scopo è "promuovere lo studio dell'informatica e di argomenti correlati, soprattutto a livello scolastico, e di riportare uno spirito di divertimento nell'apprendimento del computer".Mente principale del progetto e della fondazione è Eben Upton.Dopo il nome Raspberry è stata aggiunta la parola “Pi” che sta a indicare il connubio tra la scheda e il linguaggio di programmazione Python.

Ne sono stati venduti circa 4 milioni

Caratteristiche modello B

La nuova Raspberry Pi B+

Comparazione versioniUSB 2 x USB 2.0 4 x USB 2.0

Video

out

HDMI (rev 1.3 &

1.4), Composite

RCA

HDMI, Composite RCA

(shared with audio jack)

Storage SD card slot MicroSD card slot

GPIO 26-pins 40-pins

Power

Rating

750mA up to 1.2A @

5V

600mA up to 1.8A @

5V

Dimens. 85.6 x 53.98 x 17mm 85 x 56 x 17mm

Eliminati i LED di diagnosticaFori di fissaggio differenti

Versione “compute module”120 pin di GPIO4Gb di memoriaCaricamento Linux su chip in Slave

Paragone tra B e Compute module

La concorrenza cinese (Banana PI)

Caratteristiche di Banana PI

Jack audio/video B+

Materiale utile

Accessori e shields

Prodotti creati ad hoc

http://www.themagpi.com/

Quali SO sono disponibili

- Raspbian (porting di Debian Wheezy 7)- Arch- Debian- Pidora (Fedora)- RISC OS (non è Linux)- OpenElec e altri (media center)- ...e altri...

Esempio di SO dedicato (xbmc)

Si parte… prepariamo il RPi- Scaricare dal sito “NOOBS” oppure il SO desiderato

(noi useremo Raspian, un Debian adattato).- Formattare una SDcard come FAT32.- Copiare il contenuto di NOOBS_v1_x_x sulla SDcard

oppure usare Win32 Disk Imager (su Windows) oppure la procedura per Mac o Linux.

- Inserire la SDcard ed alimentare Raspberry Pi.- Dopo il boot apparirà la videata di configurazione dove

potremo inserire le prime informazioni utili...

http://www.raspberrypi.org/

SDcard già pronte

Creazione della SDcard in WindowsFormattare la SDcard usando un programma apposito:

https://www.sdcard.org/downloads/formatter_4/eula_windows/

Cliccate su Accetto per scaricare il programma e installatelo.

Creazione della SDcard in Windows

Creazione della SDcard in WindowsScaricare il programma Win32DiskImager:

http://sourceforge.net/projects/win32diskimager/files/

Creazione della SDcard in Windows

Creazione della SDcard in Linux● df -h

per vedere quale dispositivi sono installati, inserire l’SD Card e ridare il

comando per vedere qual’è il dispositivo della SD.

Il nome può essere /dev/mmcblk0p1 oppure /dev/sdd1. Fate attenzione ad

eliminare la partizione quindi togliete p1 o 1.

● umount /dev/sdd1 (mettere il nome del device sd)

smontare il device per impedire che sia usato durante la procedura.

● dd bs=4M if=2014-09-09-wheezy-raspbian.img of=/dev/sdd

a questo punto possiamo montare il file immagine ricordandoci di non usare

la partizione. Usare 1M se il blocco da 4M non dovesse funzionare.

Creazione della SDcard in Linux

Per altri sistemi operativi...

http://elinux.org/RPi_Easy_SD_Card_Setup

Qui ci sono tutte le informazioni passo-passo per installare l’SO su Raspberry per i tre sistemi principali, Windows, Linux e Mac.

L’avvio di NOOBS

...finalmente il boot.

Configurazione (raspi-config)

Configurazione (raspi-config)

- Espandere il File System- Abilitare il boot con desktop grafico- Settare tastiera e lingua- Overclock… “modesto”. (800MHz)

- Opzioni avanzate:- Abilitare SSH

Il desktop di Raspbian

Settiamo il wi-fi

- lsusb

Avremo un elenco delle periferiche USB installate. Se si toglie e rimette la periferica possiamo capire come è elencato il prodotto.

Settiamo il wi-fi

- lsmod

Settiamo il wi-fi

/etc/network/interfaces

Settiamo il wi-fi- nano /etc/wpa_supplicant/wpa_supplicat.conf

ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev

update_config=1

network={

ssid="VOSTRO_SSID_ROUTER"

scan_ssid=1 (se il router non rende visibile l’SSID)

proto=RSN (può essere WPA-PSK o WPA-EAP se reei enterprise)

key_mgmt=WPA-PSK (può essere WPA-PSK (probabile) or WPA-EAP (reti enterprise)

pairwise=CCMP (può essere CCMP se WPA2 o TKIP se WPA1)

auth_alg=OPEN (quasi sempre OPEN oppure SHARED o LEAP)

psk="password"

}

Settiamo il wi-fi

Normalmente basta mettere solo l’SSID e la password.

Se si hanno più reti basta mettere più network { }.

Settiamo il wi-fi

1) eseguire il Reboot

oppure

2) wpa_action wlan0 stopifup wlan0wpa_cli status

Configurazione (config.txt)

Non è presente un BIOS pertanto tutte le modifiche che solitamente riguardano il BIOS risiedono nel file /boot/config.txt

nano /boot/config.txt

molto ben spiegato su http://elinux.org/RPiconfig

Configurazione (config.txt)

Per es. è possibile assegnare le quantità di RAM per la GPU, oppure settare il tipo di uscita video e la risoluzione e la rotazione dello schermo.E’ possibile modificare i parametri del boot del Kernel oppure impostare i parametri di overclock.

...e molto altro.

LED on board (modello B)

ACT : status LED, verdePWR : power LED, rossoFDX : full duplex, verdeLNK : network, verde100 : 100Mb, arancio

C’è un’apposita pagina per le problematiche:

http://elinux.org/R-Pi_Troubleshooting

Connessione SSHSSH è presente e deve essere attivato:

SSH con Windows

Il modo più semplice è installare PUTTY:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html(si fa prima a cercare Putty Download su Google)

Non si deve installare, basta scaricarlo e metterlo in una cartella e lanciarlo:

C:\putty\putty.exe

SSH con Windows

SSH con Windows

SSH con Linux e Mac OS X

Da terminale digitare:

ssh pi@192.168.n.n

SSH con Android

SSH ClientJuiceSSH

Connessione VNC (RPi - server)

apt-get install tightvncserver

tightvncserver(al primo avvio viene richiesta una password di 8 caratteri, notare anche il numero indicato per la connessione, es. 1)

vncserver :1 -geometry 1024x728 -depth 24

IMPORTANTE: cancellare .Xauthority altrimenti al successivo avvio comparirà un finestra di Login.

Connessione VNC (Windows - client)

Installare TightVNC oppure RealVNC

Avviare il Client VNC

Digitare l’IP di RPi seguito da :1 (il numero uno può cambiare poiché accetta più collegamenti)

Connessione VNC (Linux)

- apt-get xtighvncviewer

- xtighvncviewer(digitare ip:n)

Connessione VNC (Linux)

E’ anche possibile usare x11vnc, su RPi:

- apt-get install x11vnc

- x11vnc(in questo caso la connessione funziona solo da Linux, digitare l’IP seguito dalla porta 5900. Di default è senza password, )

Vers. del firmware (uname -a)

Aggiornare il firmware (rpi-update)

Che modello stiamo usando?

cat /proc/cpuinfo

Che modello stiamo usando?Nota: se la scheda è di colore verde allora significa che è stata creata dalla Raspberry Foundation.

Se la scheda è di colore rosso è stata prodotta in Cina probabilmente dalla Egoman Technology Corp in licenza.

Se la scheda è di colore blue è una serie limitata della RS Components.

Sono comunque tutte uguali e di pare qualità.

Repository

Il Repository può essere visto come un deposito, in questo caso di files, da dove attingere per trovare ed installare ciò che ci serve.

Il repository principale è http://archive.raspbian.org

Il file /etc/apt/sources.list contiene le informazioni per installare i pacchetti software.

Aggiornamento

Aggiornare il repository e Raspberry in generale è uguale all’aggiornamento classico di Linux:

apt-get update (scarica la lista pacchetti dal repository e li aggiorna per poter poi scaricare l’ultima versione)

apt-get upgrade (aggiorna i software installati e le loro dipendenze)

apt-get dist-upgrade (come upgrade ma più intelligente, rimuove software obsoleto, ecc.)

Comandi Linux utili

- reboot (riavvia la scheda)

- sync (salva ciò che ancora è in RAM su HD)

- poweroff (spegne la scheda)

- startx (lancia il desktop da terminale)

- ctrl-alt-F1 (torna al terminale da desktop)

Applicazioni per Android

RasPi Check

In caso di problemi?

http://elinux.org/R-Pi_Troubleshooting

A questo indirizzo troviamo un elenco di problematiche e relativi controlli da fare ...

Pin aggiuntivi modello B

Reset fai da te modello B

Reset fai da te modello B+

Controlliamo il voltaggio modello BUsare i puntali su T1 e T2 per controllare che vi siano almeno 4.7V perché la scheda funzioni.

Piedinatura dei 3 modelli più usati

Applicazione interattiva

Una utilissima applicazione per conoscere ogni singolo pin la si trova a questo indirizzo:

http://pi.gadgetoid.com/pinout

I protocolli del GPIO

Il RPi ha tre protocolli seriali: UART, SPI e I2CUART (Universal Asynchronous Receiver-Trasmitter) trasmetti flussi di dati in modo seriale. Asincrono significa che usa i dati stessi per sincronizzare la trasmissione.

SPI (Serial Peripheral Interface) è una trasmissione seriale sincrona che opera in modalità Full Duplex cioè permette la comunicazione bidirezionale simultaneamente.

I2C (I quadro C, Inter-Integrated Circuit) bus di tipo sincrono, si basa su due linee, una per i dati (sda) e una per il clock di sincronizzazione (scl).

Pulse Width Modular (PWM)La modulazione di larghezza di impulso, è un tipo dimodulazione digitale che permette di ottenere una tensione media variabile dipendente dal rapporto tra la durata dell'impulso positivo e di quello negativo (duty-cycle), allo stesso modo è utilizzato per protocolli di comunicazione in cui l'informazione è codificata sotto forma di durata nel tempo di ciascun impulso. Grazie ai moderni microcontrollori è possibile attivare o inattivare un interruttore ad alta frequenza e allo stesso modo rilevare lo stato e il periodo di un impulso. (wikipedia)

Pulse Width Modular

Pulse Width Modular GPIOp = GPIO.PWM(channel, frequency) #istanzia PWM

p.start(dc) #avvia PWM dove dc è il duty cycle (0.0 <= dc <= 100.0)

p.ChangeFrequency(freq) #cambiare frequenza dove freq è la nuova frequenza in Hz

p.ChangeDutyCycle(dc) #cambiare il duty cycle dove 0.0 <= dc <= 100.0

p.stop() #ferma PWM

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)

GPIO.setup(12, GPIO.OUT)

p = GPIO.PWM(12, 0.5)

p.start(1)

input('Premi un tasto per fermare')

p.stop()

GPIO.cleanup()

Come funziona I2C

Usando 7 bit per gli indirizzi si possono collegare fino a 128 Slave (alcuni riservati quindi sono meno)

Come funziona i2c

Abilitiamo I2Cdisabilitato ma presente:

nano /etc/modules

Abilitiamo I2C

nano /etc/modprobe.d/raspi-blacklist.conf(aggiungere il carattere sharp alla riga i2c-bcm2708 per abilitarlo)

Abilitiamo I2C

- apt-get install i2c-tools- reboot- modprobe i2c-dev- ls /dev/i2c* (vedremo le porte)

- chmod o+rw /dev/i2c* (ora possiamo usare le porte, dovremo rilanciare modprobe e chmod ad ogni avvio. Se vogliamo automatizzare il processo inseriamo i due comandi in /etc/rc.local)

Controlliamo I2C

- i2cdetect -y 0 oppure - i2cdetect -y 1

Web Server Python

python -m CGIHTTPServer Da un altro PC collegarsi a http://[indirizzo ip]:8000

Web Server LAMP

apt-get install apache2 (collegandosi a localhost si può vedere che funziona)

apt-get install mysql-server mysql-client(durante l’installazione chiede di cambiare la password)

apt-get install php5 libapache2-mod-php5 php5-mysql(andare in /var/www e creare un file .php)<?php

phpinfo();?>Ricollegarsi a localhost, lanciare il file .php creato e se tutto ok viene visualizzato un elenco delle funzionalità di php

Installare una dash board

apt-get install curl php5-curl php-json

(andare nella cartella /var/www)

git clone https://github.com/afaqurk/linux-dash.git(oppure scaricare lo script)

sul browser digitare: 192.168.n.n/linux-dash

Utility utili

apt-get install mc (il vecchio Norton Commander)

apt-get install jed (editor)

apt-get install treeapt-get install epiphani-browser (browser)

apt-get install fbi (visualizza immagini da shell)

apt-get install iptraf (analizza il traffico di rete)

apt-get install nmon (monitorare Linux da riga di comando)

Accendiamo il nostro primo LED

Accendiamo il nostro primo LEDPython è il linguaggio principale e ufficiale della Raspberry Pi pertanto troviamo già presente una libreria per usare la GPIO: RPi.GPIOPer sapere quale versione è installata eseguire:- find /usr | grep -i gpio

Accendiamo il nostro primo LEDcd /sys/class/gpio

echo "17" > export

echo "out" > gpio17/direction

echo "1" > value

echo "0" > value

import time

import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)

GPIO.setup(11,GPIO.OUT)

while(1):

GPIO.output(11,1)

time.sleep(5)

GPIO.output(11,0)

time.sleep(5)

GPIO.cleanup()

Accendiamolo usando il CPossiamo usare una libreria inizialmente scritta per Arduino e adattata per RPi: WiringPi.La libreria può essere usata anche per Python, Ruby e Perl.

- git clone git://git.dragon.net/wiringPi- cd wiringPi- git pull origin- ./build

Accendiamolo usando il C (led.c)#include <stdio.h>

#include <wiringPi.h>

/* vedere tabella wiringpi */

#define LED11 0

int main(void)

{

printf(“Lampeggio LED GPIO 11\n”);

wiringPiSetup();

pinMode(LED,OUTPUT);

for (;;){

printf(“LED ACCESO\n”);digitalWrite(LED,HIGH);delay(1000);

printf(“LED spento\n”);digitalWrite(LED,LOW);delay(1000);

}return 0;

}

gcc -Wall -o led led.c -lwiringPi

Setup di wiringPi

wiringPiSetup();(usa la numerazione semplificata, 11 = 0)

wiringPiSetupGpio();(usa la numerazione Broadcom, 11 = 17)

… ce ne sono altre meno importanti (vedi sito).

Tabella assegnazione pin di wiringPi

BOARDBCM BCM

Rileviamo un pulsante

Rileviamo un pulsanteimport RPi.GPIO as GPIO

import time

GPIO.setmode(GPIO.BCM)

GPIO.setup(18, GPIO.IN, pull_up_down=GPIO.PUD_UP)

while True:

input_state = GPIO.input(18)

if input_state == 0: #false se si usa v.3

print('Pulsante premuto!')

time.sleep(0.2)

pull_up_down è il comando per assegnare il tipo di input.

GPIO.PUD_UP indica un input quando va a massa (valore 0).

GPIO.PUD_DOWN indica un input quando va in tensione (valore 1).

Utilizziamo MONO e C#

apt-get install mono-complete

apt-get install monodevelop

apt-get install gtk-sharp2

Utilizzare Java

http://pi4j.com(utilizza http://wiringpi.com)

- curl -s get.pi4j.com | sudo bashquesto scarica e installa pi4j aggiungendo il repository e la chiave PGP pubblica.

Utilizzare Lazarus (Free Pascal)

- apt-get install fpc- apt-get install lazarus

Esempio di shield: Pibrella

Esempio di shield: Pibrella

- apt-get install python-pip- pip install pibrella

- git clone http://github.com/pimoroni/pibrella- cd pibrella/example- python test.py

Infine lasciamo traccia di noi...

http://rastrack.co.uk/

E’ una mappa nel mondo della vostra RPI, se vi registrate potete lasciare una traccia che fate parte della comunità...

...l’avventura inizia adesso...

CIAO