Raspberry - Pulsanti ON-OFF - D

Download Report

Transcript Raspberry - Pulsanti ON-OFF - D

Pulsante di accensione e spegnimento
Rasbian Jessie Pixel
IZ1JXP Fabio PASTORINO
IW1ELO Mauro ZUNINO
Premessa
Come tutti ben sanno, la Raspberry Pi non ha un pulsante per lo spegnimento e soprattutto
per l’accensione; diciamo soprattutto perché se per lo spegnimento possiamo
tranquillamente utilizzare i comandi da terminale poweroff o shutdown, per l’accensione
dobbiamo inevitabilmente togliere e ridare alimentazione, cosa non sicuramente
problematica ma decisamente fastidiosa. Con una piccola modifica Hardware e un piccolo
listato in Python è possibile sia accendere la Raspberry che spegnerla. Unico neo, a
differenza di un PC tradizionale, è che dovremo dotarci di due pulsanti (normalmente aperti):
uno per l’accensione e uno per lo spegnimento.
In realtà la Raspberry, visto il consumo irrisorio, è congeniata per rimanere sempre accesa,
ma capita molto spesso di doverla spegnere (ad esempio per programmare la schedina SD)
e che venga volontariamente tolta alimentazione “per fare presto”; niente di più deleteria è
la mancanza di alimentazione improvvisa perché se in quel momento la nostra Raspberry
sta scrivendo sulla schedina SD abbiamo buone probabilità di corromperla.
Pulsante di spegnimento
Il
pulsante di spegnimento (che dovrà essere NO = normalmente aperto) andrà collegato a
due PIN della GPIO; io per comodità ho usato i due paralleli verso le prese USB, che sono
uno la massa (GND) e l’altro il PIN 21 (vedere le figure che seguono); questo perché
abbiamo preferito lasciare la parte a sinistra libera per eventuali schede di espansione come
ad esempio la DV4MEGA.
Tra il PIN 16 e un altro PIN GND della GPIO troverà posto (se si vuole inserirlo) un diodo
LED con il serie una resistenza da 220 ohm. Tale LED ci servirà per capire quando la
Raspberry inizia la procedura di spegnimento (LED Rosso si accende) fino a quando è
definitivamente spenta (LED Rosso si spegne). Può venire molto utile soprattutto nei
contenitori non trasparenti dove non si vede il LED verde lampeggiante che indica che la
Raspberry sta lavorando.
Fatto il piccolo adattamento hardware occorre un listato python che servirà a far partire la
procedura di spegnimento della Raspberry quando i due piedini scelti verranno
cortocircuitati.
Quindi creeremo il file /etc/init.d/buttonoff
$ sudo nano /etc/init.d/buttonoff
ed inseriremo il seguente codice:
#!/usr/bin/python
#Script per la gestione del power off del sistema tramite pulsante
#collegato alla GPIO
#scritto da Fabio PASTORINO IZ1JXP, Mauro ZUNINO IW1ELO
import RPi.GPIO as GPIO
import os
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(21,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.setup(16,GPIO.OUT)
#attendo la pressione del tasto (pin a massa)
GPIO.wait_for_edge(21,GPIO.FALLING)
#accendo il led per confermare l'avvenuta fase di poweroff
GPIO.output(16, True)
os.system("sudo shutdown -h now")
Con CTRL+O
INVIO
coi seguenti comandi:
CTRL+X chiudiamo l’editor e passiamo a dare i permessi al file
sudo chmod 777 /etc/init.d/buttonoff
Proviamo a farlo partire manualmente:
sudo /usr/bin/python /etc/init.d/buttonoff
Il terminale non risponderà con il prompt ma se abbiamo fatto tutti I passaggi sopra indicati,
premendo il tasto di spegnimento, la Raspberry si spegnerà correttamente!
A questo punto non rimarrà altro che fare in modo che questo file python si avvii
automaticamente all’avvio della Raspberry. A tal proposito creiamo un script in /etc/init.d
chiamato button_off.sh:
$ sudo nano /etc/init.d/button_off.sh
Dove all’interno ci inseriremo il seguente codice:
#!/bin/sh
# kFreeBSD do not accept scripts as interpreters, using #!/bin/sh and sourcing.
if [ true != "$INIT_D_SCRIPT_SOURCED" ] ; then
set "$0" "$@"; INIT_D_SCRIPT_SOURCED=true . /lib/init/init-d-script
fi
### BEGIN INIT INFO
# Provides:
button_off.sh
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop:
016
# Short-Description: Script di gestione power off Raspberry
# Description:
This file should be used to construct scripts to be
#
placed in /etc/init.d. This example start a
#
single forking daemon capable of writing a pid
#
file. To get other behavoirs, implemend
#
do_start(), do_stop() or other functions to
#
override the defaults in /lib/init/init-d-script.
### END INIT INFO
# Author: <IZ1JXP Fabio PASTORINO - IW1ELO Mauro ZUNINO>
#
# Please remove the "Author" lines above and replace them
# with your own name if you copy and modify this script.
case "$1" in
start)
start-stop-daemon --start --oknodo \
--pidfile /var/run/buttonoff.pid --background \
--nicelevel -0 --make-pidfile --exec \
/usr/bin/python -- /etc/init.d/buttonoff
echo "servizio buttonoff avviato"
;;
stop)
start-stop-daemon --stop --oknodo --pidfile /var/run/buttonoff.pid
echo "servizio buttonoff fermato"
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 start|stop|restart"
;;
esac
exit 0
Con CTRL+O
INVIO
CTRL+X chiudiamo l’editor
Diamo i permessi al file appena creato:
$ sudo chmod 777 /etc/init.d/button_off.sh
Infine con il potente comando systemctl facciamo in modo che il servizio al reboot della
Raspberry parta in automatico
$ sudo systemctl button_off.sh enable
Se tutto è stato effettuato correttamente al restart della Raspberry il file python buttonoff
sarà operativo e schiacciando il pulsante di stop la Raspberry si spegnerà.
Nel caso in cui si volesse fermare, restartare o far partire da terminale il file buttonoff
occorrerà dare i seguenti comandi:
$ sudo /init.d/button_off.sh stop
(per fermare il servizio)
$ sudo /init.d/button_off.sh restart
(per restartare il servizio)
$ sudo /init.d/button_off.sh start
(per far partire il servizio)
Pulsante di accensione
Per il pulsante di accensione (sempre NO = normalmente aperto) dovremo prendere in
mano il saldatore e fare due piccolissime saldature sul circuito stampato della Raspberry.
Nulla di particolarmente complicato, ma se non avete MAI fatto saldature su schede di
questo tipo vi consigliamo vivamente di affidarvi ad un amico per saldare due fili o un
connettore in una apposita piazzola che a seconda del tipo di Raspberry utilizzata la potete
identificare come segue:
Nel RPi si chiama P6 ed è situato vicino alla porta HDMI.
Nel RPi 2 si chiama RUN ed è situato fra il connettore DISPLAY e il GPIO.
Nel RPi 3 si chiama RUN ed è situato fra il connettore GPIO e la PORTA USB.
Null’altro occorre fare, quando la Raspberry è spenta, con LED Rosso acceso (quindi
presenza di alimentazione), basterà cortocircuitare i piedini indicati mediante il pulsante per
riavviare senza problema la vostra Raspberry.
ATTENZIONE: in realtà questo contatto è stato previsto per effettuare un RESET
HARDWARE, questo significa che quando la Raspberry è in funzione se premete il tasto di
accensione farete un restart della stessa. Questo può venire utile se la Raspberry dovesse
piantarsi e non risponde più ai comandi, ma ribadiamo di fare molta attenzione.
Come scritto all’inizio, questo progetto è stato testato sulla distro Raspbian Jessie Pixel, ma
è verosimile pensare che anche con altre distro possa funzionare, magari con le dovute
modifiche del caso legate al tipo di release installata.
……. 73 de Fabio IZ1JXP
……. 73 de Mauro IW1ELO