如何从一个端口读取通信?

How to read from a port communication?

我正在尝试使用 Python 文件与我的模块通信。我创建换行点以确保在模块中写入时会出现中断。

但是,我没有从端口通信读取任何结果。我需要在我的 cmd.exe 中显示所有数据,并且已经使用我的 python 文件

在 COM4 上显示了这些数据
import serial
ser = serial.Serial(
    port='COM4',\
    baudrate= 230400,\
    parity=serial.PARITY_NONE,\
    stopbits=serial.STOPBITS_ONE,\
    bytesize=serial.EIGHTBITS,\
        timeout=0)  # open serial port
print(ser.name)         # check which port was really used
ser.write(b'hello')     # write a string
str=ser.readline()
print str
ser.close()             # close ports

也就是说这两行:

str=ser.readline() 
print str

不要给我任何结果。

最有可能发生的情况是 ser.readline() 正在等待串行端口接收到一个换行符 (\n),但没有收到,因此挂起。如果您的串行端口设置为回显您发送的内容,您可能需要在发送的数据中包含换行符,即

ser.write(b'Hello\n')

或者,如果您的串行设备需要 Windows 样式的换行符:

ser.write(b'Hello\r\n')

如果你仍然没有得到任何回应,你可以在你的 ser.write 语句之后尝试调试

while True:
    print(ser.read(1).decode())

为了在返回时显示每个字节注意:仅使用上面的调试,它会挂起,直到设备在您的脚本之外关闭。

如果您什么也没看到,那么可能有一些更基本的事情正在发生,比如串口设置。我注意到您的波特率不是 standard baud rate,您确定是这样吗?

旁注:serial.Serial 声明中的每个参数后不需要反斜杠,文本位于括号内这一事实使代码有效。此外,您为大多数参数提供了默认参数,因此根本不需要包含它们。

另外:使用阻塞在 read 上的 I/O 设备可能会很棘手,设置一个 reader 线程将接收到的数据推送到 queue.Queue 对象如所描述的那样 here。或者,如果您喜欢冒险,请尝试使用 asyncio 模块。