Nona puntata! Caspita, per essere delle basi, ce ne sono di cosette da dire, non trovi? Che dici, parliamo di pulsanti?
Nelle puntate Precedenti…
- RaspberryPi, le basi: Cos’è e cosa non è. #1
- RaspberryPi, le basi: Sistemi operativi ed installazione. #2
- RaspberryPi, le basi: post installazione. #3
- RaspberryPi, le basi: i software. #4
- RaspberryPi, le basi: Comandi e file utili #5
- RaspberryPi, le basi: accesso remoto al Desktop. #6
- RaspberryPi, le basi: sicurezza informatica contro gli hacker. #7
- RaspberryPi, le basi: le porte GPIO. #8
GPIOZero ed i pulsanti
Nelle scorse puntate abbiamo posato le basi per creare un dispositivo in grado di soggiogare l’umanità grazie ad un Raspberry ed una banana; d’altronde avrai letto come la NASA si è fatta rubare dei dati, da un RaspberryPi.
Ricordalo, il dispositivo più pericoloso al mondo, è il temibile pulsante!
Si pulsante, certo puoi usare una banana ed un sensore capacitivo, ma il concetto è lo stesso. Un pulsante può lanciare missili e sterminare l’umanità, può donare fondi per salvare umani e non, può offrirci un caffé a noi editori di MoreWare, donandoci un bonus di +5 in destrezza; in pratica può svoltare le sorti dell’umanità ed il tuo RaspberryPi ha una sacco di porte GPIO a cui collegarli…
Il pulsante non fa altro che mandare un segnale alla porta GPIO da te scelta, e questo segnale grazie alle librerie GPIOZero è facilmente gestibile tramite Python.
Partiamo con nostro editor preferito, io uso nano, ma può usare MU o cose più tecniche, alla fine lo script python è pure sempre un file di testo; ecco magari eviterei notepad o write di windows, il loro comando fine riga non sempre va d’accordo con linux.
Dopo aver creato il nostro script, chiamato fantasiosamente, off.py
, indovina cosa farà?
Attenzione: ricorda che python usa l’identazione. Ciò significa che, se dimentichi un spazietto per strada, tutto di bloccherà. Lo so, anche io detesto questa cosa.
Importiamo il pulsante dalla libreria
1 |
from gpiozero import Button |
decidiamo su che porta GPIO collegare il nostro pulsante
1 |
pulsante = Button(21) |
Ok, possiamo gestire pulsante come vogliamo, sfruttando python.
Per avviare lo script sarà sufficiente scrivere python3 off.py
.
Pulsante di spergnimento RaspberryPi
Ho notato che molti nuovi utenti di RaspberryPi, si chiedono come creare un pulsante per spegnere correttamente il RaspberryPi quindi vediamo come fare.
Creiamo il nostro script off.py
.
Iniziamo spiegando al sistema come interpretarlo.
1 |
#!/usr/bin/env python3 |
Importiamo Button dalla libreria gpiozero.
1 |
from gpiozero import Button |
importiamo subprocess per eseguire i comandi eseguibili da shell.
1 |
from subprocess import check_call |
importiamo la pausa.
1 |
from signal import pause |
creiamo una routine in cui possiamo mettere quello che preferiamo, in questo caso lo spegnimento corretto del RaspberryPi tramite il comando da shell “sudo poweroff”.
1 2 |
def shutdown(): check_call(['sudo', 'poweroff']) |
Spieghiamo che vogliamo lo spegnimento solo dopo averlo premuto 2 secondi, per evitare spegnimenti accidentali.
1 2 3 |
shutdown_btn = Button(21, hold_time=2) shutdown_btn.when_held = shutdown pause() |
La documentazione ufficiale offre altri spunti di utilizzo, che si possono adattare alle più svariate esigenze.
Ovviamente, lo script dovrà avviarsi in automatico quindi aggiungiamolo tramite
sudo crontab -e
aggiungendo alla fine
1 |
@reboot sudo /usr/bin/python3 /home/pi/off.py & > /var/log/miolog.log 2>&1 |
eseguendo crontab -e preceduto da sudo avremmo i diritti di root. Questo è il metodo facile, il metodo consigliato è l’uso di systemctl.
Colleghiamo il pulsante al pin GPIO 21 e GND, a RaspberryPi spento.
Riavviare e pregare testare, in caso di errori, leggiamo il log con
1 |
sudo tail /var/log/miolog.log |
Ti invito a leggere la descrizione precisa con tutti i parametri della classe Button (pulsanti), la troverai molto interessante.
Essendo una rubrica sulle basi, direi che può bastare per oggi altrimenti poi uno si annoia, si addormenta, preme il pulsante ed esplode la casa…
Ci vediamo alla prossima puntata di RaspberryPi, le basi !