IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Serial et exceptions


Sujet :

Python

  1. #1
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut Serial et exceptions
    Bonsoir,

    Comme c'est mes débuts en programmation sous Pyhton, j'ai plein de question. J'ai en parti résolu mes soucis avec la partie GUI dans le fourum qui lui est dédié, je passe maintenant à la suite qui est d'ordre série.

    En effet, afin, de piloter un robot assez complexe, j'ai besoin de transmettre des infos sur l'USB via l'objet Serial. J'en ai fais déjà l'essai (trop succinct et rapide) sur un autre PC en python 3.0 mais là, je suis parti sur le 2.0 car j'ai un plus grand confort sur ce PC.

    Pour faire simple, j'ai volontairement éliminé mon équipent série sur lequel je dois communiqué. Le but est donc de détecté s'il est branché, et de se connecté si il trouve l'objet en question.

    J'ai donc écris ceci (repris de l'essai que j'avais fait).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    # -- IMPORTATION --
     
    import Tkinter as tk
    #import tkinter as tk
     
    import serial
     
    ser = serial.Serial('/dev/ttyUSB0', 9600)
    Bon, je pense qu'il faille dire si l'objet situé en "/dev/ttyUSB0" est présent on passe à la suite. Sinon, on laisse l'appli tourné mais avec une belle erreur dans le log. Cela me fais pensé que j'ai pas encore inclue de log...

    Bon, je ne sait pas trop si quelque-chose de simple peut-être fait. Je demande à tout hazard.

    Merci.

  2. #2
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Bonjour,

    Bon, j'ai trouvé quelques informations sur la protection que je veux faire. Cependant, je rencontre un nouveau souci. Je suis passé en python 3.2.3

    Et dès que je met "import serial" j'ai un jolie message d'erreur tel que:
    Python 3.2.3 (default, Feb 27 2014, 21:31:18)
    [GCC 4.6.3] on linux2
    Type "copyright", "credits" or "license()" for more information.
    ==== No Subprocess ====
    >>>
    Traceback (most recent call last):
    File "/home/alexandre/Bureau/Python/POSL-Rover.py", line 9, in <module>
    import serial
    ImportError: No module named serial
    >>>
    Et là, je ne sait pas comment faire. Sous Python 2 ça fonctionne. Mais je dois migrer sous Python 3 de toute façon.

    Je serais content d'arriver à résoudre ce souci.

    Merci.

  3. #3
    Expert confirmé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Points : 4 805
    Points
    4 805
    Billets dans le blog
    6
    Par défaut
    tu doit pour cela installer le module PySerial
    http://pyserial.sourceforge.net/
    Rien, je n'ai plus rien de pertinent à ajouter

  4. #4
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Et oui
    Il faut donc installer une lib qui était disponible sous Synaptic...

    Bon, cette fois-ci ça marche. Et j'ai pu sécurisé l'affaire.

    Aller, je vous met ce que j'ai écrit. Rien de bien difficile mais c'est sympa à faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #!/usr/bin/python
    # -*- coding: iso-8859-15 -*-
     
    # -- IMPORTATION --
     
    #import Tkinter as tk
    import tkinter as tk
     
    import serial
    serialConnection = 0
     
    locations=['/dev/ttyUSB0', '/dev/ttyUSB1', '/dev/ttyUSB2', '/dev/ttyUSB3', '/dev/ttyS0', '/dev/ttyS1', '/dev/ttyS2', '/dev/ttyS3']
     
    for device in locations:
        try:
            print("Tentative de connecion sur...",device)
            ser = serial.Serial(device, 9600)
            serialConnection = 1
            break
        except:
            print("Connection échoué sur",device)
    Et bien sûr ensuite, on test si on a pu activé d'où mon serialConnection = 0 au départ et qui passe à 1 en cas de connexion. ce qui donne plus loin :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    # -- FONCTION TOURNER A GAUCHE SUR PLACE --
    def tournerGaucheSurPlace():
        print("Tourner a gauche sur place")
        if serialConnection == 1:
            ser.write("!,1,0,100,1,100,0,100,1,100,*")
    Bon, je peux passer à la suite ! Ouf

    Merci pour tout.

  5. #5
    Expert confirmé
    Avatar de TiranusKBX
    Homme Profil pro
    Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Inscrit en
    Avril 2013
    Messages
    1 476
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur C, C++, C#, Python, PHP, HTML, JS, Laravel, Vue.js
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 476
    Points : 4 805
    Points
    4 805
    Billets dans le blog
    6
    Par défaut
    personnellement j'utiliserait plus un truc comme ce qui vas suivre, il à l’intérêt de ne pas à avoir à fournir une liste
    Code Python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    import glob
    import serial
     
     
    def serial_ports():
        """Lists serial ports
     
        :raises EnvironmentError:
            On unsupported or unknown platforms
        :returns:
            A list of available serial ports
        """
        if sys.platform.startswith('win'):
            ports = ['COM' + str(i + 1) for i in range(256)]
     
        elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'):
            # this is to exclude your current terminal "/dev/tty"
            ports = glob.glob('/dev/tty[A-Za-z]*')
     
        elif sys.platform.startswith('darwin'):
            ports = glob.glob('/dev/tty.*')
     
        else:
            raise EnvironmentError('Unsupported platform')
     
        result = []
        for port in ports:
            try:
                s = serial.Serial(port)
                s.close()
                result.append(port)
            except (OSError, serial.SerialException):
                pass
        return result
     
     
    if __name__ == '__main__':
        print(serial_ports())
    Rien, je n'ai plus rien de pertinent à ajouter

  6. #6
    Membre régulier Avatar de Caxton
    Homme Profil pro
    Sans
    Inscrit en
    Janvier 2005
    Messages
    586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Corrèze (Limousin)

    Informations professionnelles :
    Activité : Sans

    Informations forums :
    Inscription : Janvier 2005
    Messages : 586
    Points : 123
    Points
    123
    Par défaut
    Wah ! C'est bien jolie ce code

    Bon, alors, je pense comprendre quelques bribe. On crée une sorte de tableau qui contiendrais donc la liste des ports. Sauf que j'ai pas mal d'erreur
    Et puis, je pense que la technique que j'avais utilisé avec le boolean de protection était quand même pratique. Il faut donc que je retravaille dessus.

    Pour le fun :
    Python 3.2.3 (default, Feb 27 2014, 21:31:18)
    [GCC 4.6.3] on linux2
    Type "copyright", "credits" or "license()" for more information.
    ==== No Subprocess ====
    >>>
    Traceback (most recent call last):
    File "/home/alexandre/Bureau/Python/POSL-Rover.py", line 45, in <module>
    print(serial_ports())
    File "/home/alexandre/Bureau/Python/POSL-Rover.py", line 21, in serial_ports
    if sys.platform.startswith('win'):
    NameError: global name 'sys' is not defined

Discussions similaires

  1. Exception dans le serialization
    Par sayfouche dans le forum ASP.NET MVC
    Réponses: 5
    Dernier message: 18/07/2011, 13h27
  2. Exception & Try..catch
    Par PurL dans le forum C++Builder
    Réponses: 2
    Dernier message: 11/12/2002, 15h35
  3. Réponses: 3
    Dernier message: 01/11/2002, 14h30
  4. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  5. c: gestion des exceptions
    Par vince_lille dans le forum C
    Réponses: 7
    Dernier message: 05/06/2002, 14h11

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo