Abbiamo introdotto il led fisico e descritto la classe LED e il suo costruttore nella prima parte della lezione.
Sempre nella prima parte è stato, inoltre, realizzato un programma Hello World per effettuare il blink o lampeggio del led.
Ora vedremo altri esempi di codice per controllare un led e analizzeremo ulteriori metodi della libreria GPIOZero.
GPIO current sink
Facendo ancora riferimento ala prima parte della lezione, in essa abbiamo cablato il led in modo che la corrente venisse fornita dal pin GPIO 24 e attraversasse il led verso massa (pin 6).
In questo scenario si dice che il GPIO 24 è current source cioè fornisce corrente.
I GPIO del Raspberry Pi possono anche operare in modalità current sink ovvero assorbire corrente.
Hello World: current sink
La figura visualizza i collegamenti necessari per pilotare il led con il GPIO in modalità current sink.
Seguendo la figura effettuare i seguenti collegamenti:
- Collegare con un filo (il colore non è importante) il catodo del led con il piedino GPIO 24 che coincide con il pin fisico numero 18.
- Collegare l’anodo del led con un piedino o reoforo del resistore da 220 Omh.
- Collegare il reoforo libero del resistore con VCC che è presente sul piedino numero 1 del Raspberry Pi.
Quindi, in questo caso, la corrente che alimenta il led è fornita dal pin 1 e assorbita dal GPIO 24 (current sink) mentre nello schema di collegamento precedente la corrente è fornita dal GPIO 24 e assorbita dal pin di massa numero 6 (current source).
In questa modalità il codice di controllo è il seguente
from GPIOZero import LED
from time import sleep
print("Inizializzazione Led")
led = LED(24, active_high=False)
print("Inizio lampeggio Led")
while True:
print("Led Acceso")
led.on()
sleep(1)
print("Led Spento")
led.off()
sleep(1)
Come è facile notare, il codice è identico a quello del caso precedente tranne per il modo in cui l’oggetto led è stato creato.
In questo caso è stato usato il valore False per il parametro active_high del costruttore. Questo parametro modifica il funzionamento interno dei metodi on() e off() ma ne lascia inalterata l’interfaccia di programmazione.
Lampeggio con il metodo toggle()
L’esempio Hello World o lampeggio del led è concepito utilizzando i metodi on() e off() per dimostrarne il funzionamento. Tuttavia la libreria GPIOZero offre altri metodi per raggiungere lo stesso scopo.
Il metodo toggle(), quando invocato, inverte lo stato del led, accendendolo se spento e spegnendolo se acceso.
Quindi il codice Hello World può essere riscritto in maniera più compatta in questo modo:
from GPIOZero import LED
from time import sleep
print("Inizializzazione Led")
led = LED(24)
print("Inizio lampeggio Led")
while True:
led.toggle()
sleep(1)
Il metodo blink()
La classe LED mette a disposizione il metodo blink() che assolve il compito di far lampeggiare il led. Tuttavia, per utilizzare il metodo blinkl(), è necessario apportare alcune modifiche al codice precedente:
- Rimuovere il ciclo while infinito.
- Sostituire toggle() con blink().
- Sostituire sleep() con pause().
Ecco a seguire come apparirà il codice a valle delle variazioni appena descritte.
from GPIOZero import LED
from signal import pause
print("Inizializzazione Led")
led = LED(24)
print("Inizio lampeggio Led")
led.blink()
pause()
Il metodo pause() permette di collocare l’esecuzione del flusso principale in pausa per un periodo indeterminato.
Ciò è necessario in quanto il metodo blink(), quando invocato, crea un thread separato di esecuzione e restituisce immediatamente il controllo al flusso principale. Quindi, se non fosse presente il metodo pause(), il programma terminerebbe subito ed il led si spegnerebbe.
Esistono vari modi per far lampeggiare un led ma, tramite l’uso del metodo blink(), il codice risulta particolarmente compatto.
Conclusioni
L'ultimo esempio mette in evidenza, in termini di espressività e densità di codice, le potenzialità della libreria GPIOZero.
Abbiamo esplorato ulteriori metodi che la classe LED mette a disposizione per controllare un led, descritto due concetti fondamentali, ovvero il current sink e current source, nonché descritto l'uso del metodo toggle(), quindi analizzato in dettaglio il metodo blink() e tutti i suoi parametri di chiamata.
Nella terza e ultima parte di questa lezione, che sarà pubblicata domani, andremo a completare l'analisi della classe LED.