Main Content

Circuitos_1

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

Circuitos_3_Schematics

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:

Circuitos_4_Pinout

O Pinout do Raspberry PI 2 Model B é o seguinte:

Circuitos_4_Pinout

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.