1
我目前正在從一個Raspberry Pi 3模型B發送模擬數字轉換器(ADC)2通道數據的項目。我已經寫了一個C代碼,成功地發送數據通過2個UDP端口到計算機,我將這兩個數據在2個獨立的地塊實時繪製。當我嘗試僅顯示1個繪圖時,它會顯示實時值,因爲當我切斷髮生器的信號時,我可以在繪圖中看到它。但是,當我爲2個獨立的地塊嘗試這種方式時,它繪製的是價值觀,但不是實時的。當我切斷髮電機的信號時,我仍然可以看到有跡象表明有信號。起初我認爲這是緩衝區大小問題,所以我將緩衝區大小從1024更改爲32(因爲RPi發送浮點數據值)。此外,我停頓了一段時間。他們都不是我的解決方案。當它有多個圖時,實時圖不是實時的
這是我的Python代碼。
#!/usr/bin/env python3
import time, random
import math
from collections import deque
import socket
UDP_IP = "192.168.180.25"
UDP_PORT1 = 5013
UDP_PORT2 = 5012
sock1 = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock1.bind((UDP_IP, UDP_PORT1))
sock2 = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
sock2.bind((UDP_IP, UDP_PORT2))
start = time.time()
class RealtimePlot:
def __init__(self, axes, max_entries=100):
self.axis_x = deque(maxlen=max_entries)
self.axis_y = deque(maxlen=max_entries)
self.axes = axes
self.max_entries = max_entries
self.lineplot, = axes.plot([], [], "ro-")
self.axes.set_autoscaley_on(True)
def add(self, x, y):
self.axis_x.append(x)
self.axis_y.append(y)
self.lineplot.set_data(self.axis_x, self.axis_y)
self.axes.set_xlim(self.axis_x[0], self.axis_x[-1] + 1e-15)
self.axes.relim();
self.axes.autoscale_view() # rescale the y-axis
def animate(self, figure, callback, interval=50):
import matplotlib.animation as animation
def wrapper(frame_index):
self.add(*callback(frame_index))
self.axes.relim();
self.axes.autoscale_view() # rescale the y-axis
return self.lineplot
animation.FuncAnimation(figure, wrapper, interval=interval)
def main():
from matplotlib import pyplot as plt
fig, axes = plt.subplots(2)
display1 = RealtimePlot(axes[0])
display2 = RealtimePlot(axes[1])
while True:
data1, addr = sock1.recvfrom(32)
display1.add(time.time() - start, data1)
data2, addr = sock2.recvfrom(32)
display2.add(time.time() - start, data2)
plt.pause(0.0001)
if __name__ == "__main__": main()
編輯:我給了相同的信號通道。所以不要介意圖像中的情節是相同的。