私はTkinter GUIを使ってArduinoからデータを受信しており、毎秒20サンプルで8つの異なる値を受け取ってグラフ化する必要があります。 1つのグラフに4をプロットし、別のグラフに4をプロットしています。 Arduino側のコードは正常に動作し、以下の形式で正しいレートで送信しています。 Pythonの側ではPythonで文字列分割を高速化する方法
Serial.println(String(val1) + "," + String(val2) + ...
私が受信し、このようにグラフ化しています:
def update_graph(self, i):
self.xdata.append(i)
while (self.arduinoData.inWaiting()==0):
pass
x = self.arduinoData.readline()
split_data = x.split(",")
print split_data[1]
self.ydata1.append(int(split_data[0]))
self.ydata2.append(int(split_data[1]))
self.ydata3.append(int(split_data[2]))
self.ydata4.append(int(split_data[3]))
self.ydata5.append(int(split_data[4]))
self.ydata6.append(int(split_data[5]))
self.ydata7.append(int(split_data[6]))
self.ydata8.append(int(split_data[7]))
self.line1.set_data(self.xdata, self.ydata1)
self.line2.set_data(self.xdata, self.ydata2)
self.line3.set_data(self.xdata, self.ydata3)
self.line4.set_data(self.xdata, self.ydata4)
self.ax1.set_ylim(min(self.ydata1), max(self.ydata4))
self.ax1.set_xlim(min(self.xdata), max(self.xdata))
self.line5.set_data(self.xdata, self.ydata5)
self.line6.set_data(self.xdata, self.ydata6)
self.line7.set_data(self.xdata, self.ydata7)
self.line8.set_data(self.xdata, self.ydata8)
self.ax2.set_ylim(min(self.ydata5), max(self.ydata8))
self.ax2.set_xlim(min(self.xdata), max(self.xdata))
if i >= self.points - 1:
self.running = False
self.ani = None
return self.line1,
return self.line2,
return self.line3,
return self.line4,
return self.line5,
return self.line6,
return self.line7,
return self.line8,
これは、入ってくるデータに追いつくことがあまりにも遅いことが判明しました。データの受信と解析の高速化方法はありますか?
私は、データの受信と解析が最も遅い部分であるとは思っていません。 –
そのデータをパックバイナリ形式で送信し、 'struct'モジュールでそのデータを展開することができます。 – Keith
@gre_gorプロットコマンドを実行してもそれがかなり遅れている場合でも、 – emg184