2013-12-10 24 views
-1

我試圖從串口(從arduino板發送)繪製實時數據,而我找不到任何有效的工具。我已經花了幾天時間,嘗試了很多,但都沒有成功。 我設法使用cat,C和python從端口讀取數據,結果非常奇怪。昨天貓把數據很好地打印到終端,今天它每次運行時只顯示一行或兩行。在C中,數據非常骯髒。在Python中,它似乎確定。雖然不完美,但閱讀部分不是問題。 我試圖用matplotlib繪製數據,這與matplotlib一起工作,這個數據不斷增加,導致繪圖無用。我無法讓C和gtk工作。我嘗試了python + chaco,但是我不明白chaco是如何工作的。我發現自己在不同的語言和模塊之間跳躍,以使其發揮作用,但由於我沒有工作,我繼續跳躍,沒有得到任何解決方案。用於從串口快速繪製實時數據的語言和工具箱

現在,我的問題是: 你會推薦使用哪種語言,模塊,gui-toolkit等?

我知道這是一個普遍的問題,而且最好是要求具體的事情,但我真的迷失在此。 謝謝。

更新: 我選擇python,pyserial和pyqtgraph。串行正在工作,但圖形不是。 更新: GOT IT! 這個例子正在工作。

#!/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_() 
+0

什麼協議,您使用的串行字節流,並且您解析/正確解碼它,(我猜「無」)? –

+0

none /不知道 我使用內置於pyserial的arduino和port.readline()中的Serial.print()。這給我一個字符串(即123,2332,1234),我分裂並檢查是否真的有3個值,並忽略損壞的。 – Turbinenreiter

+0

我瞭解繪圖部分是您的主要關注點,我試圖回答您的問題的這一部分。您還應該調查爲什麼您收到(並丟棄)損壞的數據包。 – Micke

回答

1
我已經使用 PyQtGraph繪製採樣@ 500赫茲(×12個信道×16比特/取樣)活ECG數據

。這很容易實現,快速和流暢,對我來說工作得不錯。例如

查看Updating Plot示例。

enter image description here

+0

這看起來不錯,但我運行在'無效數據類型'錯誤。 查看原始文章的代碼。 – Turbinenreiter

相關問題