Pyserial Com3 Port не выводится?Windows 7 - PullRequest
0 голосов
/ 13 июня 2018

Я пытаюсь прочитать данные с простого последовательного порта USB COM3 с помощью PySerial.

Мой код выглядит следующим образом:

import serial
import time

ser = serial.Serial("COM3", 230400, timeout=2) #Also tried timeout=None, loads to infinity then
print (ser)

while True:
  line = ser.readline() #also tried read()
  print(line)
  time.sleep(1)

Выход консоли:

print(ser) => Serial<id=0x2757c50, open=True>(port='COM3', baudrate=230400, bytesize=8, parity='N', stopbits=1, timeout=2, xonxoff=False, rtscts=False, dsrdtr=False)

Я пытался возиться слогические атрибуты объекта Serial ser (например, xonxoff) безуспешно

print(line) => empty string или b''

Я пытался проверить это вPython 2.7 и Python 3.6.5.

Вывод списка всех COM-портов через serial.tools.list_ports.comports() возвращает это:

COM3 - USB Serial Port (COM3)
COM46 - com0com - serial port emulator CNCA0 (COM46)
COM47 - com0com - serial port emulator CNCB0 (COM47)

Когда я использую программу HDTerm, я получаю следующий вывод: Screenshot_HDTerm_COM3_Port_Output

Таким образом, порт на самом деле что-то возвращает, но я не могу как-то прочитать данные из python.Параметры в моем коде Python такие же, как и в HDTerm.

Есть идеи, почему Python ничего не печатает (или загружает в бесконечность, если timeout=None)?

PS .: COM46 и COM47 прекрасно работают в Python и HDTerm.Но у них есть другие выходы (только отправка и получение данных друг от друга).

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я решил проблему сам сейчас.

Мне пришлось сделать ser.dtr=False

Хотя print(ser) показал, что параметр dsrdtr=False (который я интерпретирую как «dsr and dtr» ) атрибут set.dtr остался равным True (тест с print(set.dtr).

. Необходимо вручную установить dtr на False, как показано выше. Кажется, чтонемного странно для меня, может быть, ошибка?

0 голосов
/ 13 июня 2018

если я вас правильно понял.
попробуйте

type(ser)

таким образом, вы узнаете тип 'ser', если он повторяется (список, кортеж и т. Д.), Выможно попробовать:

for s in ser:
    print s
    time.sleep(1)

надеюсь, это поможет.

...