一旦matplotlib图打开,串行端口就会停止传输数据

时间:2017-10-10 11:43:00

标签: python matplotlib serialization

使用pyserial,我试图通过串口(在Ubuntu中)获取数据并尝试使用Matplotlib实时绘制它。 (所有这些都发生在Tkinter GUI中)。

数据传输完美但是当matplotlib窗口打开时(plt.show()),串口数据传输停止。 (不会恢复)。

即使我尝试使用不同的线程进行串口和Matplotlib。但是Tkinter不允许。

它说:" RuntimeError:主线程不在主循环中#34;。

有什么想法发生在这里。感谢。

1 个答案:

答案 0 :(得分:1)

import time  
import serial  
import matplotlib.pyplot as plt 

def livePlotting(COM):  
    startTime = time.time()  
    fig = plt.figure(figsize=(6, 4), dpi=100)
    axes = plt.subplot(2, 2, 1)
    axes.set_xlim(0, 130)
    axes.set_ylim(-2, 2)

    x_datapoints = []
    y_datapoints = []
    line, = axes.plot(x_datapoints, y_datapoints, 'b-')

    ser = serial.Serial(COM, 9600)
    counter = 0
    while True:
        data = ser.readline()
        valuesToPlot = data.split(',')

        print "Live Plotting Now......."
        if counter <=1000:      # Just an ex., if we want only 1000 datapoints to get plotted.
            x_datapoints.append(counter)
            y_datapoints.append(valuesToPlot[0])

            line.set_xdata(x_datapoints)
            line.set_ydata(y_datapoints)

            plt.draw()
            plt.pause(1e-20)
            time.sleep(0.2)
            counter +=1
    print "Time taken in plotting :", time.time() - startTime        
    plt.show()   

if __name__ == "__main__":
    COMport = '/dev/ttyACM1'
    livePlotting(COMport)