使用pyserial,我试图通过串口(在Ubuntu中)获取数据并尝试使用Matplotlib实时绘制它。 (所有这些都发生在Tkinter GUI中)。
数据传输完美但是当matplotlib窗口打开时(plt.show()),串口数据传输停止。 (不会恢复)。
即使我尝试使用不同的线程进行串口和Matplotlib。但是Tkinter不允许。
它说:" RuntimeError:主线程不在主循环中#34;。
有什么想法发生在这里。感谢。
答案 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)