J'ai pour projet un petit programme me permettant de dialogué avec une centrale d'alarme via un port série.
J'utilise pour cela la bibliothèque pySerial.
J'arrive a avancer dans les menu mais impossible de revenir en arrière (ce qui dans l'hyperterminal ce fait via la touche echap). J'imagine que il faut que j'encode la touche echap mais je n'y arrive pas. J'ai tenté de capturer les touche clavier de les encoder et de les envoyer (dans un autre code que celui ci dessous) mais le résultat est le même.
Si quelqu'un a la gentillesse de m'aider, ou une idée de piste a creuser, il aura ma total gratitude .
import serial
import serial.tools.list_ports
from tkinter import *
root = Tk()#creer la fenetre
def nouvelleFenetre ():
for widget in root.winfo_children() : #supprime les widgets de la fenetre
widget.destroy()
def ouvertureConnection ():
nouvelleFenetre()
global port_dispo
port_dispo = serial.tools.list_ports.comports(include_links=False) #creer une liste avec tout les ports disponible
if (len(port_dispo) != 0): # on a trouvé au moins un port actif
print(port_dispo[0].device) #affiche le nom du premier port com de la liste dans la console
Label(root, text='port n° '+ port_dispo[0].device+' conecté').pack()#affiche la connection du port com sur interface graphique
global textAenvoyer
textAenvoyer=Entry(root) #entre text a envoyé
textAenvoyer.pack()
Button(root, text='envoi', command=envoieDonne).pack()
else :
print('aucun port com ouvert !') #affiche message d'ereur dans la console
Label(root, text='Aucun port detecté').pack() #affiche message d'erreur sur interface
Button(root, text='Fermer', command=root.destroy).pack()#boutton fermeture fenetre
Button(root, text='actualiser', command=ouvertureConnection).pack()#bouton actualiser connection
def envoieDonne ():
ser = serial.Serial(port_dispo[0].device, baudrate=9600, timeout=1, xonxoff=False, rtscts=False, write_timeout=None, dsrdtr=False, inter_byte_timeout=None, exclusive=None) # ouvre le port com
print(ser.name) # verifie si le bon port com est ouvert
text = textAenvoyer.get() #recupere le text saisie
print(text) #l'affiche dans la console
ser.write(text.encode('latin-1')) # envoie le texte
texteRecu = ser.read(500) #lit 500 octet ou moin si timeout depassé
print (texteRecu.decode('latin-1')) #affiche le resultat dans la console
ser.close() # ferme le port
ouvertureConnection()
root.mainloop()#boucle de la fenetre
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.