#matplotlib and read/write aquisition import Queue import datetime as DT import collections import matplotlib.pyplot as plt import numpy as np import multiprocessing as mp import time import datetime import os import matplotlib.dates as mdates import matplotlib.animation as animation #ADC from ABE_DeltaSigmaPi import DeltaSigma from ABE_helpers import ABEHelpers #PyQt from PyQt4 import QtGui, QtCore from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas #ADC INFO import sys i2c_helper = ABEHelpers() bus = i2c_helper.get_smbus() adc = DeltaSigma(bus, 0x68, 0x69, 18) #Rename file to date base_dir = '/home/pi/Desktop/DATA' ts = time.time() filename_time = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d') filename_base = os.path.join(base_dir, filename_time) filename = '%s.txt' % filename_base # you will want to change read_delay to 5000 read_delay = int(5000) # in milliseconds write_delay = read_delay/1000.0 # in seconds window_size = 60 nlines = 8 datenums = collections.deque(maxlen=window_size) ys = [collections.deque(maxlen=window_size) for i in range(nlines)] #PyQt window to display readings try: _fromUtf8 = QtCore.QString.fromUtf8 except AttributeError: def _fromUtf8(s): return s try: _encoding = QtGui.QApplication.UnicodeUTF8 def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig, _encoding) except AttributeError: def _translate(context, text, disambig): return QtGui.QApplication.translate(context, text, disambig) class Ui_mplMainWindow(object): def setupUi(self, mplMainWindow): mplMainWindow.setObjectName(_fromUtf8("mplMainWindow")) mplMainWindow.resize(800, 380) self.centralwidget = QtGui.QWidget(mplMainWindow) self.centralwidget.setObjectName(_fromUtf8("centralwidget")) self.horizontalLayoutWidget = QtGui.QWidget(self.centralwidget) self.horizontalLayoutWidget.setGeometry(QtCore.QRect(30, 10, 751, 352)) self.horizontalLayoutWidget.setObjectName(_fromUtf8("horizontalLayoutWidget")) self.horizontalLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget) self.horizontalLayout.setMargin(0) self.horizontalLayout.setObjectName(_fromUtf8("horizontalLayout")) self.widget = QtGui.QWidget(self.horizontalLayoutWidget) self.widget.setEnabled(True) self.widget.setMinimumSize(QtCore.QSize(500, 300)) self.widget.setMaximumSize(QtCore.QSize(500, 300)) self.horizontalLayout.addWidget(self.widget) self.verticalLayout = QtGui.QVBoxLayout() self.verticalLayout.setObjectName(_fromUtf8("verticalLayout")) self.label = QtGui.QLabel(self.horizontalLayoutWidget) self.label.setMaximumSize(QtCore.QSize(100, 30)) self.label.setObjectName(_fromUtf8("label")) self.verticalLayout.addWidget(self.label) self.lineEdit = QtGui.QLineEdit(self.horizontalLayoutWidget) self.lineEdit.setMinimumSize(QtCore.QSize(20, 20)) self.lineEdit.setMaximumSize(QtCore.QSize(100, 25)) self.lineEdit.setObjectName(_fromUtf8("lineEdit")) self.verticalLayout.addWidget(self.lineEdit) self.label_2 = QtGui.QLabel(self.horizontalLayoutWidget) self.label_2.setMaximumSize(QtCore.QSize(100, 30)) self.label_2.setObjectName(_fromUtf8("label_2")) self.verticalLayout.addWidget(self.label_2) self.lineEdit_2 = QtGui.QLineEdit(self.horizontalLayoutWidget) self.lineEdit_2.setMinimumSize(QtCore.QSize(20, 20)) self.lineEdit_2.setMaximumSize(QtCore.QSize(100, 25)) self.lineEdit_2.setObjectName(_fromUtf8("lineEdit_2")) self.verticalLayout.addWidget(self.lineEdit_2) self.label_3 = QtGui.QLabel(self.horizontalLayoutWidget) self.label_3.setMaximumSize(QtCore.QSize(100, 30)) self.label_3.setObjectName(_fromUtf8("label_3")) self.verticalLayout.addWidget(self.label_3) self.lineEdit_3 = QtGui.QLineEdit(self.horizontalLayoutWidget) self.lineEdit_3.setMinimumSize(QtCore.QSize(20, 20)) self.lineEdit_3.setMaximumSize(QtCore.QSize(100, 25)) self.lineEdit_3.setObjectName(_fromUtf8("lineEdit_3")) self.verticalLayout.addWidget(self.lineEdit_3) self.label_4 = QtGui.QLabel(self.horizontalLayoutWidget) self.label_4.setMaximumSize(QtCore.QSize(100, 30)) self.label_4.setObjectName(_fromUtf8("label_4")) self.verticalLayout.addWidget(self.label_4) self.lineEdit_4 = QtGui.QLineEdit(self.horizontalLayoutWidget) self.lineEdit_4.setMinimumSize(QtCore.QSize(20, 20)) self.lineEdit_4.setMaximumSize(QtCore.QSize(100, 25)) self.lineEdit_4.setObjectName(_fromUtf8("lineEdit_4")) self.verticalLayout.addWidget(self.lineEdit_4) self.horizontalLayout.addLayout(self.verticalLayout) self.verticalLayout_2 = QtGui.QVBoxLayout() self.verticalLayout_2.setObjectName(_fromUtf8("verticalLayout_2")) self.label_5 = QtGui.QLabel(self.horizontalLayoutWidget) self.label_5.setMaximumSize(QtCore.QSize(100, 30)) self.label_5.setObjectName(_fromUtf8("label_5")) self.verticalLayout_2.addWidget(self.label_5) self.lineEdit_5 = QtGui.QLineEdit(self.horizontalLayoutWidget) self.lineEdit_5.setMinimumSize(QtCore.QSize(100, 20)) self.lineEdit_5.setMaximumSize(QtCore.QSize(100, 25)) self.lineEdit_5.setObjectName(_fromUtf8("lineEdit_5")) self.verticalLayout_2.addWidget(self.lineEdit_5) self.label_6 = QtGui.QLabel(self.horizontalLayoutWidget) self.label_6.setMaximumSize(QtCore.QSize(100, 30)) self.label_6.setObjectName(_fromUtf8("label_6")) self.verticalLayout_2.addWidget(self.label_6) self.lineEdit_6 = QtGui.QLineEdit(self.horizontalLayoutWidget) self.lineEdit_6.setMinimumSize(QtCore.QSize(100, 20)) self.lineEdit_6.setMaximumSize(QtCore.QSize(100, 25)) self.lineEdit_6.setObjectName(_fromUtf8("lineEdit_6")) self.verticalLayout_2.addWidget(self.lineEdit_6) self.label_7 = QtGui.QLabel(self.horizontalLayoutWidget) self.label_7.setMaximumSize(QtCore.QSize(100, 30)) self.label_7.setObjectName(_fromUtf8("label_7")) self.verticalLayout_2.addWidget(self.label_7) self.lineEdit_7 = QtGui.QLineEdit(self.horizontalLayoutWidget) self.lineEdit_7.setMinimumSize(QtCore.QSize(100, 20)) self.lineEdit_7.setMaximumSize(QtCore.QSize(100, 25)) self.lineEdit_7.setObjectName(_fromUtf8("lineEdit_7")) self.verticalLayout_2.addWidget(self.lineEdit_7) self.label_8 = QtGui.QLabel(self.horizontalLayoutWidget) self.label_8.setMaximumSize(QtCore.QSize(100, 30)) self.label_8.setObjectName(_fromUtf8("label_8")) self.verticalLayout_2.addWidget(self.label_8) self.lineEdit_8 = QtGui.QLineEdit(self.horizontalLayoutWidget) self.lineEdit_8.setMinimumSize(QtCore.QSize(100, 20)) self.lineEdit_8.setMaximumSize(QtCore.QSize(100, 25)) self.lineEdit_8.setObjectName(_fromUtf8("lineEdit_8")) self.verticalLayout_2.addWidget(self.lineEdit_8) self.horizontalLayout.addLayout(self.verticalLayout_2) mplMainWindow.setCentralWidget(self.centralwidget) self.retranslateUi(mplMainWindow) QtCore.QMetaObject.connectSlotsByName(mplMainWindow) def retranslateUi(self, mplMainWindow): mplMainWindow.setWindowTitle(_translate("mplMainWindow", "Real Time Data Acquisition", None)) self.widget.setWhatsThis(_translate("mplMainWindow", "<html><head/><body><p>matplotlib</p></body></html>", None)) self.label.setText(_translate("mplMainWindow", "Channel 1:", None)) self.label_2.setText(_translate("mplMainWindow", "Channel 2:", None)) self.label_3.setText(_translate("mplMainWindow", "Channel 3:", None)) self.label_4.setText(_translate("mplMainWindow", "Channel 4:", None)) self.label_5.setText(_translate("mplMainWindow", "Channel 5:", None)) self.label_6.setText(_translate("mplMainWindow", "Channel 6:", None)) self.label_7.setText(_translate("mplMainWindow", "Channel 7:", None)) self.label_8.setText(_translate("mplMainWindow", "Channel 8:", None)) def animate(i, queue): try: row = queue.get_nowait() except Queue.Empty: return datenums.append(mdates.date2num(row[0])) for i, y in enumerate(row[1:]): ys[i].append(y) for i, y in enumerate(ys): lines[i].set_data(datenums, y) ymin = min(min(y) for y in ys) ymax = max(max(y) for y in ys) xmin = min(datenums) xmax = max(datenums) if xmin < xmax: ax.set_xlim(xmin, xmax) ax.set_ylim(ymin, ymax) fig.canvas.draw() def write_data(filename, queue): while True: delay1 = DT.datetime.now() row = [] for i in range(nlines): # read from adc channels and print to screen channel = adc.read_voltage(i) row.append(channel) queue.put([delay1]+row) #print voltage variables to local file with open(filename, 'a') as DAQrecording: time1 = delay1.strftime('%Y-%m-%d') time2 = delay1.strftime('%H:%M:%S') row = [time1, time2] + row row = map(str, row) DAQrecording.write('{}\n'.format(', '.join(row))) #Delay until next 5 second interval delay2 = DT.datetime.now() difference = (delay2 - delay1).total_seconds() time.sleep(write_delay - difference) def main(): global fig, ax, lines queue = mp.Queue() proc = mp.Process(target=write_data, args=(filename, queue)) # terminate proc when main process ends proc.daemon = True # spawn the writer in a separate process proc.start() fig, ax = plt.subplots() xfmt = mdates.DateFormatter('%H:%M:%S') ax.xaxis.set_major_formatter(xfmt) # make matplotlib treat x-axis as times ax.xaxis_date() fig.autofmt_xdate(rotation=25) lines = [] for i in range(nlines): line, = ax.plot([], []) lines.append(line) ani = animation.FuncAnimation(fig, animate, interval=read_delay, fargs=(queue,)) app = QtGui.QApplication(sys.argv) win = Ui_mplMainWindow() win.show() sys.exit(app.exec_()) if __name__ == '__main__': main()
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question