Artikel 5: Sensordaten in Kivy visualisieren – Diagramme & Live‑Werte

In diesem Teil der Serie visualisieren wir Temperatur- und Luftfeuchtigkeitsdaten mit Matplotlib. Die Live‑Labels und das Diagramm werden regelmäßig über das Kivy‑Clock‑Modul aktualisiert. Die App nutzt automatisch die Datenbank aus Artikel 3 — inklusive Beispieldaten oder echten Sensordaten.

1. Ziel dieses Artikels

Wir erweitern die App aus Artikel 4:

  • Matplotlib‑Diagramm einbinden
  • Diagramm in graph_container platzieren
  • Live‑Labels (temp_label, hum_label) mit echten Werten füllen
  • automatische Updates über Clock.schedule_interval()
  • Button „Aktualisieren“ funktioniert weiterhin

2. Warum Matplotlib statt Garden Graph?

Kurz und klar:

  • Garden Graph funktioniert unter Windows oft nicht
  • Installation bricht ab oder Modul fehlt
  • keine gepflegte Windows‑Unterstützung

Matplotlib dagegen:

  • stabil
  • plattformübergreifend
  • extrem flexibel
  • perfekt in Kivy integrierbar

Darum nutzen wir Matplotlib.

3. Matplotlib installieren

pip install matplotlib
pip install kivy-garden
garden install matplotlib

4. Daten aus SQLite laden

nano db_reader.py

Inhalt:

import sqlite3

def load_data(limit=100):
    connection = sqlite3.connect("sensor_data.db")
    cursor = connection.cursor()

    cursor.execute("""
        SELECT timestamp, temperature, humidity
        FROM measurements
        ORDER BY id DESC
        LIMIT ?
    """, (limit,))

    rows = cursor.fetchall()
    connection.close()
    return rows[::-1]

5. Visualizer‑App mit Matplotlib & Clock

Ersetze VisualizerApp.py durch:

from kivy.app import App
from kivy.lang import Builder
from kivy.clock import Clock

from kivy_garden.matplotlib.backend_kivyagg import FigureCanvasKivyAgg
from matplotlib.figure import Figure

from db_reader import load_data
from db_init import initialize_database


class VisualizerApp(App):
    def build(self):
        initialize_database()

        self.build_plot()

        # Automatische Updates alle 10 Sekunden
        Clock.schedule_interval(lambda dt: self.update_plot(), 10)

        return self.root

    def build_plot(self):
        self.fig = Figure(figsize=(5, 3))
        self.ax = self.fig.add_subplot(111)
        self.canvas = FigureCanvasKivyAgg(self.fig)

        container = self.root.ids.graph_container
        container.clear_widgets()
        container.add_widget(self.canvas)

        self.update_plot()

    def update_plot(self):
        data = load_data(100)
        if not data:
            return

        temps = [row[1] for row in data]
        hums = [row[2] for row in data]

        # Diagramm aktualisieren
        self.ax.clear()
        self.ax.plot(temps, label="Temp (°C)", color="red")
        self.ax.plot(hums, label="Hum (%)", color="blue")
        self.ax.legend()
        self.canvas.draw()

        # Live-Werte aktualisieren
        last = data[-1]
        self.root.ids.temp_label.text = f"Temperatur: {last[1]:.1f} °C"
        self.root.ids.hum_label.text = f"Luftfeuchtigkeit: {last[2]:.1f} %"


if __name__ == "__main__":
    VisualizerApp().run()

6. Was jetzt passiert

✔️ Live‑Labels

Die Labels über der Grafik zeigen:

  • aktuelle Temperatur
  • aktuelle Luftfeuchtigkeit

✔️ Diagramm

Matplotlib zeigt die letzten 100 Messpunkte.

✔️ Automatische Updates

Alle 10 Sekunden:

  • Diagramm neu gezeichnet
  • Live‑Labels aktualisiert

✔️ Button „Aktualisieren“

Funktioniert weiterhin manuell.

✔️ Echte Sensordaten

Wenn du log_sensor_data.py ausführst, erscheinen die Werte automatisch in der App.

Veröffentlicht in Uncategorized.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Mit der Nutzung dieses Formulars erklärst du dich mit der Speicherung und Verarbeitung deiner Daten durch die Website einverstanden.