Cercando sul web ho trovato alcuni progetti relativi a un pulsante per il riavvio e lo spegnimento del Raspberry
Di uno in particolare ho utilizzato le indicazioni con poche variazioni:
Per spegnere un Raspberry “in modo pulito” si deve dare il comando: 
‘sudo shutdown -h now’
Non rischieremo di corrompere il file system 
L’idea è di utilizzare un pulsante con duplice funzione:
 
Pressione breve (< 3 s) per innescare lo shutdown   
Pressione lunga (>= 3 s) per innescare il reboot 
Feedback visivo tramite un led:
Tre lampeggi veloci nel caso di pressione breve (< 3 s): shutdown (spegnimento)
Dieci lampeggi veloci nel caso di pressione lunga (>= 3 s): reboot (riavvio)
Circuito:
 
Collegare un LED con in serie R = 330 Ω tra un pin GPIO (da configurare via software come uscita) e massa
Collegare un pulsante normalmente aperto tra un altro pin GPIO (da configurare via software come ingresso) e massa
Consiglio di collegare due pulsanti in serie da premere contemporaneamente per maggior sicurezza
Nel mio caso Led su GPIO 13 e pulsante (o pulsanti) su GPIO 21
Sia Python che RPi.GPIO sono già installati su Raspbian
Script Python:
import RPi.GPIO as GPIO
import time
import os
def blink(channel, count = 1, timeHigh = 1000, timeLow = 1000):
    """Blink count times, timeHigh milliseconds high, timeLow milliseconds low."""
    if count <= 0:
         return
 
    GPIO.output(channel, GPIO.HIGH)
    time.sleep(timeHigh / 1000.0)
    GPIO.output(channel, GPIO.LOW)
 
    for i in range(count - 1):
        time.sleep(timeLow / 1000.0)
        GPIO.output(channel, GPIO.HIGH)
        time.sleep(timeHigh / 1000.0)
        GPIO.output(channel, GPIO.LOW)
led = 13
button = 21
# Init GPIO
GPIO.setwarnings(False)       ## disabilita avviso di errore in quanto uso la stessa uscita GPIO del  led in altro programma
GPIO.setmode(GPIO.BCM)
GPIO.setup(led, GPIO.OUT)
GPIO.setup(button, GPIO.IN, pull_up_down = GPIO.PUD_UP)
GPIO.wait_for_edge(button, GPIO.FALLING)
channel = GPIO.wait_for_edge(button, GPIO.RISING, timeout = 3000)
if channel is None:
    blink(led, 10, 100,200)
    print "Reboot"
    os.system("/sbin/shutdown -r now")
                             
else:
    blink(led, 3, 100, 200)
    print "Shutdown"
    os.system("/sbin/shutdown -h now")
 
GPIO.cleanup()
-------------------------------------------------------------------------------
Sul pin GPIO "button", viene abilitato il circuito di pull-up interno  
(istruzione GPIO.setup(button, GPIO.IN, pull_up_down = GPIO.PUD_UP)) 
La funzione utilizzata per monitorare il pulsante è GPIO.wait_for_edge(). 
Questa è una funzione bloccante, non consuma risorse di sistema e rimane in attesa sul pin GPIO "button" 
fino a che non viene rilevato un fronte in discesa (1 -> 0), (pressione del pulsante) 
Successivamente si rimane in attesa per un periodo massimo di tre secondi di un fronte in salita (0 -> 1) 
(rilascio del pulsante) con l’istruzione GPIO.wait_for_edge(button, GPIO.RISING, timeout = 3000) 
Se si esce perché il fronte in salita è stato rilevato, significa che la pressione del pulsante è durata meno di 3 secondi, e quindi si opta per lo shutdown, altrimenti si esce perché sono passati 3 secondi senza che il pulsante sia stato rilasciato, e quindi si opta per il reboot
La funzione blink(), definita all’inizio dello script, si occupa di notificare all’utente il riconoscimento della pressione del pulsante:
Tre lampeggi veloci nel caso di pressione breve (< 3 s): shutdown (spegnimento)
Dieci lampeggi veloci nel caso di pressione lunga (>= 3 s): reboot (riavvio)
La funzione os.system() serve per lanciare l’esecuzione di un comando utilizzando la shell di sistema
In questo caso i comandi da lanciare sono:
/sbin/shutdown -h now        per lo shutdown
/sbin/shutdown -r now        per il riavvio.
Per salvare lo script sul Raspberry Pi digitare:
nano shutPi.py
Inserire il testo dello script 
Verificare che lo script sia stato salvato col nome /home/pi/shutPi.py.
Collaudo:
Per eseguire lo script dare il comando:
sudo python /home/pi/shutPi.py
Alla pressione del pulsante, dopo il lampeggio del LED e un attimo prima dell’arresto del sistema, 
sul terminale dovrebbe comparire la scritta:
Shutdown quando viene intercettata una pressione breve 
Reboot quando viene intercettata una pressione lunga
Verificare che lo script funzioni
Avvio automatico:
Modificare il file /etc/rc.local:
sudo nano /etc/rc.local
Aggiungere, prima della riga ‘exit 0’:
if [ -f /home/pi/shutPi.py ]; then
    python /home/pi/shutPi.py &
fi
Qui sudo non serve, perché lo script /etc/rc.local viene eseguito già con i privilegi di super utente
La e commerciale (&) in fondo alla seconda linea serve per lanciare il nostro script in background, in modo da non bloccare l’esecuzione di eventuali altre parti del file /etc/rc.local.
Lo script shutPi.py verrà lanciato automaticamente, e in background, ad ogni avvio
 
Per verificare:
ps ax | grep shutPi.py
Lo stesso led può lampeggiare per indicare che il Raspberry è acceso
Nel mio caso un lampo di 100 ms ogni 6 secondi:  Lampeggio Led