raspberry pi per tutti (workshop presso warehouse coworking pesaro)
TRANSCRIPT
RASPBERRY PIPER TUTTI
13 dicembre 2014 - Warehouse Coworking Factory - Pesaro
Chi sono
Gabriele Guizzardihttp://[email protected]
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
Schema elettrico
Se volete studiare lo schema elettrico:
http://www.raspberrypi.org/documentation/hardware/raspberrypi/schematics/README.md
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...
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 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