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 :

Lecteur RFID USB prolbème dans la definition vendor et product ID


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut Lecteur RFID USB prolbème dans la definition vendor et product ID
    Bonjour,

    J'ai un lecteur RFID USB dont j'aimerais capter ce qu'il lit avec un un script Python.
    Voici son port USB :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Bus 003 Device 002: ID 0403:6001 Future Technology Devices International, Ltd FT232 USB-Serial (UART) IC
    J'ai une application JAVA qui est fournie en l'application et en code source pour ce genre de lecteur mais je capte encore moins en JAVA qu'en Python ou Perl . J'ai remarqué qu'il me manquait des informations avec cette dernière tel que le RSSI qui correspond à la puissance du signal reçu.

    J'ai repris un script qui est destiné à une scannette de code barre en espérant que cela me sorte quelque chose :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    import sys
    import usb.core
    import usb.util
     
    def lecture_rfid():
       VENDOR_ID = 0x0403
       PRODUCT_ID = 0x6001
     
       DATA_SIZE = 16 # 224
       BADGE_CODE = {0x1E:'1', 0x1F:'2', 0x20:'3', 0x21:'4', 0x22:'5', 0x23:'6', 0x24:'7'
        , 0x25:'8', 0x26:'9', 0x27:'0', 0x28:''} # 28=enter
     
    device = usb.core.find(idVendor=VENDOR_ID, idProduct=PRODUCT_ID)
     
    if device is None:
        sys.exit("Could not find RFID Reader.")
     
    if device.is_kernel_driver_active(0):   # On détache le périphérique du kernel, plus d'envoi sur stdin
        try:
            device.detach_kernel_driver(0)
        except usb.core.USBError as e:
            sys.exit("Could not detatch kernel driver: %s" % str(e))
     
     
     
    endpoint = device[0][(0,0)][0]
    data = []
    lu = False
    print "Waiting to read..."
    lecture=''
     
    while 1:
        try:
            data += device.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize)
     
            if not lu:
                print "Waiting to read..."
            lu = True
     
        except usb.core.USBError as e:
            if e.args == (110,'Operation timed out') and lu:
                if len(data) < DATA_SIZE:
                    print "Lecture incorrecte, recommencez. (%d bytes)" % len(data)
                    print "Data: %s" % ''.join(map(hex, data))
                    data = []
                    lu = False
                    continue
                else:
                    for n in range(0,len(data),16):
                        print ' '.join(map(hex,data[n:n+16]))
                        lecture+=BADGE_CODE[data[n+2]]
                    break   # Code lu
    return lecture
     
    if __name__ == '__main__':
    print lecture_rfid()
    A la commande sudo python RFDI_reader.py j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       File "RFDI_reader.py", line 19
    SyntaxError: Non-ASCII character '\xc3' in file RFDI_reader.py on line 19, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
    Comment savoir si mon script s'est bien connecté?
    Comment puis je avoir une sortie acssii?

    D'avance merci.

  2. #2
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Citation Envoyé par dubis Voir le message
    A la commande sudo python RFDI_reader.py j'ai le message d'erreur suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       File "RFDI_reader.py", line 19
    SyntaxError: Non-ASCII character '\xc3' in file RFDI_reader.py on line 19, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
    Ok, je pense que j'ai posté un peut rapidement et j'en suis désolé. J'ai donc finalement lu la page http://python.org/dev/peps/pep-0263/ jusqu'au bout. Ce qui a modifié l'entrée mon script comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/usr/bin/python
    # -*- coding: utf-8 -*-
     
    import sys
    import usb.core
    import usb.util
    CE qui a modifié mon message d'erreur comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ ./RFID_Reader.py 
      File "./RFID_Reader.py", line 59
        print lecture_rfid()
            ^
    IndentationError: expected an indented block
    Normalement, je devrai avoir "Could not find RFID Reader." puisqu'il n'est pas connecté. :-/

    Merci de votre aide.

  3. #3
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Votre script fonctionnerait mieux si les blocks étaient correctement indentés. Mais comme vous n'allez pas en tirer grand chose, pourquoi ne pas essayer de travailler avec les exemples données dans la documentation?

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  4. #4
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Merci Witz,

    A ce que j'ai compris, j'avais un tas d'erreur car le paquet python-usb n'était pas installé. Encore désolé
    Le script suivant exécuté en sudo :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    #!/usr/bin/python
    import usb.core
    import usb.util
     
    # retour lsusb 0403:6001
    device = usb.core.find(idVendor=0x0403, idProduct=0x6001)
    if device is None:
    	raise ValueError('Our device is not connected')
     
    endpoint = device[0][(0,0)][0]
    print "Carte %s" % endpoint
    M'a retourné ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Carte       ENDPOINT 0x81: Bulk IN ===============================
           bLength          :    0x7 (7 bytes)
           bDescriptorType  :    0x5 Endpoint
           bEndpointAddress :   0x81 IN
           bmAttributes     :    0x2 Bulk
           wMaxPacketSize   :   0x40 (64 bytes)
           bInterval        :    0x0
    Du coup, avant de faire une boucle while, j'ai 'essayé d'avoir une simple ligne de data et j'ai modifié mon script comme ceci:
    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
     
    #!/usr/bin/python
    import usb.core
    import usb.util
     
    # 0403:6001
    device = usb.core.find(idVendor=0x0403, idProduct=0x6001)
    if device is None:
    	raise ValueError('Our device is not connected')
     
    endpoint = device[0][(0,0)][0]
    print "Carte %s" % endpoint	
     
    data = device.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize)
    print "Data : %s "  % data
    Cela m'a retourné ceci qui n'est pas beau à voir :
    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
    22
    23
    24
    25
    Carte       ENDPOINT 0x81: Bulk IN ===============================
           bLength          :    0x7 (7 bytes)
           bDescriptorType  :    0x5 Endpoint
           bEndpointAddress :   0x81 IN
           bmAttributes     :    0x2 Bulk
           wMaxPacketSize   :   0x40 (64 bytes)
           bInterval        :    0x0
    Traceback (most recent call last):
      File "./pyusb_test2.py", line 14, in <module>
        data = device.read(endpoint.bEndpointAddress, endpoint.wMaxPacketSize)
      File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 975, in read
        intf, ep = self._ctx.setup_request(self, endpoint)
      File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 102, in wrapper
        return f(self, *args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 216, in setup_request
        self.managed_claim_interface(device, intf)
      File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 102, in wrapper
        return f(self, *args, **kwargs)
      File "/usr/local/lib/python2.7/dist-packages/usb/core.py", line 167, in managed_claim_interface
        self.backend.claim_interface(self.handle, i)
      File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 811, in claim_interface
        _check(self.lib.libusb_claim_interface(dev_handle.handle, intf))
      File "/usr/local/lib/python2.7/dist-packages/usb/backend/libusb1.py", line 595, in _check
        raise USBError(_strerror(ret), ret, _libusb_errno[ret])
    usb.core.USBError: [Errno 16] Resource busy
    J'ai déduit la capture de la variable data d'apres le premier script de mon premier post. je vais encore creuser
    Merci de votre aide

  5. #5
    Membre très actif
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 299
    Par défaut
    Bonjour,

    Après réflexion et beaucoup de test et de recherche : Comment doit je faire pour interroger les différentes adresse de al carte et les mettre en forme?
    J'espère que cela ne fait pas trop

    D'avance merci

  6. #6
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 741
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 741
    Par défaut
    Salut,

    Citation Envoyé par dubis Voir le message
    Après réflexion et beaucoup de test et de recherche : Comment doit je faire pour interroger les différentes adresse de al carte et les mettre en forme?
    Aucune idée! En fait, vous avez juste connecté votre carte à un bus USB. Vous souhaiteriez pouvoir lui expédier des commandes via un programme Python mais c'est insuffisant côté "protocole" pour savoir quoi expédier et ce qu'on peut espérer recevoir.

    Vous devriez avoir un minimum de documentation livrée avec la carte et des programmes de tests ou d'exemples voire même une sorte de "driver" qui ferait le boulot de bas niveau. Peut être que le constructeur a mis en place un support et/ou des forums spécifiques dans lesquels farfouiller.
    En tous cas, seules des personnes qui ont joué avec cette carte pourront vous aider.... et il est peu probable qu'elles lisent le forum Python.
    Désolé.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. Réponses: 8
    Dernier message: 30/04/2014, 10h50
  2. Code pour lire une carte RFID via un lecteur RFID (connexion USB)
    Par sethgreen dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 20/04/2012, 17h56
  3. Log in session windows en utilisant un lecteur RFID
    Par azerothkeeper dans le forum Windows
    Réponses: 2
    Dernier message: 08/01/2009, 15h12
  4. Aligner terme et définition dans une Definition list
    Par Neuromancien2 dans le forum Mise en page CSS
    Réponses: 3
    Dernier message: 23/08/2007, 22h13
  5. Detecter la position de lecteur amovible USB
    Par Socrat dans le forum C++Builder
    Réponses: 5
    Dernier message: 30/06/2007, 12h34

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