You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
2.0 KiB
74 lines
2.0 KiB
import serial
|
|
import matplotlib.pyplot as plt
|
|
import matplotlib.animation as animation
|
|
from datetime import datetime
|
|
|
|
# -- NASTAVENÍ --
|
|
PORT = "COM3"
|
|
BAUDRATE = "115200"
|
|
MAX_POINTS = 50
|
|
|
|
# Seznamy pro ukládání dat
|
|
casy = []
|
|
teploty = []
|
|
|
|
# připojení na Seriovou linku
|
|
ser = serial.Serial(PORT, BAUDRATE, timeout=2)
|
|
print(f"Připojeno na {PORT}@{BAUDRATE} baud")
|
|
|
|
#vytvoření grafu
|
|
fig, ax = plt.subplots(figsize=(10,4))
|
|
fig.suptitle("ESP32 - teplota v realném čase")
|
|
|
|
#metoda pro dynamické vykreslování grafu
|
|
def update(frame):
|
|
"""Přečte řáděk ze seriové linky a aktualizuje graf"""
|
|
if ser.in_waiting > 0:
|
|
try:
|
|
line = ser.readline().decode("utf-8").strip()
|
|
if not line:
|
|
return
|
|
|
|
#parsování - hledáme "teplota:XX.X"
|
|
#formát původní "teplota:XX.X,vlhkost:XX.X"
|
|
parts = line.split(",")
|
|
teplota = None
|
|
for part in parts:
|
|
key, value = part.split(":")
|
|
if key.strip() == "teplota":
|
|
teplota = float(value.strip())
|
|
if teplota is None:
|
|
return
|
|
now = datetime.now().strftime("%H:%M:%S")
|
|
casy.append(now)
|
|
teploty.append(teplota)
|
|
#omezení na MAX_POINTS
|
|
if len(casy) > MAX_POINTS:
|
|
casy.pop(0)
|
|
teploty.pop(0)
|
|
|
|
#vykreslení
|
|
ax.clear()
|
|
ax.plot(casy,teploty,"o",markersize=3,label="Teplota")
|
|
ax.set_ylabel("Teplota")
|
|
ax.set_xlabel("čas")
|
|
ax.legend(loc="upper left")
|
|
ax.grid(True)
|
|
ax.tick_params(axis="x",roation=45)
|
|
|
|
fig.tight_layout()
|
|
print(f"{now} teplota: {teplota}")
|
|
|
|
|
|
except (ValueError,UnicodeDecodeError) as e:
|
|
print(f"Chyba: {e}")
|
|
|
|
#spuštění animace
|
|
ani = animation.FuncAnimation(fig,update,interval=500,cache_frame_data=False)
|
|
try:
|
|
plt.show()
|
|
except KeyboardInterrupt:
|
|
pass
|
|
finally:
|
|
ser.close()
|
|
print("Odpojeno.")
|