Arduino で測定したデータを PyQt + Matplotlib でリアルタイムプロット その 1

昨日 の続きです。
Arduino から送信されたデータを Matplotlib で表示するだけでは実用性に欠けるので、GUI アプリに拡張してみようと思います。

GUI ライブラリは個人で使うつもりなので PyQt5 を選びました。
現状は単純に Matplotlib を PyQt5 から使用するところまで。

次は計測のスタート、ストップボタンを付けてみます。

# coding: utf-8
import sys
import signal
import serial
import numpy as np
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import QApplication
import matplotlib as mpl
mpl.use("Qt5Agg")
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas


class myApplication(FigureCanvas):
    def __init__(self, parent=None):
	fig = mpl.figure.Figure()
	self.axes = fig.add_subplot(111)
	super(myApplication, self).__init__(fig)
	self.setParent(parent)

	timer = QTimer(self)
	timer.timeout.connect(self.updateFigure)

	self.t = np.zeros(100)
	self.y = np.zeros(100)
	self.li, = self.axes.plot(self.t, self.y)
	self.axes.set_xlabel("Time[s]")
	self.axes.set_ylabel("Voltage[V]")
	self.axes.set_ylim(0, 5)

	self.ser = serial.Serial(port="/dev/ttyACM0", baudrate=9600)

	ser.write("*".encode())
	data = ser.readline().strip().rsplit()        
	self.tInt = float(self.data[0])

	timer.start(100)        

    def updateFigure(self):
	ser.write("*".encode())
	self.data = self.ser.readline().strip().rsplit()
	self.t = np.append(self.t, (float(self.data[0])-self.tInt)/10**6)
	self.t = np.delete(self.t, 0)
	self.y = np.append(self.y, float(self.data[1])*5/1023)
	self.y = np.delete(self.y, 0)

	self.li.set_xdata(self.t)
	self.li.set_ydata(self.y)
	self.axes.set_xlim(min(self.t), max(self.t))        
	self.draw()


if __name__ == "__main__":
    signal.signal(signal.SIGINT, signal.SIG_DFL)
    app = QApplication(sys.argv)
    a = myApplication()
    a.setWindowTitle("Realtime Monitor")
    a.show()
    app.exec_()

15070401.gif

参考

コメント

Comments powered by Disqus
書籍更新情報
2016-10-21
Pythonによる科学技術計算 基礎編
PDF版の販売を開始しました。
販売ページはこちら

2016-09-09
Pythonによる科学技術計算 基礎編
1.2版への更新が可能になりました。
サポートページはこちら
電子書籍
Pythonによる科学技術計算 基礎編
Kindle ストア、Leanpubで販売中です
Pythonによる科学技術計算 基礎編
PDF版の販売はこちら
同人誌
技術書典(2016/6/25)
Emacs/org-modeのPDF作成術
電子版をBOOTHで販売中です
Emacs/org-modeのPDF作成術
Share