Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

commander le port série avec python (pyserial)



  1. #1
    cFranssen

    Arrow commander le port série avec python (pyserial)


    ------

    Bonjour, j'ai fait une carte relais (2) qui se raccorde au pc par le port serie (rs232) et j'ai un programme (phébus) qui fonctionne parfaitement pour allumer et éteindre les relais sous windows (en C). J'aimerais faire un petit scripte en python pour commander mes 2 relais mais je ne trouve rien de convaincant dans google.

    pourquoi en python ? simplement parce-que c'est un langage que je connais et que je continue d'apprendre. Je voudrais aussi par la suite pouvoir programmer divers action suivant des actions exécutées au pc.

    merci d'avance

    -----

  2. Publicité
  3. #2
    ProgVal

    Re : commander le port série avec python (pyserial)

    Bonjour,

    Normalement, tout est ici : http://pyserial.sourceforge.net/

    Cordialement,
    ProgVal

  4. #3
    polo974

    Re : commander le port série avec python (pyserial)

    Si le port série est configuré extérieurement (par stty par ex), il suffit d'ouvrir le bon /dev/tty...
    et d'y accéder en écriture/lecture comme n'importe quel autre fichier.

    Bon, ok, je parle du cas simple de linux (ou autre unix).

    C'est assez efficace, ça permet d'utiliser les appels genre select() quand on surveille plusieurs trucs en même temps sans se poser la question "mais que va bien faire ce p... d'objet", vu qu'on se paluche tout (en fait pas grand chose) à la main...

    Au fait, quel système (wintruc ou linux)?

    Et quelle problématique?
    car accéder au port série, il suffit juste d'écrire dedans, mais il est question d'autres opérations, et là, il s'agit plus de réagir vers le port série (ce qui est simple en soit) suivant des évènements au niveau du PC (ce qui est obscur et donc difficile à dire si simple, complexe ou quasi impossible).
    Jusqu'ici tout va bien...

  5. #4
    cFranssen

    Re : commander le port série avec python (pyserial)

    bonjour, j'ai cherche un peu partout et j'ai finit par pondre ce mini code:
    Code:
    import serial
    
    ser = serial.Serial('/dev/ttyS0', 19200, dsrdtr=0)
    line = ser.readline()
    ser.close()
    merci quand même
    Dernière modification par yoda1234 ; 11/09/2010 à 16h41.

  6. A voir en vidéo sur Futura
  7. #5
    cFranssen

    Re : commander le port série avec python (pyserial)

    sauf que j'ai une autre question:

    comment le faire fonctionner avec tkinter ? pcq franchement, j'en ai pas fais bcp et là je calle

    mon code actuelle:



    Code:
    #-*- coding:Utf8 -*-
    from Tkinter import *
    import serial
    
    
    def on():
    	message.configure(text=" le relais est ON ", fg= 'blue')
    	
    	ser = serial.Serial('/dev/ttyS0', 19200, dsrdtr=1)	
    	
    	
    def off():
    	message.configure(text=" le relais est OFF", fg= 'red')
    	
    	ser = serial.Serial('/dev/ttyS0', 19200, dsrdtr=0)
    	
    
    def rouge():
    	message2.configure(text=" le relais est ON ", fg= 'blue')
    def bleu():
    	message2.configure(text=" le relais est OFF", fg= 'red')
    
    fen1 = Tk()
    fen1.title('cFranssen')
    
    message = Label(text="",fg="white")
    message.grid(row=1, column=3, columnspan=2)
    message2 = Label(text="",fg="white")
    message2.grid(row=2, column=3, columnspan=2)
    
    bou1 = Button(fen1,text='relais 1 ON',state="normal", command=on)
    bou1.grid(row=1 , column=1)
    
    bou2 = Button(fen1,text='relais 1 OFF',state="normal",command=off)
    bou2.grid(row=1 , column=2)
    
    bou3 = Button(fen1,text='relais 2 ON',state="normal",command=rouge)
    bou3.grid(row=2 , column=1)
    
    bou4 = Button(fen1,text='relais 2 OFF',state="normal",command=bleu)
    bou4.grid(row=2 , column=2)
    
    bou5 = Button(fen1, text='Quitter', command = fen1.destroy)
    bou5.grid(row=4 , column=1)
    
    
    fen1.mainloop()
    fen1.destroy()         
    line = ser.readline()
    ser.close()
    merci d'avance
    Dernière modification par yoda1234 ; 11/09/2010 à 16h41.

  8. #6
    yoda1234

    Re : commander le port série avec python (pyserial)

    Merci d'utiliser les balises à ta disposition, en particulier celle-ci:
    Là où l'ignorance est un bienfait, c'est de la folie d'être sage (Thomas Gray).

  9. Publicité
  10. #7
    polo974

    Re : commander le port série avec python (pyserial)

    Tu configures le contrôle de flux en dsrdtr, c'est pas ce que tu veux sauf erreur, tu veux positionner DTR.

    conclusion:
    il faut fouiller pour trouver les fonctions (non documentées):
    Code:
    def setDTR(self, level=1):
        ...
    def setRTS(self, level=1):
        ...
    dans le source...
    Ensuite, le mieux est d'ouvrir le port une fois pour toute au début, et non à chaque fois...

    Question: à quoi sert le readline sur le port série à la fin du programme???
    Jusqu'ici tout va bien...

  11. #8
    cFranssen

    Re : commander le port série avec python (pyserial)

    en effet, dtr s'éteind simplement parce-que j'ouvre le port serie.

    c'est là qu'on voit que je n'en ai plus fait de puis longtemps.

    il faut mettre quoi dans

    Code:
    def setDTR(self, level=1):
                           ????

  12. #9
    polo974

    Re : commander le port série avec python (pyserial)

    Il faut rien mettre dedans, il faut utiliser:
    ser.setDTR(1)
    ou
    ser.setDTR(0)
    semble une bonne idée
    Jusqu'ici tout va bien...

  13. #10
    cFranssen

    Re : commander le port série avec python (pyserial)

    Ok MERCI ça fonctionne:

    Code:
    import serial
    ser = serial.Serial('/dev/ttyS0', 19200)
    
    while 1:
        a= input("position 1 ou 0 ?")
        if a==0:
            ser.setDTR(1)
            print "le relais est off"
        else:
            ser.setDTR(0)
            print "le relais est on"
    ser.close()
    encore merci
    je vais essayer de faire une fenêtre tkinter

  14. #11
    cFranssen

    Re : commander le port série avec python (pyserial)

    bonjour, voilà ça fonctionne:

    Code:
    #-*- coding:Utf8 -*-
    from Tkinter import *
    import serial
    
    
    def relais_1_on():
        message.configure(text=" le relais est ON ", fg= 'blue')
        ser.setDTR(1)
        
        
    def relais_1_off():
        message.configure(text=" le relais est OFF", fg= 'red')
        ser.setDTR(0)
        
    
    def relais_2_on():
        message2.configure(text=" le relais est ON ", fg= 'blue')
        ser.setRTS(1)
        
    def relais_2_off():
        message2.configure(text=" le relais est OFF", fg= 'red')
        ser.setRTS(0)
    
    fen1 = Tk()
    fen1.title('cFranssen')
    
    message = Label(text="",fg="white")
    message.grid(row=1, column=3, columnspan=2)
    message2 = Label(text="",fg="white")
    message2.grid(row=2, column=3, columnspan=2)
    
    ser = serial.Serial('/dev/ttyS0', 19200)
    
    bou1 = Button(fen1,text='relais 1 ON',state="normal", command=relais_1_on)
    bou1.grid(row=1 , column=1)
    
    bou2 = Button(fen1,text='relais 1 OFF',state="normal",command=relais_1_off)
    bou2.grid(row=1 , column=2)
    
    bou3 = Button(fen1,text='relais 2 ON',state="normal",command=relais_2_on)
    bou3.grid(row=2 , column=1)
    
    bou4 = Button(fen1,text='relais 2 OFF',state="normal",command=relais_2_off)
    bou4.grid(row=2 , column=2)
    
    bou5 = Button(fen1, text='Quitter', command = fen1.destroy)
    bou5.grid(row=4 , column=1)
    
    
    fen1.mainloop()
    fen1.destroy()         
    ser.close()

    maintenant, comment actionner les relais avec l'horloge du pc ?

    encore merci

Discussions similaires

  1. Commande de 3 relais avec port serie DB9
    Par torjemen dans le forum Électronique
    Réponses: 69
    Dernier message: 27/06/2010, 01h17
  2. envoyer des caractere sur port serie avec gtk+
    Par megazed dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 14/03/2010, 18h29
  3. PYTHON: liaison série
    Par perchman dans le forum Logiciel - Software - Open Source
    Réponses: 13
    Dernier message: 05/12/2006, 12h44
  4. Port serie sur 16F877 avec CCS
    Par joseph4008 dans le forum Électronique
    Réponses: 7
    Dernier message: 12/07/2006, 17h56
  5. piloter un moteur avec un port serie
    Par taopay dans le forum Électronique
    Réponses: 7
    Dernier message: 18/10/2005, 06h42