我试图通过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 string
或b''
我尝试在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中运行得非常好。但是他们有其他输出(仅发送和接收数据)。
答案 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?