Cet article a été mis à jour le 1er novembre 2020 afin d'être pleinement compatible avec Python 3.
Il y a quelques années, j'avais partagé quelques scripts en Python permettant d'interagir avec les pins GPIO du Raspberry Pi. Dans cette nouvelle version, j'utilise la bibliothèque Tkinter afin de réaliser en Python un programme comportant une interface graphique.
Lors de l'exécution du programme, une fenêtre comportant 3 cases à cocher s'affiche à l'écran. Il s'agit de cocher une case pour que la pin GPIO correspondante se mette à l'état logique "haut", et de décocher la case pour que la pin GPIO correspondante se mette à l'état logique "bas".
Le script
Deux bibliothèques sont essentielles au bon fonctionnement de notre programme, et elles sont toutes deux incluses par défaut avec Python dans la distribution de base de Raspbian: il s'agit de RPi.GPIO et de Tkinter.
Avec la commande "fenetre.geometry("250x150+300+300")", nous créons un objet fenêtre, que nous nommons "fenetre", dont les dimensions initiales sont 250 pixels de large et 150 pixels de hauteur, et positionnée à 300 pixels à droite du côté gauche de la fenêtre, et 300 pixels plus bas que le haut de la fenêtre.
Chaque case à cocher est associée à une variable ainsi qu'à une procédure ("command"):
"bouton = Checkbutton(fenetre, text="GPIO 2", variable=gpio2, command=miseAjour)".
La variable "gpio2" prend automatiquement la valeur "1" lorsque la case est cochée, et "0" lorsque la case n'est pas cochée (c'est géré automatiquement par la bibliothèque).
La routine "miseAjour" se met en branle chaque fois qu'une des cases à cocher est cliquée (que ce soit pour la cocher, pour pour la décocher). Cette routine règle le niveau logique des broches GPIO 2, 3 et 4 à la valeur de la variable qui leur est associée (gpio2, gpio3 et gpio4).
Yves Pelletier (Twitter, Facebook)
Le circuit
Afin de pouvoir visualiser facilement l'état logique des pins GPIO, une LED associée à une résistance de protection est branchée à chacune des broches suivantes: GPIO 2, GPIO 3 et GPIO 4 (notation BCM).
Évidemment, il est facile de modifier le programme afin d'utiliser d'autre sorties.
Deux bibliothèques sont essentielles au bon fonctionnement de notre programme, et elles sont toutes deux incluses par défaut avec Python dans la distribution de base de Raspbian: il s'agit de RPi.GPIO et de Tkinter.
Avec la commande "fenetre.geometry("250x150+300+300")", nous créons un objet fenêtre, que nous nommons "fenetre", dont les dimensions initiales sont 250 pixels de large et 150 pixels de hauteur, et positionnée à 300 pixels à droite du côté gauche de la fenêtre, et 300 pixels plus bas que le haut de la fenêtre.
Chaque case à cocher est associée à une variable ainsi qu'à une procédure ("command"):
"bouton = Checkbutton(fenetre, text="GPIO 2", variable=gpio2, command=miseAjour)".
La variable "gpio2" prend automatiquement la valeur "1" lorsque la case est cochée, et "0" lorsque la case n'est pas cochée (c'est géré automatiquement par la bibliothèque).
La routine "miseAjour" se met en branle chaque fois qu'une des cases à cocher est cliquée (que ce soit pour la cocher, pour pour la décocher). Cette routine règle le niveau logique des broches GPIO 2, 3 et 4 à la valeur de la variable qui leur est associée (gpio2, gpio3 et gpio4).
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
''' | |
Programme à interface graphique permettant de contrôler | |
3 sorties du Raspberry Pi. | |
Plus d'infos: | |
http://electroniqueamateur.blogspot.ca/2017/02/une-interface-graphique-pour-controler.html | |
''' | |
from tkinter import * # bibliothèque Tkinter, pour création facile d'une interface graphique | |
import RPi.GPIO as GPIO # bibliothèque permettant d'accéder aux pins GPIO | |
# la routine "miseAjour" s'exécute chaque fois qu'on clique sur une case à cocher | |
def miseAjour(): | |
GPIO.output(2,gpio2.get()) | |
GPIO.output(3,gpio3.get()) | |
GPIO.output(4,gpio4.get()) | |
GPIO.setmode (GPIO.BCM) #nous choisissons la notation BCM | |
# les pins GPIO 2, 3, et 4 seront des sorties | |
GPIO.setup(2,GPIO.OUT) # réglage de la pin GPIO 2 | |
GPIO.setup(3,GPIO.OUT) # réglage de la pin GPIO 3 | |
GPIO.setup(4,GPIO.OUT) # réglage de la pin GPIO 4 | |
fenetre = Tk() # création d'une fenêtre | |
fenetre.geometry("250x150+300+300") # taille de la fenêtre et position initiale sur l'écran | |
fenetre.title("Contrôleur de LEDs") # titre de la fenêtre | |
# création des variables qui contiendront l'état des 3 cases à cocher | |
gpio2 = IntVar() | |
gpio3 = IntVar() | |
gpio4 = IntVar() | |
label = Label(fenetre, text=" ") # ligne vide | |
label.pack() | |
label = Label(fenetre, text="Cochez les LEDs à allumer") | |
label.pack() | |
label = Label(fenetre, text=" ") # ligne vide | |
label.pack() | |
# création des 3 cases à cocher: | |
bouton = Checkbutton(fenetre, text="GPIO 2", variable=gpio2, command=miseAjour) | |
bouton.pack() | |
bouton = Checkbutton(fenetre, text="GPIO 3", variable=gpio3, command=miseAjour) | |
bouton.pack() | |
bouton = Checkbutton(fenetre, text="GPIO 4", variable=gpio4, command=miseAjour) | |
bouton.pack() | |
fenetre.mainloop() |
Yves Pelletier (Twitter, Facebook)
Merci beaucoup
RépondreSupprimerBonjour j aimerai avoir le fichier sur mon bureau et en un simple clique je dois tomber sur la fenêtre avec les choix des leds a cocher et non rentrer et l’ouvrir par des lignes de code, pouvez vous m'aider sil vous plait..
RépondreSupprimer