python脚本与嵌入式板交互

时间:2015-08-19 19:19:26

标签: python embedded pyserial

我想编写一个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()

1 个答案:

答案 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

之一