Abbiamo introdotto il concetto fondamentale di resistenza pull up e resistenza pull down per il corretto utilizzo di un dispositivo di input con il Raspberry Pi nella lezione precedente. In questa lezione vedremo come utilizzare la libreria GPIOZero per leggere lo stato di un pulsante (dispositivo di input) e faremo un'analisi dettagliata della classe Button aiutandoci con esempi pratici in Python.
La classe Button
Il Pulsante (Button) all'interno della libreria GPIOZero appartiene alla classe di dispositivi di Input (DigitalInputDevice) ed è modellato da una semplice interfaccia intuitiva.
Il costruttore della classe ha la seguente sintassi:
Button(pin, \
pull_up=True,\
bounce_time=None,\
hold_time=1,\
hold_repeat=False,\
pin_factory=None)
Andiamo a dettagliare meglio ciò che abbiamo utilizzato.
- pin: parametro obbligatorio di tipo integer, rappresenta il numero del pin in numerazione BCM a cui è collegato il pulsante;
- pull_up: parametro facoltativo di tipo boolean, abilita la resistenza interna di Pull-Up (True - Default) o quella di Pull-Down (False);
- bounce_time: parametro facoltativo di tipo float, evita i rimbalzi software specificando il numero di secondi in cui variazioni dello stato del pulsante vengono ignorate, per default è disabilitato;
- hold_time: parametro facoltativo di tipo float, specifica la durata in secondi della pressione del pulsante dopo la quale viene eseguito l'handler when_held;
- hold_repeat: parametro facoltativo di tipo boolean, se True (Default) ogni hold_time secondi richiama l'handler when_held, se False lo richiama una volta sola;
- pin_factory: parametro facoltativo solo per uso avanzato, permette di specificare un GPIO pin factory differente da quello previsto in GPIOZero.
I metodi più importanti della classe sono i seguenti:
|
Chiamata bloccante che attende la pressione del pulsante o lo scadere del Timeout di tipo float. |
|
Chiamata bloccante che attende il rilascio del pulsante o lo scadere del Timeout di tipo float. |
Gli eventi principali di questa classe sono:
|
Esegue la funzione associata quando il pulsante rimane premuto per hold_time secondi. |
|
Esegue la funzione associata quando il pulsante viene premuto. |
|
Esegue la funzione associata quando il pulsante viene rilasciato. |
Ora metteremo in pratica quanto appreso con alcuni semplici esempi di utilizzo di un pulsante.
Configurazione Pull-Up
Realizziamo i collegamenti del pulsante come in figura.
from gpiozero import Button # linea 1
from time import sleep # linea 2
print("Inizializzazion Pulsante") # linea 4
pulsante = Button(18, pull_up=True) # linea 5
while True: # linea 7
if pulsante.is_pressed: # linea 8
print("Pulsante Premuto!") # linea 9
else: # linea 10
print("Pulsante non Premuto!") # linea 11
sleep(0.5) # linea 12
Questo codice alla linea 5 inizializza il pulsante collegato al GPIO 18 e imposta la resistenza di Pull-Up interna.
Quindi, come si può vedere in figura, l'altro pin del pulsante va collegato al pin GND del Raspberry Pi.
Alla linea 8, leggendo la proprietà di classe is_pressed, possiamo comprendere se il pulsante è premuto o meno. In base al risultato restituito viene stampato un semplice messaggio a schermo.
Configurazione Pull-Down
Realizziamo ora la configurazione con la resistenza di Pull-Down collegando il pulsante come rappresentato in figura.
from gpiozero import Button # linea 1
from time import sleep # linea 2
print("Inizializzazion Pulsante") # linea 4
pulsante = Button(18, pull_up=False) # linea 5
while True: # linea 7
if pulsante.is_pressed: # linea 8
print("Pulsante Premuto!") # linea 9
else: # linea 10
print("Pulsante non Premuto!") # linea 11
sleep(0.5) # linea 12
Il codice è uguale al precedente tranne che per il costruttore alla linea 5. In questo caso pull_up è impostato a False, di fatto ciò va a impostare sul GPIO 18 la resistenza di Pull-Down.
Il funzionamento è sovrapponibile al caso precedente.
Conclusioni
In questa lezione e nella precedente abbiamo appreso i concetti fondamentali e affrontato l'uso della resistenze di Pull-Up e Pull-Down. Abbiamo descritto la classe Button della libreria GPIOZero e abbiamo analizzato alcuni codici di controllo che sfruttano i metodi e gli eventi messi a disposizione dalla classe stessa.
Nella lezione successiva, che sarà pubblicata dopodomani, completeremo l'analisi della classe Button e dei suoi metodi.