Bonjour
J'ai fait un programme qui lit l'entrée série RS232
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
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
pi@raspberrypi ~ $ cat >/dev/ttyUSB0
ne me retourne aucun caractere
La configuration du port est
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
Partager