Raspberry Pi 101 – GPIO Buttons

Welcome back folks!

Vamos continuar a desbravar as capacidades de nosso Raspbery Pi. Hoje, vamos mostrar a você como realizar a interface de um botão com seu Raspy. Utilizaremos a informação fornecida por uma porta de nosso GPIO para alterar o curso do nosso programa, tornando nossas aplicações mais interessantes e divertidas.

Os materiais que você vai precisar são:

– 01 Raspberry Pi modelo A ou B (estou usando o B);

– 01 LED de qualquer cor;

– 01 Resistor de 470 Ohms;

– 02 Push Buttons

– Alguns jumpers e uma protoboard.

Deu para perceber que iremos precisar do hardware que usamos em nosso primeiro tutorial, o LED e o Resistor. Optei por manter as conexões para aproveitarmos o trabalho já realizado e um pouco do código que já testamos anteriormente. Nosso hardware será conectado da seguinte forma:

00_GPIO_Button

INSERIR ESQUEMÁTICO

O botão conectado ao pino 22 será responsável por parar a execução de nosso programa. O botão conectado ao pino 8 será o responsável por alterar o comportamento de nossa saída, fazendo com que o LED pisque. Repare que não estou utilizando resistores de Pull-Up junto aos botões, isso porque  o Raspy tem resistores de Pull-Up (e Pull-Down) disponíveis internamente e passíveis de serem configurados via software, através da biblioteca RPi.GPIO.

ATENÇÃO: certifique-se de que não rodou nenhum software utilizando as GPIOs antes de montar o hardware. Se não tem certeza se deixou alguma das portas com sinais digitais ativos, abra o IDLE (IDE Python) e execute os dois comandos abaixo. Isso assegura que não ocorra nenhum curto-circuito durante a montagem do hardware. 😉

import RPi.GPIO as GPIO
GPIO.cleanup()

Muito bem, tudo conectado it’s time to code!

Mais uma vez recomendo que utilize o Spyder, como IDE para desenvolver suas aplicações. Crie um novo arquivo e nomeie helloGPIO102.py (não se esqueça da extensão .py).  Na primeira sessão do seu código fonte deve constar a documentação do seu projeto:

"""
0. Documentation Section
helloGPIO102.py
Toggle LED using button interface
Authors: Bruno Godoi Eilliar
Date: March 31, 2015.
"""

Na sessão 1 importamos as bibliotecas que iremos utilizar

# 1. Pre-Processor Directives Section
import RPi.GPIO as GPIO
import time

Na sessão 2 realizamos as declarações das variáveis que vamos utilizar e configuramos as GPIOs correspondentes ao LED e aos dois botões de nosso projeto (sw e sw_stop).

# 2. Declarations Section
sw = 8
sw_stop = 22
led = 18
GPIO.setmode(GPIO.BCM)    # Set GPIO numeration label
GPIO.setup(led, GPIO.OUT)    # set pin led as digital output
GPIO.setup(sw, GPIO.IN, pull_up_down = GPIO.PUD_UP)    # set pin sw as digital input and turn on pull-up internal resistor
GPIO.setup(sw_stop, GPIO.IN, pull_up_down = GPIO.PUD_UP)    # set pin sw_stop as digital input and turn on pull-up internal resistor

Em seguida vamos definir as funções principal e auxiliar que serão utilizadas em nossa aplicação. Primeiro definimos a função ToggleLED() responsável por fazer com que o LED pisque uma vez com um intervalo definido entre os estados. Assim, podemos utilizar o código do post anterior como base e fazer algumas modificações:

def ToggleLED(delay, pin):<br />
    """
    Function to blink LED once, connected at pin
    """
    GPIO.output(pin, True)    # Turn ON the LED
    time.sleep(delay)    # Delay for a few seconds
    GPIO.output(pin, False)    # Turn OFF the LED
    time.sleep(delay)    # Delay for a few seconds

Por fim, precisamos definir o comportamento da rotina principal do programa. Queremos o seguinte comportamento:

– Se o sw_stop for pressionado, o programa termina e limpa as GPIOs utilizadas.

– Se o sw for pressionado, o LED irá piscar uma vez, com intervalo de 0.5 segundos entre cada estado. Caso contrário, o LED ficará apagado.

O que temos acima é uma descrição do comportamento que desejamos para nosso sistema. Em algumas literaturas você pode encontrar com o nome de pseudo-code e é tido como fundamental no design de sua aplicação para evitar erros durante a fase de desenvolvimento do projeto. Recomendo que sempre estruture seus projetos em pseudo-code antes de começar a programar, isso evita muito retrabalho durante o desenvolvimento do código. 😉

Agora vamos traduzir isso para código em Python:

"""
Main subroutine
"""
print ("Running program...")
print ("To finish the program press the stop button on the breadboard.")
while True:
    stop_flag = GPIO.input(sw_stop)    # Read input
    if stop_flag == False:    # Button Pressed
        break    # Jump off while loop
    input_state = GPIO.input(sw)    # Read input
    if input_state == False:    # Button pressed
        print ("Button Pressed")
        ToggleLED(.5, led)
        time.sleep(.2)
print ("Stopping execution...")
GPIO.cleanup()

 

 Voilà! Eis sua primeira aplicação utilizando Digital Inputs em seu Raspberry Pi! Para rodar basta apertar F5 e observar as mensagens na sua tela.

Ficou alguma dúvida ou desenvolveu algo interessante com seu Raspy? Comente e vamos fazer o possível para ajudar.

Não se esqueçam de espalhar a palavra! Vejo vocês no próximo post, onde vamos fazer a interface do sensor de distância HC-SR04 e falar sobre como plotar gráficos em Python!

😉

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

w

Conectando a %s