Raspberry Pi - Bouton
Ce tutoriel vous apprend à utiliser le Raspberry Pi avec un bouton. En détail, nous allons apprendre :
- Comment connecter le bouton au Raspberry Pi
- Comment programmer le Raspberry Pi pour lire l'état du bouton
- Comment programmer le Raspberry Pi pour détecter les événements d'appui et de relâchement du bouton
- Comment éviter le problème d'entrée flottante lors de l'utilisation du bouton avec le Raspberry Pi
- Comment éviter le problème de bavardage lors de l'utilisation du bouton avec le Raspberry Pi.
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
Or you can buy the following sensor kits:
1 | × | DIYables Sensor Kit (30 sensors/displays) | |
1 | × | DIYables Sensor Kit (18 sensors/displays) |
À 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
Un bouton à monter sur circuit imprimé a généralement quatre broches.
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).
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.
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.
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 :
- 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.
- 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
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
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 :
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 :
- Utilise la fonction GPIO.input() pour déterminer l'état de la broche du Raspberry Pi.
※ 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 :
- Créez un fichier de script Python button.py et ajoutez le code suivant :
- Enregistrez le fichier et exécutez le script Python en exécutant la commande suivante dans le terminal :
- Appuyez et relâchez le bouton plusieurs fois.
- Vérifiez la sortie sur le moniteur série.
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 :
- Enregistrez le fichier et exécutez le script Python en entrant la commande suivante dans le terminal :
- Appuyez sur le bouton et maintenez-le enfoncé un instant.
- Vérifiez la sortie sur le moniteur série.
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.