Ich mache das auf einem Raspberry Pi. Ich bin sehr neu bei Python Ich bin vor kurzem von Arduino nach Himbeere für dieses Projekt umgezogen.Wie man etwas alle n Sekunden tut, während man etwas anderes mit Python macht
Ich möchte alle 5 Sekunden Temp zu Db senden, aber ich möchte die Grafik alle 1 Minute aktualisieren. Das Diagramm wird jedoch nicht aktualisiert, es bleibt in writeLog hängen. Ich habe print "loop" nach dem Start geschrieben aber es wird nicht angezeigt. Als nächstes schrieb ich print "hier" nach s.enter() in writeLog und es wird angezeigt.
Auch ich konnte plotNow nicht innerhalb von sched (Error nicht in Hauptschleife). Ich habe versucht Threading, aber ich konnte nicht 60sec für die Schleife bekommen.
Hier ist mein aktueller Code:
from matplotlib import pyplot as plt
from datetime import datetime
import MySQLdb
import sched, time
s = sched.scheduler(time.time, time.sleep)
db = MySQLdb.connect(host="localhost", user="root", passwd="", db="log")
cur = db.cursor()
cnt = 0
tempC = []
plt.ion()
plt.figure(figsize=(10,5))
def writeLog(sc):
print "Insert to DB"
try:
st = "%.2f" % thermoTempC
cur.execute("""INSERT INTO history (Datetime, Temp_Degrees, Remarks) VALUES (%s, %s, %s)""", (datetime.now().strftime('%Y-%m-%d %H:%M:%S'), st, 'OK'))
db.commit()
except:
db.rollback()
s.enter(5,1,writeLog,(sc,))
def plotNow():
plt.clf()
plt.grid(True)
plt.title('Current Temp = {:.2f}$^\circ$C'.format(thermoTempC), fontsize=15)
plt.ylabel('Temperature(C)')
plt.xlabel('Time(min)')
plt.xlim(0,120)
plt.ylim(0,90)
plt.plot(tempC, 'r.-', label='Actual', color='red')
plt.legend(loc='upper right')
plt.show(block=False)
while True:
thermoTempC = "32.00"
tempC.append(thermoTempC)
plotNow()
plt.pause(.1)
cnt = cnt+1
if(cnt>120):
tempC.pop(0)
s.enter(5,1,writeLog,(s,))
s.run()
auf thread_temp = threading.Thread (send_temp_loop) "Assert-Gruppe ist keine, Gruppenargument muss jetzt keine sein". In threading.Thread geändert (target = send_temp_loop). Außerdem wurde time.sleep (5000) in time.sleep (5) geändert. Mein einziges Problem ist jetzt, dass es das Diagramm nicht zeigt – IyaSheep
@IyaSheep Versuchen Sie und fügen Sie 'plt.clear' in Ihrer' plotNow' Funktion hinzu. Ich bin mir nicht sicher, ob das Aktualisieren eines Graphen ein Schmerz im Nacken ist, aber ich habe das schon oft gemacht und es macht normalerweise den Trick. –
Sie sollten 'time.sleep' nicht in einem Thread verwenden, der ein GUI-Fenster aktualisiert. – ImportanceOfBeingErnest