Raspberry 3 Phyton Variablen visuell darstellen

  • Guten Morgen,

    ich bin ganz neu in dem Thema Raspberry Pi 3 und versuche zurzeit einen Rotations und Beschleunigungssensor zu programmieren und visualisieren. Das Programmieren in Phyton hat geklappt und die -x -y -z Achsen Daten werden beim betätigen von Running Skript auch angezeigt. Ich hätte aber gerne, das die Daten über die Position des Sensors dauerhaft aktualisiert werden und am besten visuell z.B. durch Diagramme dargestellt werden können. Ich habe leider keine Möglichkeit mein Raspberry mit dem Internet zu verbinden. Was gibt es da für Möglichkeiten? :)

    Mein Projekt basiert auf folgende Anleitung: https://tutorials-raspberrypi.…-dem-raspberry-pi-messen/

    Leider gibt es nur eine Anleitung für das anzeigen Daten in Phyton, aber nicht als kontinuierliche Visualisierung. Bzw. ich habe nur Anleitungen gefunden, bei denen man auf dem Raspberry Internet benötigt.

    Danke für eure Hilfe :)

    Lg

  • Alternative lokale Anzeige auf dem Pi:

    Da bietet sich einmal eine Ausgabe via GUI (z.B. tkinter oder guizero) an. Das ist aber nur bei vorhandener graphischen Oberfläche (X-Server) sinnvoll, sonst musst du einige Zusatzhürden überwinden die dich garantiert deutlich ausbremsen.

    Ein weiterer Weg für die Darstellung kann auch eine Browser Anzeige sein, allerdings setzt auch das voraus dass du keine lite Version des Betriebssystems am Start hast.

    Für die Browservariante schreibst du die Messergebnisse des Sensors in eine Datei. Hier solltest du aber darauf achten, die Datei nach jedem Schreibzyklus wieder zu schließen, sonst kann kein anderes Programm die Datei öffnen solange deine Sensoranwendung läuft. Die Datei kannst du dann im Browser auslesen und anzeigen. Basierend auf meinem Hintergrund würde ich persönlich die Browserausgabe mit PHP umsetzen. Das geht aber garantiert auch mit Python, nur fehlt mir dazu die Erfahrung.

  • Leider gibt es nur eine Anleitung für das anzeigen Daten in Phyton, aber nicht als kontinuierliche Visualisierung.

    Hier kannst du allerdings auch ansetzen:

    1. lass dein Sensorprogramm die Daten in eine Datei schreiben
    2. Lass dein Anzeigeprogramm in einer Schleife laufen. Dabei wird die Datei regelmäßig geöffnet, gelesen und wieder geschlossen. Mit den gelesenen Daten aktualisierst du deine Ausgabe.


    Da dein Sensorprogramm so wie so in einer Schleife läuft, kannst du eventuell das Anzeigeprogramm als Funktion einbinden und bei jedem Schleifendurchlauf aufrufen.

  • Hallo,

    aber gerne, das die Daten über die Position des Sensors dauerhaft aktualisiert werden

    starten wir mal damit. Dein Programm läuft einmal von oben nach unten durch und ist dann fertig.

    Du benötigst eine Schleife, in der immer wieder dein Sensor ausgelesen wird.

    Beispiel:

    Code
    ausgabe = 'Hallo'
    print(ausgabe)

    Das wird einmal ausgegeben.

    Wenn du eine Schleife einbaust, eventuell mit einer Verzögerung, dann sieht das so aus:

    Python
    from time import sleep
    
    ausgabe = 'Hallo'
    
    while True:
        print(ausgabe)
        sleep(1)

    Jede Sekunde wird jetzt 'Hallo' ausgegeben. Dieses Prinzip musst du auf deinen Code anwenden.

    Du musst also in regelmäßigen Abständen die Funktion aufrufen, von der du die Wert ausgegeben haben willst.

    Wenn du erst mal noch etwas üben oder nachschlagen willst: The Python Tutorial — Python 3.9.6 documentation



    visuell z.B. durch Diagramme

    Auch das ist möglich, aber eins nach dem anderen. Wenn du so weit bist, kannst du ja mal zum Beispiel hier reinschauen:

    Matplotlib: Python plotting — Matplotlib 3.4.2 documentation


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • jede Sekunde wird jetzt 'Hallo' ausgegeben. Dieses Prinzip musst du auf deinen Code anwenden.

    Du musst also in regelmäßigen Abständen die Funktion aufrufen, von der du die Wert ausgegeben haben willst.

    Allerdings bedeutet das, dass die Anwendung immer eine Sekunde schläft und keine Daten erfasst. Das reicht aus wenn die Daten lediglich angezeigt werden sollen. Falls aber realtime daten auch noch für andere Aufgaben, z.b. Steuerung eines Fahrzeugs oder Gerätes, benötigt werden, dann darf die Messung nicht immer wieder für eine Sekunde unterbrochen werden.

  • Erstmal vielen Dank für deine ausführliche Antowort. Ich habe das ganze jetzt (glaube ich) so wie du es beschrieben hast umgesetzt. Alle 2,5 Sekunden werden jetzt die Werte erneut angezeigt, allerdings werden sie nicht aktualisiert und bleiben gleich. Was habe ich falsch gemacht?

    Danke :)

  • Allerdings bedeutet das, dass die Anwendung immer eine Sekunde schläft und keine Daten erfasst. Das reicht aus wenn die Daten lediglich angezeigt werden sollen. Falls aber realtime daten auch noch für andere Aufgaben, z.b. Steuerung eines Fahrzeugs oder Gerätes, benötigt werden, dann darf die Messung nicht immer wieder für eine Sekunde unterbrochen werden.

    Danke für die Info das ist kein Problem :)

  • Auch das ist möglich, aber eins nach dem anderen. Wenn du so weit bist, kannst du ja mal zum Beispiel hier reinschauen:

    Matplotlib: Python plotting — Matplotlib 3.4.2 documentation


    Grüße

    Dennis

    Ich habe irgendwie Probleme mit dem herunterladen der Software. Habe ich die Installations Anleitung richtig verstanden?

  • Den pip Befehl ist für das Terminal gedacht. Für Thonny installierst du die Pakete indem du auf Tools/manage packages klickst. Dann im Eingabefeld matplotlib eingeben und rechts daneben auf "Find packages from PyPi" klicken. Dann sollte das Packet gefunden werden, jetzt nur noch auf install klicken.


    Edit: Ich sehen gerade du hast Thonny in Deutsch. Dann findest du den Paketmanager unter "Extras"

  • Allerdings bedeutet das, dass die Anwendung immer eine Sekunde schläft und keine Daten erfasst


    Dieses Prinzip musst du auf deinen Code anwenden.

    Ich wollte mit dem Beispiel nur erklären, wie man eine Schleife schreibt und das es die Möglichkeit gibt, eine Unterbrechung einzufügen. Ich dachte dass die Dauer oder Notwendigkeit einer Unterbrechung jeder für sich selbst entscheiden kann.


    Was habe ich falsch gemacht?

    Kannst du deinen Code bitte direkt im Forum in COde-Tags posten? Das ist der </> Knopf. Dann ist er viel besser lesbar/kopierbar als mit einem Bild.


    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?

  • Ich habe das ganze jetzt (glaube ich) so wie du es beschrieben hast umgesetzt


    Du musst also in regelmäßigen Abständen die Funktion aufrufen, von der du die Wert ausgegeben haben willst.

    Zur Erklärung: In deinem Programm steht zum Beispiel vor deiner Schleife beschleunigung_xout = read_word_2c(0x3b). Das bedeutet, dass der Wert den die Funktion 'read_word_2c(0x3b)' ausgibt an den Namen 'beschleunigung_xout' gebunden wird. Jedes mal wenn du jetzt den Namen 'beschleunigung_xout' aufrufst bekommst du immer den gleichen Wert, so lange bis du einen anderen Wert an den Namen bindest bzw. die Funktion erneut aufrufst.

    Dass ist das was ich meinte mit 'die Funktion aufrufen' und auch das was @Tell geschrieben hat.

    Funktionen erkennst du daran das 'def' davor steht. Die werden erst ausgeführt wenn man sie aufruft.

    Grüße

    Dennis

    ... ob's hinterm Horizont wirklich so weit runter geht oder ob die Welt vielleicht doch gar keine Scheibe ist?