Raspberry Pi, le basi: pulsanti. #9


Informatica / giovedì, Aprile 30th, 2020

Nona puntata! Caspita, per essere delle basi, ce ne sono di cosette da dire, non trovi? Che dici, parliamo di pulsanti?

Nelle puntate Precedenti…

  1. RaspberryPi, le basi: Cos’è e cosa non è. #1 
  2. RaspberryPi, le basi: Sistemi operativi ed installazione. #2 
  3. RaspberryPi, le basi: post installazione. #3 
  4. RaspberryPi, le basi: i software. #4 
  5. RaspberryPi, le basi: Comandi e file utili #5 
  6. RaspberryPi, le basi: accesso remoto al Desktop. #6 
  7. RaspberryPi, le basi: sicurezza informatica contro gli hacker. #7 
  8. 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; in pratica può svoltare le sorti dell’umanità ed il tuo Raspberry Pi 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

from gpiozero import Button

decidiamo su che porta GPIO collegare il nostro pulsante

pulsante = Button(21)

Ok, possiamo gestire pulsante come vogliamo, sfruttando python.

Per avviare lo script sarà sufficiente scrivere python3 off.py.

Pulsante di spegnimento Raspberry Pi

Ho notato che molti nuovi utenti di Raspberry Pi, si chiedono come creare un pulsante per spegnere correttamente il Raspberry Pi quindi vediamo come fare.

Creiamo il nostro script off.py.

Iniziamo spiegando al sistema come interpretarlo.

#!/usr/bin/env python3

Importiamo Button dalla libreria gpiozero.

from gpiozero import Button

importiamo subprocess per eseguire i comandi eseguibili da shell.

from subprocess import check_call

importiamo la pausa.

from signal import pause

creiamo una routine in cui possiamo mettere quello che preferiamo, in questo caso lo spegnimento corretto del Raspberry Pi tramite il comando da shell “sudo poweroff”.

def shutdown():
    check_call(['sudo', 'poweroff'])

Spieghiamo che vogliamo lo spegnimento solo dopo averlo premuto 2 secondi, per evitare spegnimenti accidentali.

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

@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 Raspberry Pi spento.

Riavviare e pregare testare, in caso di errori, leggiamo il log con

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 !