🛠 Lire un bouton et afficher l'état dans la console
Objetivos
Leer el estado de un botón pulsador en el GPIO del ODROID-N2 y mostrarlo en la consola. Se utiliza la resistencia de pull-up interna (bias pull-up de libgpiod), por lo que no se necesita resistencia externa: el botón conecta el pin a tierra cuando se pulsa.
Material
- ODROID-N2/N2+ con Armbian (mainline)
- 1 botón pulsador
- 2 cables Dupont
- Pin utilizado: PIN_11 (GPIOX_3), GND en PIN_25
Código completo
#!/usr/bin/env bash
# bouton.sh — état du bouton sur PIN_11 en temps réel (libgpiod v2)
set -e
gpiomon --num-events=0 --falling-edge --rising-edge gpiochip0 PIN_11 &
MON=$!
trap "kill $MON" EXIT
while true; do
etat=$(gpioset --quiet --state gpiochip0 PIN_11 2>/dev/null || true)
lu=$(gpioget gpiochip0 PIN_11)
[ "$lu" = 0 ] && echo "BOUTON APPUYÉ" || echo "relâché"
sleep 0.1
done
Versión en C (libgpiod) con gestión de eventos: gcc bouton.c -o bouton -lgpiod, solicitando PIN_11 como entrada con GPIOD_LINE_REQUEST_FLAG_BIAS_PULL_UP, y luego lectura a 10 Hz.
Verificación esperada
Al iniciar, la consola muestra «relajado» en bucle (el pull-up interno mantiene la línea en 1). Al mantener el botón pulsado, las líneas pasan a ser «BOTÓN PULSADO». Con gpiomon gpiochip0 PIN_11, cada pulsación/soltación produce un evento con marca de tiempo.
Errores frecuentes
- Botón entre PIN_11 y 3,3 V en lugar de GND: sin pull-up por software, la línea queda flotante y el estado es aleatorio.
- Ausencia de antirrebote: se muestran algunos rebotes además de la pulsación; filtrar mediante lógica (ignorar cambios < 50 ms).
- Confundir PIN_11 (pin físico 11) y GPIO 11: los nombres
PIN_xxdel device-tree son físicos, verifique congpioinfo gpiochip0. gpiogetdevuelve un error: la línea puede estar ocupada por otro proceso (gpioinfomuestra el consumidor).- >
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash