Tutoriel Raspberry Pi
Interaction avec le Raspberry par bouton poussoir


25 mars 2019 • 14 • 3.8

Dans de nombreux projets, il est nécessaire de mettre en place un système de boutons poussoirs pour interagir avec l'utilisateur. On peut par exemple à l'aide d'un simple bouton poussoir démarrer un chronomètre, déclencher une photo, ou encore réaliser une sonnette connectée.
Nous allons donc voir dans ce tutoriel comment mettre en place un bouton poussoir, détecter un appui, et réagir en conséquence. Dans l'exemple suivant, nous allumerons une LED lorsqu'un appui est détecté. Évidemment, le code est adaptable à toutes autres fonctions plus utiles.

Utiliser un bouton poussoir sur Raspberry Pi - Raspberry Lab

Prérequis

Pour interagir avec le Raspberry Pi avec un bouton poussoir, il faut :

Une fois tous les éléments réunis, on peut passer au branchement.

Branchement

La première étape du tutoriel va être de brancher correctement le bouton poussoir au Raspberry pi. Commencez par positionner votre bouton comme sur le schéma. Ensuite, reliez un côté du bouton au GND et l'autre broche au pin 3 (GPIO 2) en série avec une résistance d'environ 1 KΩ. Le rôle de cette résistance est simple : Elle permet d'éviter d'endommager le GPIO dans le cas où l'on oublierait de le mettre en INPUT au lieu de OUTPUT. Le Raspberry Pi se court-circuiterai tout seul.


Shéma de branchement d'un bouton poussoir sur Raspberry Pi 3

Le montage final donne quelque chose comme cela :

Bouton connecté au Raspberry

Programmation du bouton

Maintenant que le bouton ainsi que la led sont correctement branchés, on peut passer au code. Rien de bien compliqué : Un boucle infinie lie l'état de l'entrée (GPIO 2). Lorsqu'elle passe à 0, cela signifie qu'on appuie sur le bouton, on réalise alors l'action que l'on souhaite.
Voici le code commenté qui permet d'allumer la led chaque fois qu'on appuie sur le bouton.



C'est sur ce programme que le tutoriel se termine, nous savons maintenant comment détecter et réagir à l'appui d'un bouton connecté Raspberry Pi.
Le code de base donné doit vous permettre de réaliser ce que vous souhaitez lorsque vous appuyez sur le bouton, il suffit de modifier la partie de code située dans le if (etat == 0) !

A lire

Branchement caméra - présentation

Choisir et utiliser une caméra sur un Raspberry Pi


Branchement caméra - présentation

Obtenir la température avec une sonde DS18B20






Ce tutoriel vous a plu ?

starstarstarstarstar

3.8/5 | 23 votes




Commentaires

12 commentaires publiés.

serikal, le 26/09/2022 à 13h20
Bonjour,
Je suis totalement novice et je souhaiterais connecter plusieurs boutons affecté chacun à un chiffres, de sorte à ce que lors ce que quelqu'un appuis sur le bouton 1, le chiffre 1 soit enregistrer en memoire.
Sauriez vous m'aider?
unclefepster, le 30/01/2021 à 14h45
Bonjour,
Je m'apprête à débuter sur Raspberry.
Je voudrais utiliser deux boutons poussoirs pour un projet : un lecteur de BD.
Il me faudrait donc deux boutons : un pour avancer d'une page, l'autre pour reculer d'une page.
Il suffirait donc d'affecter aux boutons les touches flèche droite et flèche gauche du clavier habituel.
Pourriez-vous me dire comment faire cela ou m'indiquer une page expliquant la méthode à suivre ?

Merci pour cet article.
Raspberry Lab, le 31/01/2021 à 17h55
Bonjour @unclefepster,
Pour réaliser votre projet, vous pouvez suivre ce tutoriel, en supprimant toutes les lignes relatives à l'allumage de la LED (7;13;23;26). Dans les endroit où on imprime "appuie détecté" sur la console de sortie, réalisez un appel à une fonction générant un évènement d'entrée de clavier. Pour se faire, vous pouvez par exemple suivre un des tutos disponible avec une simple recherche Google : https://www.google.com/search?q=simulate+keyboard+key+python.

En espérant vous avoir aidé,
Raspberry Lab.
unclefepster, le 02/02/2021 à 19h47
Merci beaucoup, @RaspberryLab.
Raptop, le 04/02/2020 à 16h42
Bonjour @RaspberryLab,

