🛠 Lire un bouton et afficher dans la console
Objetivos
Conectar un botón pulsador al Raspberry Pi 5 y mostrar un mensaje en la consola cada vez que se presione, utilizando gpiomon (libgpiod) y luego un pequeño script Shell. Se descubren las entradas GPIO, la resistencia pull-up interna y la detección de flanco.
Material
- Raspberry Pi 5 con Raspberry Pi OS de 64 bits
- 1 botón pulsador
- Cables Dupont
- Pines: pin físico 7 = GPIO4 (entrada), pin físico 6 = GND. No se necesita ningún componente externo gracias a la resistencia pull-up interna.
Código completo
# Écouter les fronts sur GPIO4 (libgpiod v2)
sudo apt install -y gpiod
gpiomon --num-events=0 --rising-edge gpiochip0 4
# Script bouton.sh : journaliser chaque appui
cat > bouton.sh <<'EOF'
#!/usr/bin/env bash
# Bouton sur GPIO4 (broche physique 7), pull-up interne : appui = niveau 0
echo "Surveillance de GPIO4... Ctrl-C pour terminer"
gpiomon --num-events=0 --falling-edge --debounce-period 0.05 gpiochip0 4 | while read -r _; do
echo "$(date '+%H:%M:%S') - bouton pressé !"
done
EOF
chmod +x bouton.sh
./bouton.sh
Verificación esperada
Cada pulsación del botón muestra una línea con marca de tiempo « ¡botón presionado! » en la terminal. Con gpiomon --rising-edge, es la liberación del botón la que desencadena el evento.
Errores frecuentes
- Botón conectado a 3,3 V sin resistencia: cortocircuito al presionar si el pin está configurado como salida. Aquí se conecta a GND con pull-up, lo cual es seguro.
- Rebotes mecánicos: varios eventos para una sola pulsación; la opción
--debounce-period 0.05de gpiomon los filtra. - Pin incorrecto: GPIO4 = pin físico 7. Verificar con el comando
pinout(proporcionado con gpiozero) ogpioinfo gpiochip0. - Ejecutar sin permisos: en algunas configuraciones, el acceso a GPIO requiere pertenecer al grupo
gpioo usar sudo. - Confundir las versiones de libgpiod: la sintaxis
gpiomon gpiochip0 4corresponde a la v2 (Bookworm).
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