web-dev-qa-db-ja.com

Python:シリアルポートへの書き込みとシリアルポートからの読み取り

私はドキュメントを読みましたが、これに対する正解を見つけることができないようです。コンピューターに接続されているモデムが使用しているすべてのCOMポートのリストがあります。このリストから、それを開いてコマンドを送信し、何か返事があった場合は別のリストに追加しようとします。 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

Ser.read()から何も取得していません。常に空の文字列が表示されます。

5
RageCage

ser.read(64)ser.read(size=64)である必要があります。 ser.readは、位置ではなくキーワード引数を使用します。

また、ポートから2回読み取っています。あなたがおそらくやりたいことはこれです:

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

pythonで動作し、他の誰かが必要とする場合に備えてrs232を読み取るコード

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