Python 如何使用MatplotLib在图形界面中绘制从传感器接收的值?

Python 如何使用MatplotLib在图形界面中绘制从传感器接收的值?,python,matplotlib,interface,arduino,archive,Python,Matplotlib,Interface,Arduino,Archive,我正在开发一个图形界面,当您启动python程序连接到Arduino并使用特定端口接收25个传感器数据(使用电位计执行测试)时,它会询问您要生成的txt类型的新文件的名称,并询问您的Arduino所在的串行端口这些接收到的数据被写入文本文件,除此之外,在图形界面上显示结果,并将其放在图形上。我在实现目标过程中遇到的问题如下 将数据读取为字节,因此当您将其保存到文本文件时,它会以这种方式存储数据 b'NUMBER\r\n' 这意味着当您想使用replace('b\r\n','')时,给我一个 T

我正在开发一个图形界面,当您启动python程序连接到Arduino并使用特定端口接收25个传感器数据(使用电位计执行测试)时,它会询问您要生成的txt类型的新文件的名称,并询问您的Arduino所在的串行端口这些接收到的数据被写入文本文件,除此之外,在图形界面上显示结果,并将其放在图形上。我在实现目标过程中遇到的问题如下

将数据读取为字节,因此当您将其保存到文本文件时,它会以这种方式存储数据

b'NUMBER\r\n'
这意味着当您想使用replace('b\r\n','')时,给我一个

TypeError: a bytes-like object is required, not 'str'
这反过来意味着,在绘制图形时,数据不是按升序排列的,而是按外观排列的

目前,我不知道如何捕捉这个图形,它是在界面中生成的,当它结束时,但如果我不解决这个第一将不会有任何好处

我将尝试替换的部分保留为注释,以便他们知道我将其放在哪里,这里是我的python代码

import matplotlib.pyplot as plt

from tkinter import*
import serial, time
def createTEXT(reading):
    text=''
    for i in range(len(reading)):
        text += str(reading[i]) + ' '

    return text

def graph(reading):
    y=[]
    for i in range(len(reading)):
        y.append(reading[i])
    return y

def SEND():
    NAME=str(NOMBRE.get())
    PORT=str(PUERTO.get())
    PORT=str(PUERTO.get())
    try:
        arduino = serial.Serial(PORT,9600)
        time.sleep(4)#Stabilize the connection
        for i in range(25):
            arduino.write(b'1')#Bits are sent here
        reading=[]
        
        for i in range(25):
            reading.append(arduino.readline())
        arduino.close()
        
        # for i in range(len(reading)):
        #     reading[i][len(reading[i])-1] = reading[i][len(reading[i])-1].replace('b\r\n','')
    except:
        messagebox.showinfo(message="Please verify that the Port you put in is the right one", title="ERROR")

    archive = open(NAME+".txt","w") #Open the file in write mode "write" 
    Text=createTEXT(reading)

    archive.write(Text)
    archive.close()
    print(Text)
    y=graph(reading)
    plt.plot(y)

    # plt.show

POTENTIOMETER = Tk()
frame = Frame(POTENTIOMETER)

#Objects to use
ASKNAME = Label(frame,text= "Welcome, what name will this new file have?")
NOMBRE = Entry(frame)
ASKPORT = Label(frame,text= "Which port your ARDUINO UNO is connected to?")
PUERTO = Entry(frame)
SEND= Button(frame, text = "SEND", command = SEND)


#Content
ASKNAME.pack()
NOMBRE.pack()
ASKPORT.pack()
PUERTO.pack()
SEND.pack()
frame.pack(padx = 200, pady=150)#Tamaño márco
POTENTIOMETER.mainloop()
这是我的Arduino代码,我用的是Arduino代码,所以它都是连接的

该程序的制作使得图形类似地显示在python控制台中,直到程序关闭为止

int s = 0;
void setup() {
  Serial.begin(9600);
  pinMode(A2, INPUT);

}

void loop() {
  if (Serial.read() == '1') {
    delay(1000);
    for (int i = 0; i < 25; i++) {
      s = analogRead(A2);
      delay(500);
      Serial.println(s);

    }
  }
}
b'1016\r\n' b'1019\r\n' b'1016\r\n' b'1018\r\n' b'1016\r\n' b'1017\r\n' b'1019\r\n' b'1018\r\n' b'1016\r\n' b'1018\r\n' b'1018\r\n' b'965\r\n' b'1016\r\n' b'1002\r\n' b'1018\r\n' b'781\r\n' b'1019\r\n' b'1018\r\n' b'1019\r\n' b'1019\r\n' b'1019\r\n' b'1019\r\n' b'811\r\n' b'418\r\n' b'369\r\n'