我試圖從串口(從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_()
什麼協議,您使用的串行字節流,並且您解析/正確解碼它,(我猜「無」)? –
none /不知道 我使用內置於pyserial的arduino和port.readline()中的Serial.print()。這給我一個字符串(即123,2332,1234),我分裂並檢查是否真的有3個值,並忽略損壞的。 – Turbinenreiter
我瞭解繪圖部分是您的主要關注點,我試圖回答您的問題的這一部分。您還應該調查爲什麼您收到(並丟棄)損壞的數據包。 – Micke