簡體   English   中英

串行數據捕獲和實時繪圖:Drawnow、matplotlib、python

[英]Serial data capture and real time plotting: Drawnow, matplotlib, python

我是編程新手,幾周后制作了一些程序來做一些簡單的事情; 比如從 arduino 捕獲串行數據並將其保存到文本文件中。 現在我想結合幾件事。 我想使用 python 來捕獲串行數據,提示輸入端口和文件名,獲取該數據並實時繪制,然后當 arudino 不再連接時,保存並關閉文件。 這是我到目前為止的代碼。

問題是圖表根本不是實時的。 傳感器幾乎沒有變化。 我有時也會收到 matplotlib 折舊警告。 我想知道是否有快速解決方案,或者我是否遺漏了一些重要的東西。 非常感謝!

    import numpy
    import matplotlib.pyplot as plt
    import math
    import time
    import pylab
    from drawnow import drawnow
    import csv
    import serial
    import os
    import glob
    import sys

    filename = raw_input("Save file as: ")
    saveFile = open(filename, 'w')

    print "Available ports: "

    def serial_port():
         if sys.platform.startswith('win'):
             ports = ['COM%s' % (i + 1) for i in range (256)]
        elif sys.platform.startswith('linux') or      sys.platform.startswith('cygwin'):
            ports = glob.glob('/dev/tty/[A-Za-z]*')
         elif sys.platform.startswith('darwin'):
            ports = glob.glob('/dev/tty.*')
        else:
            raise EnvironmentError('Unsupported Platform')

        result = []
        for port in ports:
            try:
        s = serial.Serial(port)
        s.close()
        result.append(port)

    except (OSError, serial.SerialException):
        pass
return result

    if __name__ == '__main__':
        print serial_port()

    serialport = raw_input("Enter Port: ")
    port1 = serialport

    print "Connecting to port...", port1

    arduino1 = serial.Serial(port1, 115200)

    print "Arduino Detected"


    #create arrays with the following names
    Time = []
    analog0 = []
    analog1 = []
    voltage0 = []
    voltage1 = []
    Temp = []
    RH = []

    #reading data from the serial port
    #telling Matplot.lib to plot live data
    plt.ion()

    #creates a function to make a plot we want
     def Fig1():
        plt.plot(analog0, 'r-')
        plt.title("Analog0 Data")
        plt.ylim(405, 425)
        plt.grid(True)
        plt.ylabel("analog")
        plt.xlabel("milliseconds")

    x = os.path.exists(port1)

    while x==0:
        arduinoString = arduino1.readline()
        saveFile.write(arduinoString)
        dataArray = arduinoString.split(',')
        time = float(dataArray[0])
        a0 = float(dataArray[1])
        a1 = float(dataArray[2])
        v0 = float(dataArray[3])
        v1 = float(dataArray[4])
        temp = float(dataArray[5])
        rh = float(dataArray[6])
          #filling our arrays with those new data values (floats)
        Time.append(time)
        analog0.append(a0)
        analog1.append(a1)
        voltage0.append(v0)
        voltage1.append(v1)
        Temp.append(temp)
        RH.append(rh)

        drawnow(Fig1)
        plt.pause(0.00010)

    else:
        saveFile.close()

我也有同樣的問題。

它是通過使用set_data()來解決的,比如 blow link。

立即繪制和 Matplotlib

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM