首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python 3中的多行串行读取

Python 3中的多行串行读取
EN

Stack Overflow用户
提问于 2019-01-15 17:21:00
回答 1查看 1.1K关注 0票数 0

我正在玩我的PC和STM32开发板之间的双向串行通信。我使用Python3.7与PySerial 3.4一起打开串口,接收/接收来自/到开发板的消息。除了我尝试读取和打印多行消息之外,一切都按预期的方式工作。在这种情况下,我只得到消息的第一行。

在微控制器上的程序是这样的,如果我通过串行发送'H‘到控制器板上,我会得到一个多行帮助消息。开发板发送的多行消息如下所示:

代码语言:javascript
复制
"HELP\r\nList of commands:\r\nH:  Display list of commands\r\nS:  Start the application"

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

代码语言:javascript
复制
HELP
List of commands:
H:  Display list of commands
S:  Start the application

但我只得到了:

代码语言:javascript
复制
HELP

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

我的python代码如下所示:

代码语言:javascript
复制
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)

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2019-01-20 16:10:46

您需要在每一行之后等待新的数据。在此基础上,您的读取方法需要修改如下:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54203887

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档