我想通过使用pyplot.arrow实时通过套接字通信绘制接收到的数据。
我正在尝试,但是所需的结果仅在第一次显示。
下次没有显示箭头。 这是我尝试的代码。请帮助我:)
HOST='192.168.0.9'
PORT=8604
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.bind((HOST,PORT))
s.listen(1)
conn,addr=s.accept()
os.getcwd()
os.chdir("/home/pi/smartroad")
im = imread('/home/pi/smartroad/background.png')
ax = plt.axes()
plt.xlim(0,746)
plt.ylim(0,372)
beacon1 = [40,60] #1번 비콘 아래
beacon1_2 = [40,80] #1번 비콘 위
beacon2 = [375,295] #2번 비콘 왼쪽
beacon2_2 = [430,295] #2번 비콘 오른쪽
beacon3 = [643,80] #3번 비콘 위쪽
beacon3_2 = [640,60] #3번 비콘 아래쪽
def job(): #일정시간 마다 실행하는 함수
b = data.split("*") #구분기호 * 로 앞뒤를 나눈다
a = [] #배열 선언
for i in range(len(b) - 1):
if(b[i]!=None):
a.append(b[i])
print(data)
if(int(a[0]) == 1): #처음 인식장소가 1번 비콘에서 시작
if(int(a[1]) == 2): #다음 인식장소가 2번 비콘일 때 (1 -> 2)
if(len(a) < 3): #비콘 구역 개수가 2개일 때 화살표와 현재 시간 출력
ax.arrow(beacon1_2[0],beacon1_2[1],beacon2[0] - beacon1_2[0] - 5,beacon2[1] beacon1_2[1] - 5,head_width=15,head_length=15,fc='lightblue',ec='lightblue')
plt.text(beacon2[0] - 30,beacon2[1] + 40,b[2],color='#00C8FF',size=8)
elif(len(a) == 3): #비콘 구역 개수가 3개일 때 화살표와 현재 시간 출력
if(int(a[2]) == 1): #그 다음 인식장소가 1번 비콘일 때 (1 -> 2 -> 1)
ax.arrow(beacon1_2[0] - 3,beacon1_2[1] + 3,beacon2[0] - beacon1_2[0] - 3,beacon2[1] - beacon1_2[1] + 3,head_width=10,head_length=10,ec='lightblue')
ax.arrow(beacon2[0] + 3,beacon2[1] - 3,beacon1_2[0] - beacon2[0] + 3,beacon1_2[1] - beacon2[1] - 3,fc='#ff6f6d',ec='#ff6f6d')
plt.text(beacon1[0] + 20,beacon1[1] - 55,b[3],size=8)
plt.imshow(im)
img=plt.gcf()
img.savefig('mia.jpg')
plt.show()
schedule.every(10).seconds.do(job) #job()함수를 10초마다 실행
while 1:
data = conn.recv(1024) #데이터를 받아들임
schedule.run_pending()
c.close()