🛠 Lire un bouton poussoir et afficher l'état dans la console
Objetivos
Aprender a leer una entrada digital en el conector P1 de 26 pines del Model B Rev 1: un botón pulsador conectado a masa, con la resistencia de pull-up interna del BCM2835 activada mediante libgpiod. Observará el estado del botón en bucle en la consola.
Material
- Raspberry Pi Model B Rev 1 con Raspberry Pi OS legacy de 32 bits
- 1 botón pulsador
- libgpiod instalado (
sudo apt install -y gpiod) - No se necesita ninguna resistencia externa: el pull-up interno es suficiente para un botón conectado a GND.
Código completo
#!/bin/sh
# bouton.sh - surveille un bouton sur GPIO4 (broche physique 7)
# c'est la broche 7, GND est la broche 9.
# Rappel interne : GPIO4 possède un pull-up interne activable.
# Lecture en boucle : gpiomon attend les changements d'état
gpiomon --num-events=0 --rising-edge gpiochip0 4 &
while true; do
ETAT=$(gpioget --bypass-direction-check gpiochip0 4 2>/dev/null || gpioget gpiochip0 4)
if [ "$ETAT" = "0" ]; then
echo "BOUTON APPUYE (etat bas = 0, pull-up interne)"
else
echo "au repos (1)"
fi
sleep 0.1
done
Verificación esperada
En reposo, la consola muestra au repos (1) gracias al pull-up interno. En cada pulsación, el GPIO se conecta a masa y el estado pasa a 0: la consola muestra BOUTON APPUYE. El botón está cableado entre el pin 7 (GPIO4) y el pin 9 (GND).
Errores frecuentes
- Olvidar el pull-up: sin pull-up (interno o externo), la entrada queda flotante y muestra estados aleatorios.
- Conectar el botón entre GPIO y 3,3 V sin resistencia: cortocircuito en el momento de la pulsación si se lee el estado bajo en pull-down.
- Equivocarse de pin: GPIO4 es el pin físico 7 en el conector de 26 pines, no el pin 4.
- Rebotes mecánicos: el estado puede oscilar durante unos milisegundos; el
sleep 0.1es una antirrebote de software minimalista. gpiomonno existe en las imágenes muy antiguas: actualice el paquetegpiod.
Otros tutoriales para esta placa
- Allumer une LED via le GPIO avec libgpiod
- Premier script Python : faire clignoter la LED
- Variation d'intensité LED avec le PWM matériel (et son piège)
- Lire un capteur I2C (température/humidité) sur le bus 1
- Configurer l'Ethernet 10/100 et piloter le Pi en SSH
- Boot sur SD, partitions et procédure de recouvrement
Ejemplos de código para esta placa
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython