🛠 Lire un bouton et afficher dans la console
Objetivos
Leer el estado de un botón pulsador en el GPIO de la Raspberry Pi 3 Model B y mostrar un mensaje en la consola cada vez que se presiona. Aprender a activar la resistencia de pull-up interna (el botón está cableado a GND, lógica activa en nivel bajo) y a evitar el rebote mecánico mediante una temporización por software.
Material
- Raspberry Pi 3 Model B con Raspberry Pi OS Lite
- 1 botón pulsador (touchou)
- Breadboard, cables Dupont
- Terminal SSH o pantalla + teclado en el Pi
- Paquete
libgpiod-utilsinstalado (sudo apt install -y libgpiod-utils)
Código completo
El botón está cableado entre el pin físico 7 (GPIO4) y el pin físico 6 (GND). La pull-up interna mantiene la entrada en 1 en reposo; la pulsación lleva a 0:
#!/usr/bin/env bash
# bouton.sh — surveille GPIO4 (broche physique 7), bouton vers GND
# requis : libgpiod-utils (gpiodetect, gpioget)
echo "Surveillance GPIO4 — Ctrl-C pour quitter"
while true; do
etat=$(gpioget --numeric gpiochip0 4)
if [ "$etat" = 0 ]; then
echo "$(date +%T) : bouton appuyé !"
sleep 0.3 # anti-rebond logiciel
fi
sleep 0.05
done
Guardar en bouton.sh, luego chmod +x bouton.sh y ./bouton.sh. Alternativa en Python: from gpiozero import Button; b = Button(4, pull_up=True) y luego b.wait_for_press — gpiozero viene preinstalado en Raspberry Pi OS.
Verificación esperada
En reposo, gpioget gpiochip0 4 devuelve 1 (pull-up interna). En cada pulsación mantenida del botón, la consola muestra una línea con marca de tiempo « botón pulsado ! ». Al soltar, el estado vuelve a 1. Sin la pull-up activada, la entrada queda flotante y muestra estados aleatorios — es la mejor prueba para entender su utilidad.
Errores frecuentes
- Olvidar la pull-up (o cablear una externa de 10 kΩ al mismo tiempo): la entrada queda flotante, mensajes parásitos.
- Cablear el botón a 3,3 V sin resistencia y luego leer: cortocircuito a GND en el momento de la pulsación si el pin está configurado como salida alta.
- Equivocarse de pin: GPIO4 = pin físico 7, no el pin 4 (que es 5 V).
- Rebotes mecánicos: sin temporización, una única pulsación puede producir varias líneas — normal, de ahí el
sleep 0.3. permission denieden gpiochip0: añadir el usuario al grupogpioy luego volver a iniciar sesión.- Usar
gpiogeten un bucle muy ajustado en un Pi antiguo: consume CPU; mantener unsleepcorto.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython