Raspberry Pi - Bouton

Ce tutoriel vous apprend à utiliser le Raspberry Pi avec un bouton. En détail, nous allons apprendre :

Le bouton est appelé bouton-poussoir, bouton tactile ou interrupteur momentané. C'est un composant fondamental utilisé dans de nombreux projets Raspberry Pi. Il est facile à utiliser. Cependant, il peut être déroutant pour les débutants en raison des aspects mécaniques, physiques et de son mode d'utilisation. Ce didacticiel le simplifie pour les débutants.

Préparation du matériel

1×Raspberry Pi 4 Model B
1×Breadboard-mount Button with Cap
1×Breadboard-mount Button Kit
1×Panel-mount Push Button
1×Breadboard
1×Jumper Wires
1×(Optional) Screw Terminal Block Shield for Raspberry Pi
1×(Optional) USB-C Power Cable with On/Off Switch for Raspberry Pi 4B
1×(Optional) Plastic Case and Cooling Fan for Raspberry Pi 4B
1×(Optional) HDMI Touch Screen Monitor for Raspberry Pi

Or you can buy the following sensor kits:

1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
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

Lors de l'utilisation d'un bouton, les débutants rencontrent souvent deux difficultés courantes :

1. Problème de flottement de l'entrée :

  • Symptôme : La valeur lue depuis la broche d'entrée ne correspond pas à l'état de la pression du bouton.
  • Cause : Une résistance pull-up ou pull-down n'est pas utilisée sur la broche d'entrée.
  • Solution : Utilisez une résistance pull-up ou pull-down, ce qui sera abordé dans ce tutoriel.

2. Phénomène de bavardage :

  • Symptôme : Le code du Raspberry Pi détecte plusieurs pressions sur le bouton même lorsque le bouton n'est pressé qu'une seule fois.
  • Cause : Des problèmes mécaniques et physiques provoquent l'état du bouton (ou interrupteur) à alterner rapidement entre BAS et HAUT plusieurs fois.
  • Solution : Afin de résoudre ce problème, le tutoriel Raspberry Pi - Bouton - Anti-rebond. démontrera l'utilisation des techniques de debounce.

Pour les applications qui nécessitent une détection précise de la pression, c'est une considération qui devrait être prise en compte.

※ Note:

Ne confondez pas le bouton avec les éléments suivants :

Le brochage du bouton

Il existe différents types de boutons-poussoirs, qui peuvent être classés en deux grandes catégories :

  • Bouton poussoir monté sur PCB (adapté pour le montage sur une plaque d'expérimentation)
  • Bouton poussoir monté sur panneau
Bouton-poussoir

Un bouton à monter sur circuit imprimé a généralement quatre broches.

Brochage du bouton

Néanmoins, ces broches sont reliées entre elles par paires en interne. Par conséquent, nous n'avons besoin d'utiliser que deux des quatre broches, qui ne sont pas connectées en interne.

Il existe quatre méthodes pour se connecter au bouton, dont deux sont symétriques (référez-vous à l'image).

Comment utiliser le bouton

Pourquoi utilisons-nous seulement deux broches d'un bouton, alors qu'il en a quatre ?

Pour s'assurer qu'il reste solidement en place sur le PCB (circuit imprimé) et peut résister à toute pression appliquée.

Un bouton monté sur panneau a généralement deux broches.

Bouton poussoir à deux broches Schéma de connexion
image source: diyables.io

Comment ça marche

  • Lorsque le bouton n'est pas enfoncé, la broche A et la broche B ne sont pas reliées.
  • Cependant, lorsque le bouton est enfoncé, la broche A et la broche B sont connectées.
Comment fonctionne le bouton

Raspberry Pi - Bouton

Un des broches d'un bouton est connecté soit au VCC soit au GND. L'autre broche du même bouton est reliée à une broche d'un Raspberry Pi. En vérifiant l'état d'une broche de Raspberry Pi définie comme entrée, on peut déterminer si un bouton a été pressé ou non.

État du bouton et état d'appui

La connexion entre le bouton et le Raspberry Pi, ainsi que la configuration de la broche du Raspberry Pi, détermineront la relation entre l'état du bouton et l'état de pression.

Il existe deux façons d'utiliser un bouton avec Raspberry Pi :

  1. Connectez une broche du bouton à VCC et l'autre à une broche du Raspberry Pi avec une résistance de tirage vers le bas
    • Lorsque le bouton est pressé, l'état de la broche du Raspberry Pi sera HAUT. Sinon, il sera BAS
    • Une résistance interne ou externe peut être utilisée. La résistance interne est intégrée au Raspberry Pi et peut être configurée via le code.
  • Connectez une broche du bouton à GND et l'autre à une broche du Raspberry Pi avec une résistance de tirage vers le haut
    • Lorsque le bouton est pressé, l'état de la broche du Raspberry Pi sera BAS. Sinon, il sera HAUT
    • Une résistance interne ou externe peut être utilisée. La résistance interne est intégrée au Raspberry Pi et peut être configurée via le code.

    ※ Note:

    Lorsqu'aucune résistance de tirage vers le bas ni de tirage vers le haut n'est utilisée, la broche d'entrée entre dans un état « flottant » lorsque le bouton n'est pas appuyé, ce qui signifie que l'état peut être soit HAUT, soit BAS (instable) et entraînera une détection incorrecte.

    • La pire pratique : initialise la broche de Raspberry Pi en tant qu'entrée (en utilisant pinMode(BUTTON_PIN, INPUT)) et n'utilise AUCUNE résistance de tirage externe vers le bas/vers le haut.
    • La meilleure pratique : initialise la broche de Raspberry Pi en tant qu'entrée avec tirage interne vers le haut (en utilisant pinMode(BUTTON_PIN, INPUT_PULLUP)). Elle n'a PAS besoin d'utiliser une résistance de tirage externe vers le bas/vers le haut.

    Pour la commodité des débutants, ce tutoriel utilise l'approche la plus simple : configurer la broche du Raspberry Pi comme une entrée avec résistance de tirage interne sans avoir besoin d'une résistance externe. Pas besoin de se soucier de la connexion de la résistance pull-up/pull-down. Il suffit d'utiliser le code du Raspberry Pi.

    Diagramme de câblage

    • Schéma de câblage entre Raspberry Pi et bouton monté sur PCB
    Diagramme de câblage du bouton Raspberry Pi

    This image is created using Fritzing. Click to enlarge image

    • Schéma de câblage entre le Raspberry Pi et le bouton monté sur panneau
    Schéma de câblage du bouton-poussoir à deux broches pour Raspberry Pi

    This image is created using Fritzing. Click to enlarge image

    Pour simplifier et organiser votre câblage, nous vous recommandons d'utiliser un Screw Terminal Block Shield pour Raspberry Pi. Ce shield garantit des connexions plus sûres et plus faciles à gérer, comme illustré ci-dessous :

    Raspberry Pi Screw Terminal Block Shield

    Comment Programmer un Bouton

    • Utilisez la fonction GPIO.setup() pour initialiser la broche du Raspberry Pi en tant qu'entrée à résistance de pull-up interne. Par exemple, broche 16 :
    GPIO.setup(16, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Configuration du GPIO 16 en entrée avec une résistance de pull-up
    • Utilise la fonction GPIO.input() pour déterminer l'état de la broche du Raspberry Pi.
    button_state = GPIO.input(16) # état du bouton

    ※ Note:

    Deux cas d'utilisation courants sont disponibles :

    • Le premier : Si l'état d'entrée est HAUT, effectuer une action. Si l'état d'entrée est BAS, faire le contraire.
    • Le second : Si l'état d'entrée change de BAS à HAUT (ou de HAUT à BAS), prendre une action.

    Nous sélectionnons l'un d'eux en fonction de l'application. Par exemple, lors de l'utilisation d'un bouton pour contrôler une LED :

    • Si nous voulons que la LED soit ALLUMÉE lorsque le bouton est pressé et ÉTEINTE lorsque le bouton n'est PAS pressé, nous DEVONS utiliser le premier cas d'utilisation.
    • Si nous voulons que la LED soit basculée entre ALLUMÉ et ÉTEINT chaque fois que nous appuyons sur le bouton, nous DEVONS utiliser le second cas d'utilisation.

    Code Raspberry Pi - Lecture de l'état du bouton

    Étapes rapides

    • Assurez-vous d'avoir 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 des 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 d'avoir la bibliothèque RPi.GPIO installée. Si ce n'est pas le cas, 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 button.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 import RPi.GPIO as GPIO import time # Define the GPIO pin connected to the button BUTTON_PIN = 16 # Set the GPIO mode to BCM GPIO.setmode(GPIO.BCM) # Initialize the pushbutton pin as an input with a pull-up resistor # The pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. 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) # Print out the button's state print(button_state) # Small delay to avoid unnecessary printing time.sleep(0.1) except KeyboardInterrupt: print("\nExiting...") # Clean up GPIO settings GPIO.cleanup()
    • Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
    python3 button.py
    • Appuyez et relâchez le bouton plusieurs fois.
    • Vérifiez la sortie sur le moniteur série.
    PuTTY - Raspberry Pi
    1 1 1 0 0 0 0 0 0 1 1 1

    1 est ÉLEVÉ, 0 est BAS.

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

    Explication du code

    Consultez l'explication ligne par ligne contenue dans les commentaires du code source !

    Code Raspberry Pi - Détection des événements de pression de bouton

    Étapes rapides

    • Créez un fichier de script Python button_pressed.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 import RPi.GPIO as GPIO import time # Define the GPIO pin connected to the button BUTTON_PIN = 16 # Set the GPIO mode to BCM GPIO.setmode(GPIO.BCM) # Initialize the pushbutton pin as an input with a pull-up resistor # The pull-up input pin will be HIGH when the switch is open and LOW when the switch is closed. GPIO.setup(BUTTON_PIN, GPIO.IN, pull_up_down=GPIO.PUD_UP) # Variable to keep track of the previous button state prev_button_state = GPIO.input(BUTTON_PIN) try: while True: # Read the state of the switch/button button_state = GPIO.input(BUTTON_PIN) # Check if the button state has changed (press or release event) if button_state != prev_button_state: if button_state == GPIO.LOW: # Button is pressed print("The button is pressed!") else: # Button is released print("The button is released!") # Update the previous button state prev_button_state = button_state # Small delay to avoid unnecessary reading time.sleep(0.1) except KeyboardInterrupt: print("\nExiting...") # Clean up GPIO settings GPIO.cleanup()
    • Enregistrez le fichier et exécutez le script Python en entrant la commande suivante dans le terminal :
    python3 button_pressed.py
    • Appuyez sur le bouton et maintenez-le enfoncé un instant.
    • Vérifiez la sortie sur le moniteur série.
    PuTTY - Raspberry Pi
    The button is pressed The button is released

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

    Explication du code

    Consultez l'explication ligne par ligne contenue dans les commentaires du code source !

    ※ Note:

    Même si vous appuyez et relâchez le bouton une seule fois, la sortie dans le Terminal peut afficher plusieurs événements d'appui et de relâchement. C'est le comportement attendu du bouton. Ce phénomène est appelé « chatter ». Pour en savoir plus, veuillez vous référer au Raspberry Pi - Tutoriel sur le rebondissement des boutons.

    Vidéo

    Défiez-vous

    • Lorsque le bouton est enfoncé, la LED doit s'allumer.
    • Lorsque le bouton n'est pas enfoncé, la LED doit s'éteindre.
    • Chaque fois que le bouton est enfoncé, la LED doit alterner entre ALLUMÉ et ÉTEINT.

    Connaissances supplémentaires

    Quelles sont les occasions où une résistance de tirage/poussée doit et ne doit pas être utilisée pour une broche d'entrée ?

    • Si le capteur a des états soit fermés soit ouverts, une résistance de pull-up ou pull-down est nécessaire pour que ces états deviennent BAS et HAUT. Des exemples de tels capteurs sont le bouton-poussoir, l'interrupteur et le contact magnétique (capteur de porte).
    • D'autre part, si le capteur a deux niveaux de tension définis (BAS et HAUT), une résistance de pull-up ou pull-down n'est PAS nécessaire. Des exemples de tels capteurs sont le capteur de mouvement et le capteur tactile.

    ※ OUR MESSAGES

    • Please feel free to share the link of this tutorial. However, Please do not use our content on any other websites. We invested a lot of effort and time to create the content, please respect our work!