How to generate a temperature x time graph of data collected by an Adian?

Asked

Viewed 366 times

1

Good afternoon guys, I’m trying to use a program in python to read seven temperature values through the serial port with Arduino, so far the program I’ve done collects the data, saved in a text file, and when I interrupt the execution it saves the text file and prints the graph on the screen, but I would like to generate the graph over time, not only at the end of the execution of the program, I would like to know how I could do it, I looked for a study on matplotlib, but I couldn’t find what I was looking for. Well, I’m leaving here on the question what I’ve written so far, and an image of the graph I generated.

####importando as bibliotecas necessarias###
import serial
import time
import matplotlib.pyplot as plt
import pandas as pd
try:
    porta = str("/dev/ttyACM" + input('Digite o numero da porta em que o arduino está conectado: '))
    nome = str(input('Nome do arquivo que será salvo: ') + '.csv')
    i = 0
    velocidade = 9600
    conexao = serial.Serial(porta, velocidade) #aqui inicia a comunicação serial com o arduino
    with open(nome, 'w', encoding='utf-8') as salvo:
        conexao.write(str.encode('false'))# os dados são armazenados num arquivo de texto
        while True:
            i += 1 #aqui os dados que o arduino envia são lidos até parar a execução do programa
            horario = time.strftime('%H:%M:%S')
            dados = str(conexao.readline())[2:-5]
            if 'Hora' in dados: #a primeira linha que o programa deve ler é a do titulo
                print(dados[-25:])
                salvo.write(dados + '\n')
            if i > 2: #aqui o programa pula as duas primeiras linhas que as vezes o arduino manda com a formatação zoada
                print(horario + ',' + dados)
                salvo.write(horario + ',' + dados + '\n')
except FileNotFoundError: #caso a porta esteja errada
    print('Porta não encontrada!')
except KeyboardInterrupt: #quando o programa é encerrado e o grafico aparece
    data = pd.read_csv(nome)
    #essa parte usa o Pandas para converter o arquivo de texto gerado nas listas que formam o gráfico
    hora = data.iloc[:, 0]
    t1 = data.iloc[:, 1]
    t2 = data.iloc[:, 2]
    t3 = data.iloc[:, 3]
    t4 = data.iloc[:, 4]
    t5 = data.iloc[:, 5]
    t6 = data.iloc[:, 6]
    t7 = data.iloc[:, 7]

    #Essa parte imprime o gráfico na tela
    plt.plot(hora, t1)
    plt.plot(hora, t2)
    plt.plot(hora, t3)
    plt.plot(hora, t4)
    plt.plot(hora, t5)
    plt.plot(hora, t6)
    plt.plot(hora, t7)
    plt.show()
    print('Programa encerrado')

grafico

2 answers

0

Try to put this inside while true, I believe so will generate the graph as it receives the data

data = pd.read_csv(nome)
#essa parte usa o Pandas para converter o arquivo de texto gerado nas listas que formam o gráfico
hora = data.iloc[:, 0]
t1 = data.iloc[:, 1]
t2 = data.iloc[:, 2]
t3 = data.iloc[:, 3]
t4 = data.iloc[:, 4]
t5 = data.iloc[:, 5]
t6 = data.iloc[:, 6]
t7 = data.iloc[:, 7]

#Essa parte imprime o gráfico na tela
plt.plot(hora, t1)
plt.plot(hora, t2)
plt.plot(hora, t3)
plt.plot(hora, t4)
plt.plot(hora, t5)
plt.plot(hora, t6)
plt.plot(hora, t7)
plt.show()

-1

Browser other questions tagged

You are not signed in. Login or sign up in order to post.