首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >pyserial -如何读取从串行设备发送的最后一行

pyserial -如何读取从串行设备发送的最后一行
EN

Stack Overflow用户
提问于 2009-07-07 17:16:44
回答 7查看 100.9K关注 0票数 21

我有一个Arduino连接到我的计算机上运行一个循环,每100毫秒通过串行端口将一个值发送回计算机。

我想创建一个Python脚本,它每隔几秒钟就会从串口读取一次,所以我希望它只看到从Arduino发出的最后一条消息。

在Pyserial中是如何做到这一点的?

这是我尝试过的代码,但不起作用。它按顺序读取行。

代码语言:javascript
复制
import serial
import time

ser = serial.Serial('com4',9600,timeout=1)
while 1:
    time.sleep(10)
    print ser.readline() #How do I get the most recent line sent from the device?
EN

回答 7

Stack Overflow用户

发布于 2009-07-07 17:27:56

代码语言:javascript
复制
from serial import *
from threading import Thread

last_received = ''

def receiving(ser):
    global last_received
    buffer = ''

    while True:
        # last_received = ser.readline()
        buffer += ser.read(ser.inWaiting())
        if '\n' in buffer:
            last_received, buffer = buffer.split('\n')[-2:]

if __name__ ==  '__main__':
    ser = Serial(
        port=None,
        baudrate=9600,
        bytesize=EIGHTBITS,
        parity=PARITY_NONE,
        stopbits=STOPBITS_ONE,
        timeout=0.1,
        xonxoff=0,
        rtscts=0,
        interCharTimeout=None
    )

    Thread(target=receiving, args=(ser,)).start()
票数 11
EN

Stack Overflow用户

发布于 2014-04-12 03:35:54

您可以使用ser.flushInput()刷新当前缓冲区中的所有串行数据。

清除旧数据后,可以使用ser.readline()从串行设备获取最新数据。

我认为它比这里提出的其他解决方案简单一点。为我工作,希望它适合你。

票数 8
EN

Stack Overflow用户

发布于 2010-10-23 02:53:24

这些解决方案将占用CPU,同时等待字符。

您应该至少执行一次阻塞调用来读取(1)

代码语言:javascript
复制
while True:
    if '\n' in buffer: 
        pass # skip if a line already in buffer
    else:
        buffer += ser.read(1)  # this will block until one more char or timeout
    buffer += ser.read(ser.inWaiting()) # get remaining buffered chars

...and像以前一样做拆分。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1093598

复制
相关文章

相似问题

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