我正在尝试使用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
不要给我任何结果。
答案 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
模块。