Raspberry Pi - Bouton - Appui long Appui court

Ce didacticiel vous apprend à utiliser le Raspberry Pi pour détecter la pression longue et courte du bouton. Pour simplifier, nous le décomposerons en exemples suivants :

Dans la section finale, nous explorerons comment utiliser le débounce dans un cadre pratique. Pour plus d'informations sur pourquoi le débouçage est nécessaire pour les boutons, veuillez consulter cet article. Sans débouçage, il est possible de détecter incorrectement une pression courte du bouton.

Préparation du matériel

1×Raspberry Pi 5
1×Bouton avec capuchon pour plaque d'essai
1×Kit bouton pour plaque d'essai
1×Bouton poussoir pour montage sur panneau
1×Module bouton poussoir
1×Plaque d'essai
1×Fils de connexion
1×Recommandé: Shield à bornier à vis pour Raspberry Pi
1×Recommandé: Kit plaque de base prototypage et plaque d'essai pour Raspberry Pi
1×Recommandé: Écran tactile HDMI pour Raspberry Pi

Ou vous pouvez acheter les kits suivants:

1×Kit de Capteurs DIYables (30 capteurs/écrans)
1×Kit de Capteurs DIYables (18 capteurs/écrans)
Divulgation : Certains des liens fournis dans cette section sont des liens affiliés Amazon. Nous pouvons recevoir une commission pour tout achat effectué via ces liens, sans coût supplémentaire pour vous. Nous vous remercions de votre soutien.

À propos du bouton

Si vous n'êtes pas familier avec les boutons (y compris les broches, leur fonctionnement et leur programmation), les tutoriels suivants peuvent vous guider :

Diagramme de câblage

Schéma de câblage du bouton Raspberry Pi

Cette image a été créée avec Fritzing. Cliquez pour agrandir l'image.

Pour simplifier et organiser votre montage de câblage, nous recommandons l'utilisation d'un shield à bornier à vis pour Raspberry Pi. Ce shield assure des connexions plus sûres et mieux gérées, comme illustré ci-dessous :

Shield à bornier à vis pour Raspberry Pi

Dans ce tutoriel, nous utiliserons la résistance pull-up interne. En conséquence, lorsque le bouton n’est pas pressé, son état est HAUT, et lorsqu’il est pressé, son état est BAS.

Comment détecter une pression courte

Nous calculons la durée entre les événements pressé et relâché. Si la période est inférieure à un temps prédéterminé, nous détectons un événement de pression courte.

Spécifiez la durée d'une pression courte.

SHORT_PRESS_TIME = 0.5 # 500 millisecondes
  • Détecter si le bouton a été pressé et enregistrer l'heure de la pression.
if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Le bouton est pressé press_time_start = time.time()
  • Déterminez quand le bouton a été relâché et enregistrez l'heure de relâchement.
if prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Le bouton est relâché press_time_end = time.time()
  • Déterminez la durée de l'appui.
press_duration = press_time_end - press_time_start # Durée de la pression = fin de la pression - début de la pression
  • Comparez la durée de la pression au temps défini pour une pression courte afin d'identifier une pression courte.
if press_duration < SHORT_PRESS_TIME: print("Une pression courte est détectée")

Code Raspberry Pi pour détecter une courte pression

Étapes rapides

  • Assurez-vous que vous avez Raspbian ou tout autre système d'exploitation compatible Raspberry Pi installé sur votre Pi.
  • Assurez-vous que votre Raspberry Pi est connecté au même réseau local que votre PC.
  • Assurez-vous que votre Raspberry Pi est connecté à internet si vous devez installer certaines bibliothèques.
  • Si c'est la première fois que vous utilisez Raspberry Pi, voir Installation du logiciel - Raspberry Pi.
  • Connectez votre PC au Raspberry Pi via SSH en utilisant le client SSH intégré sur Linux et macOS ou PuTTY sur Windows. Voir comment connecter votre PC au Raspberry Pi via SSH.
  • Assurez-vous que vous avez la bibliothèque RPi.GPIO installée. Sinon, installez-la en utilisant la commande suivante :
