python 与嵌入式板交互的脚本

python script to interact with embedded board

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

您的代码看起来不错。当你通过 pySerial 发送一些东西时,你得到的就是你发送的东西,以及董事会响应的任何东西。我认为您的问题与以下几行有关:

print(ser.readline())

如果您仔细查看 readline() documentation,您会注意到 readline() 只读到 eol 字符。

你的板子 returns 可能看起来像这样:

serv           #your input
\n             #newline character
output_text    #board output
\n             #newline character

但 ser.readline() 在换行符处停止读取,因为它只读取一行。

您应该能够通过调用 ser.readline() 多次(至少两次)直到读取所有输出或使用 other reading methods

之一来解决此问题