🔘 Botão de Pressão
Ler entradas digitais com pull-up interno. Detetar pressão e libertação do botão com eventos GPIO. Componentes: 4× Tact Switch.
Material necessário
- 1× Botão de pressão (Tact Switch)
- 1× LED + resistência 220Ω (opcional)
- Fios jumper e breadboard
Circuito
Botão pino A → GPIO 17 (BCM)
Botão pino B → GND (pino 9)
O RPi tem resistências pull-up internas em todos os pinos GPIO. Ao usar
PUD_UP, o pino lê HIGH quando o botão está solto e LOW quando premido — sem resistência externa necessária.Exercício 1 — Ler botão simples
Python · botao_simples.py
import RPi.GPIO as GPIO import time BTN = 17 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) # Entrada com pull-up interno ativado GPIO.setup(BTN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: estado = GPIO.input(BTN) if estado == GPIO.LOW: print("Botão PREMIDO") else: print("Botão SOLTO ", end="\r") time.sleep(0.1) except KeyboardInterrupt: GPIO.cleanup()
Exercício 2 — Botão controla LED
Python · botao_led.py
import RPi.GPIO as GPIO import time BTN = 17 LED = 18 GPIO.setmode(GPIO.BCM) GPIO.setwarnings(False) GPIO.setup(BTN, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(LED, GPIO.OUT) try: while True: if GPIO.input(BTN) == GPIO.LOW: GPIO.output(LED, GPIO.HIGH) else: GPIO.output(LED, GPIO.LOW) time.sleep(0.02) except KeyboardInterrupt: GPIO.cleanup()
Exercício 3 — Toggle com eventos
Python · botao_toggle.py
import RPi.GPIO as GPIO BTN = 17 LED = 18 estado_led = False GPIO.setmode(GPIO.BCM) GPIO.setup(BTN, GPIO.IN, pull_up_down=GPIO.PUD_UP) GPIO.setup(LED, GPIO.OUT) def toggle(channel): global estado_led estado_led = not estado_led GPIO.output(LED, estado_led) print(f"LED: {'ON' if estado_led else 'OFF'}") # Detetar flanco descendente (soltura) com debounce 200ms GPIO.add_event_detect(BTN, GPIO.FALLING, callback=toggle, bouncetime=200) input("Prima ENTER para sair\n") GPIO.cleanup()