python實時在線畫曲線(附代碼)

背景

使用pyqtgraph根據數據進行繪製曲線,在線顯示。

說明

  1. class ScrollingPloter將生成曲線窗口封裝成類。

  2. def __init__(self, title_name, plot_num, x_data_num = 300, refresh_rate = 1)初始化對象,titile_name爲窗口標題,plot_num爲曲線數量,x_data_num爲x軸的數據數量,默認爲300,refresh_rate爲在線更新頻率,默認爲1ms

  3. x = ScrollingPloter("test", 2)聲明一個標題爲test的窗口,曲線數量爲兩個。

  4.  timer1 = pg.QtCore.QTimer()
     timer1.timeout.connect(update1)
     timer1.start(0.02)
    

    聲明一個定時器,connect一個函數,用來更新數據。

  5.  import socket
     server_addr = ('192.168.100.148',52333)
     server = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
     server.bind(server_addr)
     server.listen(5)
     ss, addr = server.accept()  
     flag = False
     data_str = ""
     def update1():
         global flag
         if (not flag):
             data = ss.recv(2)
             data_str = data.decode('utf-8')
             if (data_str == "A5"):
                 flag = True
         if flag:
             data = ss.recv(6)
             data_str = data.decode('utf-8')
             print(data_str)
             flag = False
             x.data_array[1][:-1] = x.data_array[1][1:]
             x.data_array[1][-1] = float(data_str)
             x.curve_array[1].setData(x.data_array[1])
    

    這個函數通過tcp server的方式來更新曲線中的數據,數據更新方式爲滑動窗口。其中x.data_array[1]爲曲線2

  6.  import serial
     ser=serial.Serial("COM7",115200)
     def update():
         data_str = ser.read(20).hex()
         print(int(data_str[12:16],16) / 10.0)
         x.data_array[0][:-1] = x.data_array[0][1:]
         x.data_array[0][-1] = (int(data_str[12:16],16) / 10.0)
         x.curve_array[0].setData(x.data_array[0])
    

    該函數使用串口方式更新數據,更新方式爲滑動窗口。其中x.data_array[0]爲曲線1

代碼傳送門

完整代碼鏈接

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章