04 GPIO pt1
04 GPIO pt1
Programmazione
Raspberry Pi
GPIO – parte 1
Raspberry Pi - GPIO
• Tutti i modelli di Raspberry Pi recenti sono dotati di un header da 40 pin di porte GPIO
(General Purpose Input/Output)
• Per sapere di quali porte è dotato il vostro Raspberry Pi basta eseguire il comando «pinout»
da un terminale, fate attenzione che questo comando non può essere utilizzato dal sistema
su macchina virtuale in quanto effettivamente le GPIO non sono presenti
• Ogni pin della GPIO ha uno specifico significato, quelli fondamentali vengono già illustrati
visivamente a terminale
Raspberry Pi - GPIO
Cosa viene visualizzato sul terminale della Raspberry Pi? Numero porta scheda
Fate attenzione!
Ingressi
• Allo stesso modo un pin della GPIO
impostato come pin di ingresso può essere
letto al valore alto HIGH (3.3V) oppure al
valore basso LOW (0V)
SERIALE
• TX – GPIO14 e RX – GPIO15 sono i pin
dedicati alla comunicazione seriale
Raspberry Pi - GPIO
I2C
• Inter Integrated Circuit, è un protocollo
digitale di comunicazione tra circuiti
integrati
• Permette la connessione tra Raspberry Pi e
molti sensori utilizzati nel mondo
dell’automazione, come sensori di
temperatura, ranging sensors (per leggere
una distanza) o sensori di orientamento
(IMU – inertial measurment unit)
• La velocità di comunicazione non è elevata
e quindi sensori che richiedono di essere
letti molto frequente è preferibile che siano
collegati ad una comunicazione SPI
Raspberry Pi - GPIO
I2C
• La comunicazione I2C è costituita da un
classico bus di dati bidirezionale e necessita
di:
1. SDA (Serial DAta) sulla GPIO2 ed
utilizzato per i dati
2. SCL (Serial CLock) sulla GPIO 3 ed
utilizzato per il clock, vista la presenza
di un clock l’I2C è un bus sincrono
3. GND che funge da connessione di
riferimento
4. Vdd ovvero una linea di alimentazione
per i sensori collegati
Raspberry Pi - GPIO
SPI
• Serial Peripheral Interface, è uno standard
per lo scambio dati che sfrutta una
connessione seriale sincrona del tipo
Master-Slave
• I bit vengono trasmessi lungo il bus nello
stesso ordine in cui sono stati inviati e per
questo motivo si parla di comunicazione
«seriale»
• Le operazioni di trasmissione e ricezione
avvengono al tempo stabilito da un clock e
per questo si parla di comunicazione
«sincrona»
Raspberry Pi - GPIO
SPI
• La prima differenza con il protocollo I2C è la
velocità, questo tipo di comunicazione è
molto più veloce e quindi adatta anche a
leggere sensori che acquisiscono dati
aggiornati molto frequentemente, come le
letture di corrente o della posizione di un
motore
• La seconda differenza sta nel fatto che l’SPI
è un bus di tipo full-duplex, ovvero lo
scambio di dati può avvenire
contemporaneamente sia in trasmissione
che in ricezione. Per questo motivo sono
presenti due pin dedicati, MOSI E MISO
Raspberry Pi - GPIO
Linguaggi utilizzabili
• Combinare i due esempi visti per accendere e spegnere un led e per leggere la pressione di un
tasto
• Fare in modo che quanto il tasto viene premuto il led si accenda per un secondo e poi si
spenga
• Mantenere la sintassi del try … except … per gestire correttamente l’uscita dal programma e
pulire la GPIO all’uscita del programma
Raspberry Pi - GPIO
Raspberry Pi - GPIO
Il gioco di Simon
• In Simon, un giocatore vede una serie di luci lampeggiare e deve ricordare lo schema
• Si avvia inizialmente con una sola luce e il giocatore dovrà premere il bottone
corrispondente
• Ogni volta che il giocatore indovina la sequenza si aggiunge una luce casuale allo
schema per rendere il gioco più difficile
• Per generare un numero casuale in Python bisogna usare la libreria random con
import random
• Per generare numero casuale compreso tra due estremi A e B bisogna utilizzare la
funzione random.randint(A,B) in cui A e B sono compresi e possono essere
generati