繁体   English   中英

Python 3中的多行串行读取

[英]Multiline serial read in Python 3

我正在PC和STM32开发板之间进行双向串行通信。 我正在将Python 3.7PySerial 3.4一起使用以打开串行端口并从开发板接收消息/从开发板接收消息。 除了我尝试阅读和打印多行消息时,其他所有工作都按预期进行。 在这种情况下,我只会得到消息的第一行。

如果我通过串行将“ H”发送到控制器板上,那么微控制器上的程序就可以返回多行帮助消息。 开发板发回的多行消息如下所示:

"HELP\r\nList of commands:\r\nH:  Display list of commands\r\nS:  Start the application"

因此,我希望看到以下打印输出:

HELP
List of commands:
H:  Display list of commands
S:  Start the application

但是相反,我只会得到:

HELP

如果我使用PuTTY连接到端口并手动发送“ H”,则会收到完整的消息; 所以我知道这不是我的微控制器程序的问题。

我的python代码如下所示:

import serial
import io

class mySerial:
    def __init__(self, port, baud_rate):
        self.serial = serial.Serial(port, baud_rate, timeout=1)
        self.serial_io_wrapped = io.TextIOWrapper(io.BufferedRWPair(self.serial, self.serial))

    # receive message via serial
    def read(self):
        read_out = None
        if self.serial.in_waiting > 0:
            read_out = self.serial_io_wrapped.readline()
        return read_out

    # send message via serial
    def write(self, message):
        self.serial.write(message)

    # flush the buffer
    def flush(self):
        self.serial.flush()


commandToSend = 'H'
ser = mySerial('COM9', 115200)

ser.flush()
ser.write(str(commandToSend).encode() + b"\n")

while True:
    incomingMessage = ser.read()
    if incomingMessage is not None:
        print(incomingMessage)

任何帮助将非常感激。

您需要在每行之后等待新数据。 基于此,您的read方法需要进行如下修改:

def read(self):
    read_out = None
    timeout = time.time() + 0.1
    while ((self.serial.in_waiting > 0) and (timeout > time.time())):
        pass
    if self.serial.in_waiting > 0:
        read_out = self.serial_io_wrapped.readline()
    return read_out

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM