web-dev-qa-db-fra.com

Python: écriture et lecture à partir du port série

J'ai lu la documentation, mais je n'arrive pas à trouver une réponse directe à ce sujet. J'ai une liste de tous les ports COM utilisés par les modems connectés à l'ordinateur. À partir de cette liste, j'essaie de l'ouvrir, de lui envoyer une commande et, s'il dit quelque chose, de l'ajouter à une autre liste. Je ne suis pas entièrement sûr d'utiliser correctement les fonctions de lecture et d'écriture de pyserial.

i=0
for modem in PortList:
    for port in modem:
        try:
            ser = serial.Serial(port, 9600, timeout=1)
            ser.close()
            ser.open()
            ser.write("ATI")
            time.sleep(3)
            print ser.read(64)
            if ser.read(64) is not '':
                print port
        except serial.SerialException:
            continue
        i+=1

Je ne tire rien de ser.read (). Je reçois toujours des chaînes vides.

5
RageCage

ser.read(64) doit être ser.read(size=64); ser.read utilise des arguments de mots clés, pas de position.

De plus, vous lisez deux fois depuis le port; ce que vous voulez probablement faire, c'est ceci:

i=0
for modem in PortList:
    for port in modem:
        try:
            ser = serial.Serial(port, 9600, timeout=1)
            ser.close()
            ser.open()
            ser.write("ATI")
            time.sleep(3)
            read_val = ser.read(size=64)
            print read_val
            if read_val is not '':
                print port
        except serial.SerialException:
            continue
        i+=1
6
Chaosphere2112

un morceau de code qui fonctionne avec python pour lire rs232 juste au cas où quelqu'un d'autre en aurait besoin

ser = serial.Serial('/dev/tty.usbserial', 9600, timeout=0.5)
ser.write('*99C\r\n')
time.sleep(0.1)
ser.close()
5
PHMADEIRA