语言和工具包,用于快速绘制串行端口的实时数据

时间:2013-12-10 12:26:05

标签: python c plot serial-port gtk

我试图从串口绘制实时数据(从arduino板发送),我无法找到任何有用的东西。我已经在这上面了几天,尝试了很多但从未成功过。 我设法使用cat,C和python从端口读取数据,并且所有这些数据都有非常奇怪的结果。昨天猫很好地将数据打印到终端,今天它每次运行时只显示一行或两行。在C中数据非常脏。在python中似乎没问题。虽然不完美,但阅读部分不是问题。 我试图用matplotlib绘制来自python的数据,这种数据的延迟越来越大,这使得这个情节变得毫无用处。我无法让C和gtk工作。我试过python + chaco,但我不知道chaco是如何运作的。我发现自己在不同的语言和模块之间跳跃,以使其工作,但由于我没有工作,我继续跳,没有得到任何解决方案。

现在,我的问题是: 你会建议使用哪种语言,模块,gui-toolkit等?

我知道这是一个普遍的问题,并且最好是要求具体的事情,但我真的迷失了。 感谢。

更新: 我选择python,pyserial和pyqtgraph。串行工作,但图形不是。 更新: 得到它了! 这个例子正在运作。

#!/usr/bin/python
# -*- coding: utf-8 -*-

from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
from pyqtgraph.ptime import time
import serial

app = QtGui.QApplication([])

p = pg.plot()
p.setWindowTitle('live plot from serial')
curve = p.plot()

data = [0]
raw=serial.Serial("/dev/ttyACM0",9600)
raw.open()
ptr = 0

def update():
    global curve, data, ptr
    line = raw.readline()
    data.append(int(line))
    xdata = np.array(data, dtype='float64')
    print xdata
    curve.setData(xdata)
    ptr += 1
    app.processEvents()

timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(0)

if __name__ == '__main__':
    import sys
    if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
    QtGui.QApplication.instance().exec_()

1 个答案:

答案 0 :(得分:1)

我一直在使用PyQtGraph绘制@ 500 Hz(x 12通道x 16位/样本)采样的实时ECG数据。它易于实现,快速,流畅,并且对我来说效果很好。

例如,查看Updating Plot示例。

enter image description here