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
之一来解决此问题
我想编写一个 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
之一来解决此问题