Pyserial Com3端口没有输出? Windows 7的

时间:2018-06-13 11:53:06

标签: python serial-port pyserial

我试图通过PySerial从简单的COM3 USB串口读取数据。

我的代码如下:

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)

控制台Outupt:

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

我试图弄乱串行对象ser的布尔属性(例如xonxoff)但没有成功

print(line) =&GT; empty stringb''

我尝试在Python 2.7和Python 3.6.5中测试它。

通过serial.tools.list_ports.comports()列出所有COM端口返回:

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

所以Port实际上返回了一些内容,但我无法以某种方式从python中读取数据。我的Python代码中的参数与HDTerm中的参数相同。

任何想法为什么Python什么都不打印(或加载到无穷大,如果timeout=None)?

PS:COM46&amp; COM47在Python和HDTerm中运行得非常好。但是他们有其他输出(仅发送和接收数据)。

2 个答案:

答案 0 :(得分:0)

如果我找对你。
尝试

type(ser)

这样你就会知道&#39; ser&#39;的类型,如果它是可迭代的(列表,元组等等),你可以尝试:

for s in ser:
    print s
    time.sleep(1)
希望这有帮助。

答案 1 :(得分:0)

我现在自己解决了这个问题。

我必须做ser.dtr=False

即使print(ser)显示参数dsrdtr=False(我将其解释为“dsr和dtr”),属性set.dtr仍然是{{1 (用True测试。

您必须手动将print(set.dtr)设置为dtr,如上所示。对我来说似乎有点奇怪,也许是一个bugg?