이 질문에 늦었 음을 알고 있지만 문제에 대해서는 "joystick"패키지를 살펴볼 수 있습니다. 직렬 포트에서 데이터 스트림을 플로팅하도록 설계했지만 모든 스트림에서 작동합니다. 또한 대화 형 텍스트 로깅 또는 이미지 플로팅 (그래프 플로팅 추가)을 허용합니다. 별도의 스레드에서 자체 루프를 수행 할 필요가 없습니다. 패키지가 처리하므로 원하는 업데이트 빈도 만 제공하면됩니다. 또한 플로팅하는 동안 명령을 모니터링하는 데 터미널을 사용할 수 있습니다. http://www.github.com/ceyzeriat/joystick/ 또는 https://pypi.python.org/pypi/joystick을 참조 하십시오 (설치하려면 pip 설치 조이스틱 사용)
np.random.random ()을 아래 코드의 직렬 포트에서 읽은 실제 데이터 포인트로 바꾸십시오.
import joystick as jk
import numpy as np
import time
class test(jk.Joystick):
# initialize the infinite loop decorator
_infinite_loop = jk.deco_infinite_loop()
def _init(self, *args, **kwargs):
"""
Function called at initialization, see the doc
"""
self._t0 = time.time() # initialize time
self.xdata = np.array([self._t0]) # time x-axis
self.ydata = np.array([0.0]) # fake data y-axis
# create a graph frame
self.mygraph = self.add_frame(jk.Graph(name="test", size=(500, 500), pos=(50, 50), fmt="go-", xnpts=10000, xnptsmax=10000, xylim=(None, None, 0, 1)))
@_infinite_loop(wait_time=0.2)
def _generate_data(self): # function looped every 0.2 second to read or produce data
"""
Loop starting with the simulation start, getting data and
pushing it to the graph every 0.2 seconds
"""
# concatenate data on the time x-axis
self.xdata = jk.core.add_datapoint(self.xdata, time.time(), xnptsmax=self.mygraph.xnptsmax)
# concatenate data on the fake data y-axis
self.ydata = jk.core.add_datapoint(self.ydata, np.random.random(), xnptsmax=self.mygraph.xnptsmax)
self.mygraph.set_xydata(t, self.ydata)
t = test()
t.start()
t.stop()