Erste GUI mit Rassperry Pi4 und Tkinter

L I V E Stammtisch ab 20:30 Uhr im Chat
  • Hallo zusammen,

    ich habe mir vor einigen Monaten meinen ersten Rapsberry Pi4 für meinen Wohnwagen geholt. Ich möchte damit verschiedene Werte abrufen und mir auf einem kleinen Bildschirm anzeigen lassen. Dafür habe ich folgende Sensoren mit dem Raspberry verbunden:

    2x Temperatursensoren ( DS1820)

    2x DHT22

    1x Ultraschallsensor (Wasserstand des Tanks messen)

    Die Daten werden über ein "Programm" ausgelesen, was auch funktioniert.

    Mein Problem ist, dass ich mich damit komplett übernommen habe und keine Zeit finde, mir das Wissen anzueignen, um ein GUI zu schreiben.

    Meine Stärken sind eher in der Webentwicklung. Ich dachte, dass das nicht so weit auseinander ist, dass würde schon passen...

    Naja, ich möchte eigentlich nicht das Projekt verstauben lassen, daher meine Frage:

    Habt Ihr einen Tipp, ob es quasi schon vorgefertigte Scripte/Code für ein GUI gibt, dass ggf mit Copy&Paste und mit einigen Anpassungen übernommen werden kann?

    Versteht mich bitte nicht falsch, das hat mir mega viel spaß gemacht, aber ich komme einfach nicht dazu, das Projekt zu beenden. Natürlich könnte ich auch einfach div. Nachrüstsets für meine gewünschten abzulesenden Werte kaufen, aber ich habe da jetzt echt schon viele Stunden reingesteckt, da würde ich es echt gerne wenigstens noch zu Ende bringen...

    Vielleicht hat ja jmd einen Tipp :)

    Gruß, V1L

    • Offizieller Beitrag

    Ich glaube nicht, dass es da etwas fertiges gibt. Es gibt aber im Vergleich zu Tkinter ein relativ simples Modul guizero für Python3, mit dem man halbwegs schnell Erfolg hat. Wenn Du die Sensoren auslesen kannst, ist das ja schon die halbe Miete.

    Für größere GUIs ist das aber m.M.n. eher nicht geeignet.

  • Hallo zusammen,

    ich habe mittlerweile Zeit gefunden den Code für das GUI zu schreiben.

    Ich halte es nun ganz einfach: Ein Fenster mit 4 Frames und in den Frames soll nun jeweils ein Sensor angezeigt werden.

    Hier ist mein nächstes Problem. Ich habe einfach nichts finden können, dass mir erklärt wo ich den Code von z.B. dem DHT22 reinschreiben muss, dass er in diesem entsprechenden Fenster angezeigt wird...hat jemand einen Tipp, wo ich das nachlesen könnte? Danke vorab :)

    Gruß,

    V1L

  • Hallo,

    zeig uns doch mal den aktuellen Code und den Codeteil der deinen Sensor ausliest. Ich kann jetzt nur von mir sprechen, aber ich kann dir nicht sagen wo du was reinschreiben sollst, wenn ich es nicht kenne :gk1:

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hi, danke für deine Nachricht.

    Das hier ist der Code vom dem Sensor

    Code
    -

    und das von dem Gui:

    Gruß,

    V1L

  • Code vom Sensor:

  • Hallo,

    für das was du vor hast, solltest du dich etwas intensiver mit Python beschäftigen. Du musst zumindest Funktionen in deinem Code die du je nach Ereignis aufrufen kannst. Dazu solltest du dir mal das offizielle Python-Tutorial anschauen und durcharbeiten.

    Was ist denn das Ziel des Programms? Du startest es und es werden automatisch die Sensorwerte ausgelesen und angezeigt?

    Keine künftige Buttons oder sonstige Funktionen, die noch dazu kommen sollen?

    Ich frage deshalb, da es bei der Programmierung von GUI's öfters die projektorientierte Programmierung erforderlich ist. Das ist allerdings nicht ohne. Dazu muss man mit Funktionen und Klassen umgehen können.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hi Dennis,

    das wollte ich eigentlich vermeiden, wegen Zeit usw (im ersten Post ausführlicher Beschrieben). Ich habe gehofft dieses Projekt nun noch abschließen zu können, statt zu verwerfen und den Raspberry in die Ecke zu stellen.

    Ich möchte eigentlich nur ca. 5 Sensoren auslesen und auf einem Bildschirm ausgeben. Mehr soll nicht passieren. Ich habe 2 DHT22 Sensoren und 2 Ein Wire Sensoren ( Außentemp, Innentemp, Kühlschranktem und Badtemp) Ein Ultraschallsensor soll den Wassertankstand überwachen (alles im Wohnwagen).

    Ich dachte das ich das relativ einfach hinbekomme.

    Dazu solltest du dir mal das offizielle Python-Tutorial anschauen und durcharbeiten.

    Ich versuche mich mal etwas einzulesen, danke für den Link. falls jemand noch einen einfach Tipp hat, wie ich das umgesetzt (einfach) bekommen, freue ich mich auf Tipps :)

    Gruß,

    V1L

  • Okay, schau mal als kleine Vorlage( für mehr habe ich gerade keine Zeit):


    Das 'randint' simuliert einen Sensor, der dir Werte ausgibt. Die Funktion 'sensoren_auslesen' wird mit dem darin enthaltenen 'after' alle 1000 Millisekunden aufgerufen. In diesem Beispiel wird der Wert 'kühlschranktemperatur' an die Funktion 'Kühlschrankwert_aktualisieren' über geben und diese Funktion passt den Wert in deiner GUI an.

    Ich hoffe der Aufbau ist so gestaltet, dass du die Funktionsweise nachvollziehen kannst.

    Ich hoffe das hilft dir etwas weiter. Die Sensoren würde ich in der 'main' definieren und dann auch als Argumente an die Klasse übergeben.

    Versuch dich mal damit etwas vertraut zu machen. Das ist am Anfang meiner Meinung nach sehr undurchsichtig und du wirst Zeit investieren müssen, wenn nicht noch jemand gerade Zeit hat und dir einen fertigen Code schreibt.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hi :) ich sitze nun endlich an dem Code...leider raffe ich es nicht.

    Ich hab doch in den ersten Tutorials diesen Code für die Sensoren geschrieben (oder kopiert ;) ) dieser muss doch auch irgendwo hin oder?

    Ich hätte jetzt gedacht ich könnte "rendint" was ja den Sensor simuliert, austauschen mit meinem Script....ihr lacht euch bestimmt schlapp über so viel geballter unwissenheit :P

    Falls noch jemand nerven hat, freue ich mich über Hilfe :)

    Gruß,

    V1L

    EDIT: Zeile 9 bis 14 verstehe ich ;)

    Zuhause beim Contentbär

    Einmal editiert, zuletzt von V1L (29. Mai 2021 um 17:07) aus folgendem Grund: EDITEDIT: Muss ich ggf den Code von meinem TempSensor in das Feld Sensor_auslesen (self) einfügen?

  • Hallo,

    Ich hätte jetzt gedacht ich könnte "rendint" was ja den Sensor simuliert, austauschen mit meinem Script.

    Ja, so hatte ich das auch gedacht.

    Wie sieht denn deine Umsetzung aus?

    Keine Sorge hier lacht niemand über jemand der Fragen stellt. Zu dem ist das Forum ja da.

    Ich hätte es mir in dieser Art vorgestellt (für den Sensor hab ich weitestgehend deinen Code kopiert), ungetestet:

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

  • Hi Dennis,

    danke für den Code. Ich hab mit etwas Änderung das Script zum Laufen bekommen, leider bricht er aber nach einigen Sekunden mit Checksum did not validate.

    Wenn ich den Code so lasse, meckert er über das "continue".....

    Ich denke wenn ich das habe, kann ich das auf die anderen Sensoren übertragen....:P

    Hier mal der geänderte Code, vielleicht hast du noch eine Idee.

  • Hallo,

    ich habe den gleichen Sensor auch im Einsatz, ich benutze dafür aber einen anderen Code. Ich habe meinen mal in dein Programm eingefügt. Bei einem Aufruf der Sensorwerte wird intern alle 2 Sekunden bis zu 15 mal versucht den Sensor auszulesen, da das ja beim ersten Mal nicht immer gleich funktioniert. Damit es keine Überscheidungen gibt, lasse ich die Funktion, die den Sensor ausliest, nur alle 35 Sekunden aufrufen. Laut Datenblatt sollte der Abfrageintervall > 1,7 Sekunden sein, das hätten wir ja geschafft.

    Hier die Beschreibung zu der verwendeten Bibliothek: https://github.com/adafruit/Adafr…s/simpletest.py

    Allerdings ist die Bibliothek veraltet und man sollte sie nicht mehr verwenden. Auf den Ersatz wird auf der GitHub-Seite hingewiesen.

    Dein Fehler ist bekannt und tritt oft auf, es gibt einige Beiträge wenn man danach googlet. In den Beiträgen findet man aber auch Probleme im Zusammenhang mit der Nachfolge-Bibliothek. Kannst dich ja mal mit beidem beschäftigen.

    Hier wird jetzt in der Zeile kühlschranktemperatur = Adafruit_DHT.read_retry(22, 3) mit '22' der Sensor DHT22 angegeben und mit '3' der verwendete GPIO-Pin. In dem Fall GPIO3.

    Grüße

    Dennis

    🎧 With the music execution and the talk of revolution, it bleeds in me and it goes 🎧

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!