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 :

Lecture du port serie USB/RS232


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 120
    Par défaut Lecture du port serie USB/RS232
    Bonjour

    J'ai fait un programme qui lit l'entrée série RS232
    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
    from twisted.internet import reactor
    from twisted.internet.protocol import Factory, Protocol
    from twisted.internet.serialport import SerialPort
     
    COM_PORT='COM5'
    BAUD_RATE=9600
     
    DEBUG=True
    class USBClient(Protocol):
        def __init__(self, network):
            self.network = network
        def dataReceived(self, data):
            print "Data received", repr(data)
            #check & perhaps modify response and return to client
            self.network.notifyAll(data)
        #...    
     
    class CommandRx(Protocol):
        def connectionMade(self):
            self.factory.client_list.append(self)
        def connectionLost(self, reason):
            if self in self.factory.client_list:
                self.factory.client_list.remove(self)
     
    class CommandRxFactory(Factory):
        protocol = CommandRx
        def __init__(self):
            self.client_list = []
     
        def notifyAll(self, data):
            for cli in self.client_list:
                cli.transport.write(data)
     
    tcpfactory = CommandRxFactory()
    reactor.listenTCP(8001, tcpfactory)
    SerialPort(USBClient(tcpfactory), COM_PORT, reactor, baudrate=BAUD_RATE)
    reactor.run()
    Je connecte un lecteur RFID Innovative ID12 par USB qui envoie le code du badge à chaque fois qu'il est passé devant l'antenne

    Sous Windows 7 la connexion de l'USB m'indique le port COM attribué et le code fonctionne correctement. La sortie m'indique le code de début, \x02 le code du badge en 12 octet suivi de \r\n et du caractère \x03 de fin
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    \x0251008FCFFDEC\r\n\x03
    Sous Raspberry Pi et Rasbian, le port USB ou la RS232 est ttyUSB0 mais les trames reçues ne correspondent pas au codage du badge. On reçois 45 fois le caractère \x00
    La commande sous le shell
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pi@raspberrypi ~ $ cat >/dev/ttyUSB0
    ne me retourne aucun caractere
    La configuration du port est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    pi@raspberrypi ~ $ stty -a < /dev/ttyUSB0
    speed 9600 baud; rows 0; columns 0; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
    eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
    werase = ^W; lnext = ^V; flush = ^O; min = 0; time = 0;
    -parenb -parodd cs8 hupcl -cstopb cread clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr -icrnl -ixon -ixoff -iuclc -ixany -imaxbel-iutf8 -opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0 -isig -icanon -iexten -echo -echoe -echok -echonl -noflsh -xcase -tostop -echoprt -echoctl -echoke
    Est ce que le problème vient de l'encodage sous Linux, vitesse de transmission, paramétrage de la RS232

    Merci de vos idées

  2. #2
    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,

    Le soucis est probablement côté configuration du port RS232 côté Linux.

    Pourquoi vous n'essayez pas de faire fonctionner le script Python qui fonctionne sous Windows sous Rasbian?
    Ce sont les modules Python qui devraient créer des abstractions de ports RS232 qui feront (ou pas) que les paramètres de configuration autres que la vitesse (9600 bauds) seront identiques.
    nota pyserial est supposé fonctionner ainsi mais je ne sais pas pour twisted.internet.serialport.

    Normalement la documentation du "lecteur RFID Innovative ID12" devrait donner la configuration des ports RS232 pour windows et unix.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2003
    Messages
    120
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2003
    Messages : 120
    Par défaut
    Bonjour

    Effectivement il doit s'agir d'un problème de driver car en VirtualBox sous Windows le programme Python fonctionne

    Les signaux RS232 du chip Innovatives ID12 sont du RS232 mais avec un niveau de signal de 5V or l'entrée RS232 du Raspberry Pi est de 3.3V. Pour éviter la conversion je passe par un circuit de conversion RS232/USB, le chip FTDI FT232RL http://www.ftdichip.com/Support/Docu.../DS_FT232R.pdf monté sur une PCB de Sparkfun https://www.sparkfun.com/products/9963

    FTDI dispose de 2 types drivers pour ces chips :
    - un pour VCP http://www.ftdichip.com/Drivers/VCP.htm mais il n'en existe pas sous Linux pour les processeurs ARM
    - un pour D2XX http://www.ftdichip.com/Drivers/D2XX.htm, il y en a un spécifiquement sous Linux pour ARM Raspberry

    Il me semble que le driver qui me serait nécessaire devrait être de type VCP (Virtual Comm port). Les drivers de type D2XX sont fait pour des access par des DLL.
    Malheureusement ceci sort de mon domaine de compétence. Même si j'avais le drivers je ne saurai pas l'installer sous Raspian

    Merci pour votre aide

Discussions similaires

  1. Probleme sur la lecture du port serie
    Par fred 81 dans le forum VB.NET
    Réponses: 4
    Dernier message: 13/06/2016, 21h40
  2. lecture du port serie
    Par ssssa1983 dans le forum Embarqué
    Réponses: 5
    Dernier message: 19/10/2012, 14h14
  3. [WD12] Lecture sur port serie
    Par danca911 dans le forum WinDev
    Réponses: 6
    Dernier message: 28/01/2009, 20h07
  4. Réponses: 0
    Dernier message: 13/09/2008, 17h42
  5. Utilisation des ports (serie, usb, etc.)
    Par muslim1987 dans le forum C++
    Réponses: 2
    Dernier message: 08/07/2008, 13h57

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