sudo apt-get update sudo apt-get install python3-rpi.gpio
  • Créez un fichier de script Python short_press.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-button-long-press-short-press import RPi.GPIO as GPIO import time BUTTON_PIN = 16 SHORT_PRESS_TIME = 0.5 # 500 milliseconds DEBOUNCE_TIME = 0.1 # 100 milliseconds # Variables will change: prev_button_state = GPIO.LOW # the previous state from the input pin button_state = None # the current reading from the input pin press_time_start = 0 press_time_end = 0 # Set up GPIO and configure the pull-up resistor GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Perform debounce by waiting for DEBOUNCE_TIME time.sleep(DEBOUNCE_TIME) if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Button is pressed press_time_start = time.time() elif prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Button is released press_time_end = time.time() press_duration = press_time_end - press_time_start if press_duration < SHORT_PRESS_TIME: print("A short press is detected") # Save the last state prev_button_state = button_state except KeyboardInterrupt: print("\nExiting the program.") GPIO.cleanup()
  • Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
python3 short_press.py
  • Appuyez brièvement sur le bouton plusieurs fois.
  • Vérifiez le résultat dans le Terminal.
PuTTY - Raspberry Pi
A short press is detected A short press is detected A short press is detected

Le script s'exécute en boucle infinie continuellement jusqu'à ce que vous appuyiez sur Ctrl + C dans le terminal.

Comment détecter un appui long

Il existe deux scénarios pour reconnaître un appui long :

  • L'événement de pression longue est identifié immédiatement après que le bouton est relâché.
  • L'événement de pression longue est identifié pendant que le bouton est maintenu enfoncé, même avant qu'il ne soit relâché.

Dans le premier scénario, la durée entre les événements de pression et de relâchement est calculée. Si cette durée dépasse un laps de temps prédéterminé, un événement de pression prolongée est identifié.

Dans le second scénario, lorsque le bouton est appuyé, la durée de pression est continuellement vérifiée jusqu'à ce que le bouton soit relâché. Tant que le bouton est maintenu enfoncé, si la durée dépasse une durée prédéterminée, l'événement d'appui long est détecté.

Code Raspberry Pi pour détecter un appui long lorsqu'il est relâché

Étapes rapides

  • Créez un fichier de script Python long_press_1.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-button-long-press-short-press import RPi.GPIO as GPIO import time BUTTON_PIN = 16 LONG_PRESS_TIME = 1.0 # 1 seconds DEBOUNCE_TIME = 0.1 # 100 milliseconds # Variables will change: prev_button_state = GPIO.LOW # the previous state from the input pin button_state = None # the current reading from the input pin press_time_start = 0 press_time_end = 0 # Set up GPIO and configure the pull-up resistor GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Perform debounce by waiting for DEBOUNCE_TIME time.sleep(DEBOUNCE_TIME) if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Button is pressed press_time_start = time.time() elif prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Button is released press_time_end = time.time() press_duration = press_time_end - press_time_start if press_duration >= LONG_PRESS_TIME: print("A long press is detected") # Save the last state prev_button_state = button_state except KeyboardInterrupt: print("\nExiting the program.") GPIO.cleanup()
  • Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
python3 long_press_1.py
  • Appuyez sur le bouton pendant 2 secondes, puis relâchez-le.
  • Vérifiez le résultat sur le terminal.
PuTTY - Raspberry Pi
A long press is detected

L'événement de pression longue n'est identifié que lorsque le bouton est relâché.

Code Raspberry Pi pour détecter une pression longue pendant l'appui

