我想编写一个Python脚本,通过COM4与嵌入式主板进行交互。
我使用了Teraterm并且能够执行我想要的。基本上,我只想从董事会获得一些信息 例如:如果我发送Ver,董事会会回复版本号 如果我发送Serv,董事会会回复其服务列表
我不知道如何编写Python脚本来实现相同的目标。
以下是我的代码。 问题是ser.readline()正在阅读我发送的内容。输出是:b'ver'和b'serv'。
请建议我在脚本中应该做些哪些更改才能使其正常工作。
感谢。
import serial
import time
import sys
ser = serial.Serial(baudrate=115200, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=5.0)
ser.port = "COM4"
ser.open()
if ser.isOpen():
print("Open: ",ser.portstr)
print('--------')
ser.write(bytes('ver',encoding='ascii'))
time.sleep(1)
print(ser.readline())
time.sleep(1)
ser.write(bytes('serv',encoding='ascii'))
time.sleep(1)
print(ser.readline())
ser.close()
为简单起见,我只使用了以下代码。在这种情况下,我得到一个空白输出b''连续。
import serial
import time
import sys
ser = serial.Serial(baudrate=115200, bytesize=serial.EIGHTBITS, parity=serial.PARITY_NONE, stopbits=serial.STOPBITS_ONE, timeout=5.0)
ser.port = "COM4"
ser.open()
if ser.isOpen():
print("Open: ",ser.portstr)
print('--------')
ser.write(bytes('ver',encoding='ascii'))
while 1:
print(ser.readline())
ser.close()
答案 0 :(得分:1)
您的代码看起来很好。当您通过pySerial发送内容时,您收到的内容就是您发送的内容以及主板响应的内容。我认为您的问题与以下几行有关:
print(ser.readline())
如果查看readline() documentation,您会注意到readline()只读取eol字符。
您的电路板返回的内容可能如下所示:
serv #your input
\n #newline character
output_text #board output
\n #newline character
但是ser.readline()停止读取换行符,因为它只读取一行。
您应该能够通过多次调用ser.readline()(至少两次)来解决此问题,直到读取所有输出或使用other reading methods
之一