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')