Hoje iremos construir um pequeno circuito que permite executar comandos no Raspberry Pi para fazer o que quisermos quando um botão é premido (no nosso caso para iniciar o processo de shutdown). Este circuito é bastante simples e requer apenas uma resistência e um botão. Foram acrescentados alguns LEDs para o Raspberry PI nos poder dar feedback sem que tenhamos que ter um monitor ou estarmos ligados remotamente.
Esquemático
Componentes (BOM)
Circuito:
- 1x Resistência de 10K Ohms(R1)
- 1x Botão de Pressão (SW1)
- 1x Resistência de 1K Ohms (R4)
- 1x Resistência de 220 Ohms (R3)
- 1x Resistência de 680 Ohms (R2)
- 1x LED Vermelho de 3mm
- 1x LED Azul de 3mm
- 1x LED Amarelo de 3mm
Pin-out dos IC/Componentes
O Pinout do Raspberry PI Model B Rev. 2 é o seguinte:
O Pinout do Raspberry PI 2 Model B é o seguinte:
Código
Para o que o circuito funcione teremos que executar o “programa” que dará a instrução de shutdown quando detetar que o botão foi primido.
O sistema usado para se correr o código apresentado foi o raspbian jessie de 2015-09-24 e foi usado um Raspberry PI 2. Pode ser descarregado daqui.
Se quiserem usar um script para testar apenas se o botão e os LEDs estão a funcionar:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
buttonPin = 30
bluePin = 28
yellowPin = 29
redPin = 31
GPIO.setmode(GPIO.BCM)
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(bluePin, GPIO.OUT)
GPIO.setup(yellowPin, GPIO.OUT)
GPIO.setup(redPin, GPIO.OUT)
def Button(channel):
print 'button pressed!'
GPIO.add_event_detect(buttonPin, GPIO.FALLING, callback=Button,
bouncetime=2000)
try:
while 1:
GPIO.output(bluePin, 1)
time.sleep(1)
GPIO.output(bluePin, 0)
GPIO.output(yellowPin, 1)
time.sleep(1)
GPIO.output(yellowPin, 0)
GPIO.output(redPin, 1)
time.sleep(1)
GPIO.output(redPin, 0)
except KeyboardInterrupt:
# If CTRL+C is pressed, exit cleanly:
GPIO.cleanup() # cleanup all GPIO
O programa para fazer o shutdown deve ser criado com o nome “/home/pi/gpioshutdown.py”:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import RPi.GPIO as GPIO
import time
import os
buttonPin = 30
bluePin = 28
yellowPin = 29
redPin = 31
def Int_shutdown(channel):
# shutdown our Raspberry Pi
GPIO.output(bluePin, 1)
os.system('sudo shutdown -h now')
GPIO.setmode(GPIO.BCM)
GPIO.setup(buttonPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.setup(bluePin, GPIO.OUT)
GPIO.setup(yellowPin, GPIO.OUT)
GPIO.setup(redPin, GPIO.OUT)
GPIO.add_event_detect(buttonPin, GPIO.FALLING, callback=Int_shutdown,
bouncetime=2000)
GPIO.output(yellowPin, 1)
while 1:
time.sleep(1)
Nota: se este for colocado noutro directório, terá que se ajustar o caminho no passo seguinte.
O script foi parametrizado para usar os seguintes GPIO:
- LED amarelo: 29
- LED vermelho: 31
- LED azul: 28
- Botão: 30
Esta configuração funciona na placa Raspberry PI rev 2 que tem a segunda fila de pinos (header).
Para se usar os pinos do header principal deve ser feita a seguinte alteração:
buttonPin = 17
bluePin = 2
yellowPin = 3
redPin = 4
E estes reflectem os pinos do header principal.
Para finalizar, e para que seja ativado, é necessário editar o ficheiro /etc/rc.local
e acrescentar a seguinte linha, antes do exit 0
:
python /home/pi/gpioshutdown.py &
Neste momento deverá reiniciar-se o Raspberry Pi.