Pensez-vous qu'il est possible de remplir un tableau vide [ ] avec la valeur du GPIO de la LED qui se fais allumer par le bouton poussoir?
J'ai tenté ça mais je pense que je fais intervenir la mauvaise variable, et je ne vois pas comment récupérer le port GPIO de la LED et l'implanter dans le tableau en sachant que je souhaite comparer ce tableau à un autre tableau à chaque fin de tour puis réinitialiser mon tableau.

Merci d'avance

from time import sleep
import RPi.GPIO as GPIO
import numpy as np

def SequenceLeds(pins):
for pin in pins:
print(str(pin))
GPIO.output(pin, True)
sleep(1)
GPIO.output(pin, False)
sleep(1)


GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)

# Declaration des pins des leds
leds = [16, 17, 18, 19]
boutons = [2, 3]
# Mise en sortie des leds
for gpio in leds:
GPIO.setup(gpio, GPIO.OUT)
GPIO.output(gpio, False)
for btn in boutons:
GPIO.setup(btn, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)
GPIO.input(btn)

for i in range(1, 200):
print("Tour #" + str(i) + ":")
ledsAAllumer = []
for j in range(0, i):
r = np.random.randint(0, len(leds))
ledsAAllumer.append(leds[r])
SequenceLeds(ledsAAllumer)
print ("à vous de jouer")
seq_joueur=[]
joueur=input(seq_joueur.append(boutons))
print(joueur)
if seq_joueur == ledAAllumer:
print("gagné")
else:
print("perdu")

Raptop, le 04/02/2020 à 10h21
Bonjour @RaspberryLab,

Je rencontre un problème au niveau des ports GPIO avec votre programme, j'ai 4 boutons poussoir raccordé sur les entrées GPIO (SDA1, SCL1, GPIO 22 ET 23), seules les entrées SDA1 ET SCL1 fonctionnent correctement, les autres entrées détectent constamment "appui détecté"
Auriez-vous une explication et une solution pour brancher mes 4 boutons poussoir

Merci
Hugo Angonin, le 22/12/2019 à 09h28
Bonjour,
Merci pour se tutoriel très sympathique, mais j'aurais une petite question,
Quand je suis sur l'invite de commande du raspberry, je crée un programme nano, le problème que j'ai c'est;
Comment faire pour que lorsque j'appuie sur l'interrupteur le programme nano se lance?
Merci de votre aide
gBern, le 14/12/2019 à 23h12
Très bon tuto,
pour aller plus loin, comment éviter le rebond mécanique du bouton poussoir.
Vaut-il mieux utiliser un anti rebond logiciel ou matériel ?
Et comment faire. Merci pour vos réponse.
Raspberry Lab, le 22/12/2019 à 10h22
Bonjour @gBern,
Tout va dépendre de l'utilisation de votre programme. Opter pour une solution logicielle impliquerait de mettre le programme en pause (sleep(x)). Cela peut ne pas être dérangeant dans certains cas, mais peut l'être dans d'autres.
La solution la plus propre reste l'anti-rebond électronique. Il suffit de mettre en parallèle du bouton poussoir une capacité, en général de 10nF dans ce genre d'utilisation.

La solution de facilité reste donc la solution logicielle, mais elle peut vite présenter ses limites !

PS. Vous me faites penser qu'il faut que j'ajoute une partie sur le rebond dans ce tutoriel afin qu'il soit complet !

Bonne journée,
RaspberryLab.
Rdayen, le 30/11/2019 à 00h46
Bonjour
Merci pour tuto
Je voudrais connecter un bouton arcade sur mon pi et quand on presse lancer une vidéo (sous vlc par exemple
Dans l idéal je voudrais brancher 2 boutons et que chaque bouton lance une vidéo différente...
Si vous pouvez m aider
Merci
Chawki Zouari, le 16/06/2019 à 00h52
Bonsoir. Merci infiniment pour ce tuto, je voulais juste savoir est-ce que le boutton poussoir est branché comme entrée ou sortie?

Raspberry Lab, le 28/06/2019 à 09h02
Bonjour @Chawki Zouari,
Content que le tuto vous ai plu. Concernant le bouton poussoir, il est branché en entrée, comme l'indique la ligne :

GPIO.setup(pinBtn, GPIO.IN, pull_up_down = GPIO.PUD_DOWN)

Bonne continuation sur RaspberryLab !


Commenter
Votre adresse mail ne sera pas visible sur le site.

Les commentaires sous soumis à vérification avant publication.