如何从端口通信中读取?

时间:2016-11-15 16:06:04

标签: python uart

我正在尝试使用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

不要给我任何结果。

1 个答案:

答案 0 :(得分:1)

最有可能发生的事情是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设备可能会很棘手,设置一个读取器线程可能会很有用,该线程会将接收到的数据推送到queue.Queue对象中,就像所描述的那样here。或者,如果您感觉很冒昧,请尝试使用asyncio模块。