如何从一个端口读取通信?
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
模块。
我正在尝试使用 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
模块。