Étapes rapides

  • Créez un fichier de script Python long_press_2.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-button-long-press-short-press import RPi.GPIO as GPIO import time BUTTON_PIN = 16 LONG_PRESS_TIME = 1.0 # 1000 milliseconds (1 second) # Variables will change: prev_button_state = GPIO.LOW # the previous state from the input pin button_state = None # the current reading from the input pin press_time_start = 0 is_pressing = False is_long_detected = False # Set up GPIO and configure the pull-up resistor GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Button is pressed press_time_start = time.time() is_pressing = True is_long_detected = False elif prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Button is released is_pressing = False if is_pressing and not is_long_detected: press_duration = time.time() - press_time_start if press_duration > LONG_PRESS_TIME: print("A long press is detected") is_long_detected = True # Save the last state prev_button_state = button_state except KeyboardInterrupt: print("\nExiting the program.") GPIO.cleanup()
  • Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
python3 long_press_2.py
  • Appuyez sur le bouton et maintenez-le enfoncé pendant quelques secondes puis relâchez le bouton.
  • Vérifiez le résultat sur le Moniteur Série.
PuTTY - Raspberry Pi
A long press is detected

L'événement de pression prolongée est détecté même lorsque le bouton n'a pas été relâché.

Comment détecter à la fois une pression longue et une pression courte

Étapes rapides

  • Créez un fichier de script Python long_short_press.py et ajoutez le code suivant :
# Ce code Raspberry Pi a été développé par newbiely.fr # Ce code Raspberry Pi est mis à disposition du public sans aucune restriction. # Pour des instructions complètes et des schémas de câblage, veuillez visiter: # https://newbiely.fr/tutorials/raspberry-pi/raspberry-pi-button-long-press-short-press import RPi.GPIO as GPIO import time BUTTON_PIN = 16 SHORT_PRESS_TIME = 0.5 # 500 milliseconds LONG_PRESS_TIME = 1.0 # 1 seconds DEBOUNCE_TIME = 0.1 # 100 milliseconds # Variables will change: prev_button_state = GPIO.LOW # the previous state from the input pin button_state = None # the current reading from the input pin press_time_start = 0 press_time_end = 0 # Set up GPIO and configure the pull-up resistor GPIO.setmode(GPIO.BCM) GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Perform debounce by waiting for DEBOUNCE_TIME time.sleep(DEBOUNCE_TIME) if prev_button_state == GPIO.HIGH and button_state == GPIO.LOW: # Button is pressed press_time_start = time.time() elif prev_button_state == GPIO.LOW and button_state == GPIO.HIGH: # Button is released press_time_end = time.time() press_duration = press_time_end - press_time_start if press_duration < SHORT_PRESS_TIME: print("A short press is detected") elif press_duration >= LONG_PRESS_TIME: print("A long press is detected") # Save the last state prev_button_state = button_state except KeyboardInterrupt: print("\nExiting the program.") GPIO.cleanup()
  • Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
python3 long_short_press.py
  • Appuyez sur le bouton, à la fois pour une courte et une longue durée.
  • Consultez les résultats sur le terminal.

Vidéo

Pourquoi Avoir Besoin d'une Pression Longue et d'une Pression Courte

  • Pour minimiser le nombre de boutons, un bouton peut être utilisé pour effectuer plusieurs fonctions. Par exemple, une pression courte peut être utilisée pour changer le mode de fonctionnement, tandis qu'une pression longue peut être utilisée pour éteindre l'appareil.
  • L'utilisation d'une pression longue aide à prévenir les pressions courtes accidentelles. Par exemple, certains appareils utilisent un bouton pour initier une réinitialisation d'usine. Si le bouton est pressé involontairement, cela pourrait être dangereux. Pour éviter cela, l'appareil est conçu pour n'initier une réinitialisation d'usine que lorsque le bouton est maintenu enfoncé pendant un certain temps (par exemple, 5 secondes).

※ NOS MESSAGES

  • N'hésitez pas à partager le lien de ce tutoriel. Cependant, veuillez ne pas utiliser notre contenu sur d'autres sites web. Nous avons investi beaucoup d'efforts et de temps pour créer ce contenu, veuillez respecter notre travail !