Outils pour utilisateurs

Outils du site


isn:gpio_led1

Raspberry : montage et programmation avec une LED

Montage à réaliser

Sur ce montage, la LED est reliée :

  • par la patte de la cathode à la masse (GRD),
  • par la patte de l'anode à une résistance de 1k ohms,
  • l'autre patte la résistance à la broche 7 c'est à dire au GPIO4 du Raspberry.

Code des couleurs

Programmation Python avec la bibliothèque RPi.GPIO

Découvrez l'environnement de programmation Thonny Python IDE pour vos scripts Python

import RPi.GPIO as GPIO
# Choix de la numerotation BCM
GPIO.setmode(GPIO.BCM)
  • Définir le GPIO4 en sortie et allumer la led :
GPIO.setup(4, GPIO.OUT)                   # le GPIO4 est une sortie numerique
GPIO.setup(4, GPIO.OUT, initial=GPIO.HIGH)# le GPIO4 est une sortie initialement a l'etat haut
GPIO.output(4, GPIO.HIGH)                 # allumer la LED : etat haut
GPIO.output(4, GPIO.LOW)                  # eteindre la LED : etat bas
  • L'état haut correspond à GPIO.HIGH c'est à dire 1 ou encore True.
  • L'état bas correspond à GPIO.LOW c'est à dire 0 ou False.
  • pour gérer un inversement d'état
GPIO.output(4, not GPIO.input(4))
  • Remettre à zéro une entrée-sortie numérique

À la fin de tout programme, il est conseillé de remettre les Entrées/sorties dans l'état où le programme les a trouvées. On n'impactera ainsi que les E/S utilisées.

GPIO.cleanup()

Exercice : faire un programme qui fait clignoter une LED. Pour cela utilisez le module time.

import time
# Attendre 1/2 seconde
time.sleep(0.5)

Programmation Python avec la bibliothèque gpiozero

La bibliothèque gpiozero permet une programmation simplifiée.

  • allumer/éteindre la LED ; la faire clignoter
from gpiozero import LED
led = LED(2)
led.on()     # allumer la led
led.off()    # eteindre la led
led.blink()  # faire clignoter la led
led.off()    # eteindre la led
  • les arguments de la méthode blink
led.blink(on_time=x, off_time=y, n=z)
# on_time : durée d'éclairage de la LED
# off_time : durée d'extinction de la LED
# n : nombre de clignotement

Un bouton pour allumer la led

Montage

  • Pour lire l'état du bouton, le programme va venir lire l'état à intervalle régulier.
  • Une fois le bouton appuyé, le programme attend le relâchement du bouton.

Le branchement du bouton :

  • une patte du bouton est branchée à la masse (GRD),
  • l'autre patte du bouton :
    • est branchée sur la broche 37 c'est à dire le GPIO26,
    • est également reliée à une résistance de pull-up qui est branchée à une des sorties +3,3V du Raspberry.

Cette résistance pull-up permet :

  • de mettre le potentiel du GPIO26 à HIGH (valeur 1 - niveau haut),
  • de protéger le Raspberry en évitant le court-circuit.

Lorsque l'on pousse le bouton poussoir, le potentiel du GPIO26 est forcé à LOW (valeur 0 - niveau bas) par la mise à la masse.

La LED est toujours reliée à la masse et à la broche 40 (GPIO21).

Programmation avec la bibliothèque GPIO

# Import des modules
import RPi.GPIO
import time
 
# Initialisation de la numerotation et des E/S
GPIO.setmode(GPIO.BCM)
GPIO.setup(21, GPIO.OUT, initial=GPIO.LOW)  # la led
GPIO.setup(26, GPIO.IN)                     # le bouton
 
# Si on detecte un appui sur le bouton, on allume la LED 
# et on attend que le bouton soit relache
while True:
    state = GPIO.input(26)
    if not state:
        # on a appuye sur le bouton connecte sur la broche 26
        GPIO.output(21, GPIO.HIGH)
        while not state:
            state = GPIO.input(10)
            time.sleep(0.02)  # Pause pour ne pas saturer le processeur
        GPIO.output(21, GPIO.LOW)
    time.sleep(0.02)  # Pause pour ne pas saturer le processeur

Programmation avec la bibliothèque gpiozero

from gpiozero import LED, Button
from signal import pause
 
led = LED(21)
bouton = Button(26)
 
bouton.when_pressed = led.on
bouton.when_released = led.off
pause()

L'instruction bouton.when_pressed = led.on n'appelle pas la fonction (méthode) led.on mais crée une référence à cette fonction de telle sorte que la fonction led.on sera appelée seulement quand l'événement bouton.when_pressed se produira.

De la même l'instruction bouton.when_released = led.off permet d'indiquer qu'il faut exécuter la fonction (méthode) led.off quand on relâche le bouton.

Pour en savoir plus sur gpiozero : gpiozero.pdf

Travail à faire : réaliser un feu tricolore avec un bouton pour piéton :

  • les feux doivent passer régulièrement du vert à l'orange puis au rouge avec la temporisation de votre choix,
  • si un piéton appuie sur le bouton :
    • le feu passe immédiatement à l'orange puis au rouge,
    • le feu rouge doit durer plus longtemps que durant le cycle normal,
    • puis le cycle habituel reprend avec la temporisation initiale.

Les activités ...

isn/gpio_led1.txt · Dernière modification: 2018/11/22 20:06 (modification externe)