Ich arbeite eigentlich an einem Schulprojekt. Wir müssen die Signale von 4 verschiedenen Sensoren lesen und anzeigen. Ich habe mich dafür entschieden, python anstatt matlab (simulink) zu verwenden, da matlab den raspberry pi 3 nicht erkennt. Ich habe bereits eine sehr einfache Anleitung mit Tkinter erstellt, die die Werte vom Sensor ständig liest und anzeigt und in ein Diagramm einfügt. Das Problem ist, dass, wenn ich den Code für die Graphen einsetze, die Aktualisierung der Sensoren stoppt und die vier Werte in einer Zahl angezeigt werden. Die Frage (n) lautet (sind):Plotten auf Python mit Matplotlib
Wie kann ich die vier Werte in vier verschiedenen Diagrammen darstellen?
Wie kann ich die Aktualisierung automatisch machen?
Wie kann man alle Zahlen mit einem Knopf schließen?
Und wenn es möglich ist, können Sie mir sagen, wo kann ich Informationen finden, um mehr visuelle Grafiken zu machen? Wie man die Graphen anpasst. Hier
ist der Code, den ich habe:
#IMPORTAR LIBRERIAS NECESARIAS
from Tkinter import *
from drawnow import *
import RPi.GPIO as GPIO
import matplotlib.pyplot as plt
import numpy
import tkFont
import time
import Adafruit_DHT
#Variables
trig = 16
echo = 18
pir = 15
distance = 0
distancia = 0
tiempo = 0
temp = 0
humd = 0
distanciaM = []
temperaturaM = []
presenciaM = []
humedadM = []
#DECLARAR ENTRADAS Y SALIDAS
GPIO.setmode(GPIO.BOARD)
GPIO.setwarnings(False)
GPIO.setup(trig, GPIO.OUT)
GPIO.setup(echo, GPIO.IN)
GPIO.setup(pir, GPIO.IN)
#VENTANAS
win = Tk()
plt.figure()
#TITULO DE LA VENTANA
win.title("Lectura sensores")
#DIMENSIONES DE INICIO
win.geometry('1050x500')
#FUENTES
myFont = tkFont.Font(family = 'Helvetica', size = 36)
titles = tkFont.Font(family = 'Helvetica', size = 50, weight = 'bold')
#FUNCIONES
##LEER SENSORES
def med():
###DISTANCIA
global distance
global distancia
global temp
global humd
GPIO.output(trig, False)
time.sleep(1)
GPIO.output(trig, True)
time.sleep(0.00001)
GPIO.output(trig, False)
while GPIO.input(echo)==0:
pulse_start = time.time()
while GPIO.input(echo)==1:
pulse_end = time.time()
pulse_duration = pulse_end - pulse_start
distance = pulse_duration * 17150
distance = round(distance, 2)
distancia.configure(text=str(distance))
distanciaM.append(str(distance))
print(distanciaM)
###PRESENCIA
i=GPIO.input(pir)
if i==1:
rb1.configure(text = str(i))
time.sleep(0.1)
else:
rb1.configure(text = str(i))
time.sleep(0.1)
presenciaM.append(str(i))
print (presenciaM)
###TEMPERATURA Y HUMEDAD
humidity, temperature = Adafruit_DHT.read_retry(11, 27)
temp = temperature
humd = humidity
templl.configure(text=str(temp))
humll.configure(text=str(humd))
temperaturaM.append(str(temp))
humedadM.append(str(humd))
print(temperaturaM)
print(humedadM)
###GRAFICAR
plt.plot(distanciaM, label ='Distancia','r')
plt.plot(presenciaM, label='Presencia', 'g')
plt.plot(temperaturaM, label='Temperatura', 'b')
plt.plot(humedadM, label='Humedad', 'y')
plt.show()
##LECTURA CONTINUA
def leccont():
med()
win.after(1000, leccont)
##SALIR DEL PROGRAMA
def exitProgram():
GPIO.cleanup()
win.quit()
#WIDGETS
##TITULO
titulo = Label(win, text="Lectura de cuatro sensores", font = titles)
titulo.grid(columnspan = 3)
##DISTANCIA
dist = Label(win, text = "Distancia:", font = myFont)
dist.grid(row = 1, column=0, sticky=W)
##ETIQUETA DISTANCIA
distancia = Label(win, text = "Distancia" , font=myFont)
distancia.grid(row=1, column=1)
##ETIQUETA UNIDADES DISTANCIA
cms=Label(win, text = "cms", font = myFont)
cms.grid(row = 1, column = 2)
##ETIQUETA PRESENCIA
pa=Label(win, text = "Presencia:", font = myFont)
pa.grid(row=2, column = 0, sticky=W)
##INDICADOR PRESENCIA
rb1 = Label(win, text = "No Presente", font = myFont)
rb1.grid(row = 2, column =1)
##TEMPERATURA
templ=Label(win, text="Temperatura:", font=myFont)
templ.grid(row=3,column=0,sticky=W)
##ETIQUETA TEMPERATURA
templl=Label(win, text="Temperatura", font=myFont)
templl.grid(row=3,column=1)
##ETIQUETA UNIDADES TEMPERATURA
tempu=Label(win, text = "C", font = myFont)
tempu.grid(row = 3, column = 2)
##HUMEDAD
huml=Label(win, text="Humedad relativa:", font=myFont)
huml.grid(row=4,column=0,sticky=W)
##ETIQUETA HUMEDAD
humll=Label(win, text="humedad", font=myFont)
humll.grid(row=4,column=1)
##ETIQUETA UNIDADES HUMEDAD
humu=Label(win, text = "HR", font = myFont)
humu.grid(row = 4, column = 2)
##MOSTRAR VALORES
medir=Button(win,text="Medir",font=myFont,command=med,height=1,width=6)
medir.grid(row=6,column=0)
##LECTURA CONTINUA
lecconti=Button(win, text="Medicion continua", font = myFont, command = leccont, height = 1, width = 15)
lecconti.grid(row = 6, column = 1)
##BOTON SALIR
exitButton = Button(win, text = "Salir", font = myFont, command = exitProgram, height = 1 , width = 6)
exitButton.grid(row = 6, column = 2)
mainloop()
Gibt es einen Grund, warum Sie verwenden müssen matplotlib eher als ein anderes Grafiksystem mehr entworfen für interaktive Nutzung wie Pyqtgraph oder Bokeh? – TheBlackCat
Ich bin neu auf Python, so dass es das erste Ding kam, wenn ich die Forschung mache. Wenn es etwas leichter ist, ist es willkommen. –