04 GPIO pt2
04 GPIO pt2
Programmazione
Raspberry Pi
GPIO – parte 2
Raspberry Pi - GPIO
Interrupt VS Polling
• Un interrupt serve proprio a segnalare una variazione di questo tipo, da HIGH a LOW si parla di
FALLING (caduta) mentre al contrario da LOW a HIGH si parla di RISING (salita)
• Si tratterà quindi di dire al nostro programma di attendere che si verifichi un tale evento
tramite la funzione GPIO.wait_for_edge(PIN, EDGE)
Raspberry Pi - GPIO
• Un interrupt permette di rilevare una transizione di stato che avviene su un pin della
GPIO, su Raspberry Pi qualsiasi porta GPIO programmabile può essere utilizzata come
interrupt a patto che venga dichiarata come GPIO di input
• GPIO.add_event_detect(channel, trigger) assegna ad una determinata GPIO
specificata nel parametro channel l’interrupt a cui deve reagire, infatti trigger può
essere GPIO.RISING, GPIO.FALLING oppure GPIO.BOTH
• GPIO.event_detected(channel) se utilizzata all’interno di un loop segnala tutti gli eventi
del tipo trigger assegnato per quel channel e non vengono persi neanche se la CPU sta
svolgendo altri compiti tuttavia la gestione tramite callback è migliore
• GPIO.remove_event_detect(channel) bisogna ricordarsi di eliminare l’evento assegnato
a quel determinato channel PRIMA di eseguire il cleanup delle GPIO
Raspberry Pi - GPIO
Importiamo i moduli necessari,
«signal» è necessario per gestire
correttamente il CRTL+C dell’utente
• Possiamo utilizzare questo metodo per far eseguire a thread separati la gestione di due
led per esempio
Raspberry Pi - GPIO
Definisco la funzione che verrà eseguita nel Thread. La funzione accetta
come input l’indice del led e termina quando la variabile globale running
diventa false
Il programma principale non deve fare più niente, fanno tutto i Thread! Quindi gli dico
di aspettare che l’utente prema invio.
• Il PWM è spesso utilizzato nell’ambito dell’automazione per il controllo dei motori, per
controllare led o altri dispositivi elettronici
• Gli output digitali possono assumere soltanto due valori (HIGH/LOW) e quindi led e altri
dispositivi collegati possono essere solo accesi o spenti
• Attraverso il PWM possiamo simulare la variazione del livello
di energia, ad ogni istante di tempo l’output digitale sarà
sempre HIGH o LOW ma all’interno di un periodo (definito
come il tempo tra due impulsi consecutivi) è possibile definire
per quanto tempo il segnale dovrà restare alto
• Il duty cycle è quindi il rapporto tra il tempo in cui il segnale
rimarrà alto rispetto alla durata totale e la durata del periodo
T è definita come l’inverso della frequenza f
• Un duty cycle del 50% per esempio indica un’onda quadra che
resterà alta per la metà del periodo
Raspberry Pi - GPIO
Inizializziamo un segnale PWM sulla
GPIO 12 che abbia una frequenza pari
a 100Hz
E poi lo decrementiamo da 95 a 0 a
ritroso togliendo -5 ogni volta
Esercizio
• Visualizzare le lettere del proprio nome in sequenza una alla volta e tutte di colore diverso
• Definire una funzione che generi casualmente un colore in formato RGB invece che impostare
un colore fisso per ogni lettera
Raspberry Pi - GPIO
Per utilizzare randint in precedenza all’inizio
del file avevo già importato
«from random import randint»
Raspberry Pi - GPIO
La matrice di led della Sense Hat è
numerata come in figura dove x rappresenta
la colonna e y la riga
• Visualizzare i dati di temperatura, pressione e umidità in un testo scorrevole sulla matrice led
• In ultimo la scheda Sense Hat dispone anche di un joystick che può rilevare le 4 direzioni
classiche rappresentate anche dalle frecce che ci sono sulla tastiera. Il click del joystick è invece
analogo al click del tasto invio sulla tastiera.
• Sulla Sense Hat emulata infatti il joystick è rappresentato proprio da questi simboli
• In base a quale direzione viene selezionata con il joystick visualizzare la lettera corrispondente
sulla matrice led, soltanto quando il tasto viene premuto