🛠 GPIO en Python : LED et bouton avec gpiozero
Objetivos
Controlar el conector de 40 pines compatible con HAT de la Zero 2 W: lógica a 3,3 V (¡atención, no 5 V!), numeración Broadcom (GPIO17 = pin físico 11), entradas con resistencia pull-up interna y el modelo orientado a eventos de gpiozero —preinstalado en Raspberry Pi OS— que evita el polling bloqueante. Restricciones de corriente a tener en cuenta: 16 mA por pin, 50 mA en TOTAL en todos los pines.
Material
- 1 Raspberry Pi Zero 2 W alimentada (2 A)
- 1 LED + 1 resistencia de 330 Ω: ánodo → pin físico 11 (GPIO17), cátodo → GND (pin 6, 9, 14, 20, 25 o 30)
- 1 botón pulsador: pin físico 13 (GPIO27) → botón → GND (se utiliza la resistencia pull-up interna)
- Opcionalmente un conector para soldar: la Zero 2 W estándar se entrega con el conector NO engastado (la versión « with headers » viene pre-soldada)
Código completo
#!/usr/bin/env python3
"""LED sur GPIO17, compteur d'appuis sur bouton GPIO27 (gpiozero).
Rappel : 16 mA max par broche, 50 mA au total sur toutes les broches."""
from gpiozero import LED, Button
from signal import signal, SIGINT, default_int_handler
led = LED(17) # numérotation BCM, pas numéro de broche !
button = Button(27, pull_up=True) # au repos = HIGH ; appuyé = relié à GND
presses = 0
def on_press(_):
global presses
presses += 1
print(f"Bouton appuyé {presses} fois")
button.when_pressed = on_press # événementiel, pas de boucle de polling
signal(SIGINT, default_int_handler) # Ctrl-C propre au lieu de rester bloqué
try:
led.blink(on_time=0.5, off_time=0.5) # non bloquant : thread en arrière-plan
while True:
pass
finally:
led.close # remet la broche à 0 à la sortie
Ejecución: « python3 bouton.py », parada mediante Ctrl-C. Para iniciarlo al arrancar: un servicio systemd simple con « ExecStart=/usr/bin/python3 /home/pi/bouton.py ».
Verificación esperada
El LED parpadea a 1 Hz desde el inicio; cada pulsación muestra un contador en la terminal. Tras Ctrl-C, el LED se apaga (el pin se libera correctamente mediante led.close). Si no parpadea nada, verificar primero la inversión entre el pin físico y el número GPIO.
Errores frecuentes
- Confundir el pin físico 17 con GPIO17: gpiozero habla en Broadcom; ¡el pin físico 17 es una salida de 3,3 V!
- Alimentar un LED a 3,3 V sin resistencia o extraer más de 16 mA: el pin se calienta, y por encima de los 50 mA acumulados el SoC corre riesgo de daños.
- Conectar un sensor de 5 V de Arduino directamente: la lógica del Pi es de 3,3 V, los pines no son tolerantes a 5 V (salvo indicación contraria del módulo).
- gpiozero vs RPi.GPIO vs libgpiod: tres mundos; no mezclar las bibliotecas en el mismo pin sin liberar la línea.
- Ejecutar el script como root « para que funcione »: innecesario, el usuario pi está en el grupo gpio; buscar los problemas de permisos en otro lugar.
Otros tutoriales para esta placa
- Premier démarrage de la Zero 2 W sans écran (headless)
- Se connecter au Wi-Fi (et comprendre les limites 2,4 GHz / WPA2)
- Surveiller la température et la fréquence de la Zero 2 W
- Le tour de passe-passe « clé USB Linux » : Ethernet sur USB (g_ether)
- Serveur de blocage de pub réseau avec Pi-hole
- Remettre une Zero 2 W en état de boot : usbboot et boot files
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash