У меня есть интерфейс шины CAN, подключенный к моему Raspberry Pi.Используя python, я хочу разработать графический интерфейс для отображения интерпретированных сообщений.
Это для Raspberry Pi 3 b +.В настоящее время я пытаюсь реализовать (.after), но боюсь, что некоторая информация будет потеряна.Новичок в этом, поэтому не совсем уверен в частоте сообщений.
def conv(hex):
#do some hex raeding
#labelX.configure...... (update tkinter label)
os.system("sudo /sbin/ip link set can0 up type can bitrate 500000")
time.sleep(0.1)
while True:
message = bus.recv() # Wait until a message is received.
c = '{0:f} {1:x} {2:x} '.format(message.timestamp, message.arbitration_id, message.dlc) #dlc -> Data length code, no of data
s=''
for i in range(message.dlc ):
s += '{0:x} '.format(message.data[i])
if('73' in CAN_ID):
conv(s)
#--------------------------------------------------------------------------
import tkinter as tk
win.title("Hello World")
win.configure(background="black")
labelX = Label(win,text="NIL",bg="black",fg="white",font="none 12 bold")
labelX.grid(row=0,column=0,sticky=tk.W)
win.mainloop()
Ожидайте получения сообщения, примените к нему некоторую функцию и обновите метку.Я провел некоторое исследование, и некоторые источники говорят, что не следует использовать цикл while с tkinter mainloop.вместо этого используйте после.(например, win.after (100, conv)).Беспокойство, что если это будет сделано, сообщения от интерфейса CAN будут потеряны.