Pulsante di spegnimento per Raspberry Pi di Filippo Rigotto Tra le tante cose che il Raspberry Pi possiede ne manca una, che molti considereranno essenziale: il pulsante per spegnerlo (ed eventualmente riaccenderlo, senza dover togliere il cavo di alimentazione). Questo si può facilmente realizzare sfruttando le caratteristiche native del connettore GPIO (General Purpose Input/Output) presente sulla scheda. Hardware necessario: un pulsante (o switch momentaneo) di tipo normalmente aperto, due fili e due header tipo femmina. Con l’ausilio di uno stagnatore saldare il tutto, in modo che risulti come nella foto sottostante (puramente indicativa, l’importante è che i contatti siano giusti). Con questa configurazione occorre collegare un pin generico e un pin GND (massa, polo negativo); la resistenza di pull-up (a 3.3v) è omessa perché integrata nella scheda (si abilita da software). Software necessario: uno script in Python che monitora il pin del connettore GPIO connesso al pulsante e che spegne il pc quando ne rileva la pressione. Usa la libreria RPi.GPIO già installata nel sistema. E’ stato scelto di usare il pin GPIO3 poiché possiede come opposto una massa e perché permette di far ripartire il pc quando questo è spento (cablato così dai produttori), in questo modo assolve le due funzioni di accendere e spegnere il pc. Lo script inizializza la connessione e imposta il pin selezionato come input, attivando la resistenza di pull-up. Alla pressione del pulsante si avrà un passaggio dal livello logico alto (a cui si trovava il pin prima grazie alla resistenza) al livello logico basso (perché il pulsante chiude il collegamento tra il pin scelto e la massa). L’evento da registrare sarà quindi un fronte di discesa (falling edge), evitando di registrare ulteriori variazioni di stato per i successivi 500mS (dovuto a imprecisioni di costruzione di ogni pulsante). Codice - shudown.py import time, os, RPi.GPIO as GPIO pin = 3 GPIO.setmode(GPIO.BCM) GPIO.setup(pin, GPIO.IN, pull_up_down = GPIO.PUD_UP) def interr(channel): os.system("sudo shutdown -h now") GPIO.add_event_detect(pin, GPIO.FALLING, callback = interr, bouncetime = 500) while 1: time.sleep(1) Spazi e tabulazioni SONO IMPORTANTI in Python, scrivere tutto allineato a destra genera errori. Il pin si può cambiare, scrivere al posto di 3 la fine del nome del pin (ad es. per GPIO7 usare pin = 7). NB: Il nome del pin NON coincide al numero del pin nella numerazione classica descritta in foto! • Dopo aver salvato il file in /home/pi come shutdown.py (si possono cambiare il percorso e il nome a patto di modificare coerentemente i comandi a seguito), non resta che renderlo eseguibile da terminale digitando sudo chmod 777 /home/pi/shutdown.py. • Per avviarlo digitare da terminale sudo python /home/pi/shutdown.py & (l’accesso al connettore GPIO richiede permessi superiori e lo script deve eseguirsi in background); • Per avviarlo automaticamente al boot del sistema usare cron: da terminale sudo crontab –e, aggiungere una riga a fine file: @reboot sudo python /home/pi/shutdown.py & poi salvare e chiudere con Ctrl+X, Y (oppure S), Invio. Riavviare con sudo reboot per l’avvio dello script.