mercredi 1 février 2017

Une interface graphique pour contrôler les sorties du Raspberry Pi (Python / Tkinter)

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 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.


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).


#!/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   (TwitterFacebook)

2 commentaires:

  1. Bonjour 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