0
我实际上正在研究一个schoolar项目。我们需要读取并显示来自4个不同传感器的信号。我决定使用python而不是matlab(simulink),因为matlab不识别树莓派3.我已经做了一个非常简单的指南惠特Tkinter,它读取并显示传感器的值,并将其保存在图表中。问题是,当我将代码放在图上时,它会停止传感器的刷新,并在一个图中显示四个值。这个问题是:使用matplotlib绘制python
如何显示四个值的四个图形?
如何使自动刷新?
如何使用一个按钮关闭所有数字?
如果它可能可以告诉我在哪里可以找到信息,使更多的视觉图形?如何定制de graph。
这里是我的代码有:
#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()
是否有你需要使用matplotlib,而不是另外一个图形系统,更设计了一个理由用于像pyqtgraph或bokeh这样的交互式使用? – TheBlackCat
即时通讯新的python所以它的第一件事出来时,我做研究。如果有更容易的欢迎。 –