Überwachte GPIOs anzeigen

Fragen zu Tkinter.
Antworten
KuPZdf
User
Beiträge: 2
Registriert: Freitag 2. Februar 2018, 13:41

Hallo zusammen,

ich habe in der Firma eine kleine Aufgabe bekommen, stehe aber als völliger Anfänger bissi auf dem Schlauch :K

Ich habe hier einen Raspberry Pi3 Model B V1.2 vor mir liegen. Auf dem PI steckt ein Touchdisplay von Kuman.
Über einen GPIO soll ein Relais überwacht werden. Ist das Relais offen soll auf dem Display ein grünes Feld sein, ist das Relais geschlossen soll es rot werden.

Diesen Code habe ich schon zum laufen gebracht:

Code: Alles auswählen

#!/usr/bin/env python
#coding: utf8 
 
import time
import RPi.GPIO as GPIO
 
# Zählweise der Pins festlegen
GPIO.setmode(GPIO.BOARD)
 
# Pin 36 (GPIO 16) als Ausgang festlegen
GPIO.setup(36, GPIO.OUT)
 
# Ausgang 3 mal ein-/ausschalten
i = 3
while i > 0:
    # Ausgang einschalten
    GPIO.output(36, GPIO.HIGH)
 
    # Abfragen, ob Ausgang high ist
    if GPIO.input(36) == GPIO.HIGH:
        # Wenn Ausgang HIGH ist, Ausgabe im Terminal erzeugen
        print "Ausgang HIGH"
 
    # zwei Sekunden warten
    time.sleep(2)
    # Ausgang ausschalten
    GPIO.output(36, GPIO.LOW)
    # zwei Sekunden warten
    time.sleep(2)
 
    # Zähler für die Schleife herunter zählen
    i = i - 1
 
# Ausgänge wieder freigeben
GPIO.cleanup()
So. WIE schaffe ich es nun diese AUsgabe in ein GUI zum "laufen" zu bringen???

Ich habe es schon geschafft ein Fenster mit 2 Buttons zu erstellen um damit ein Relais zu schalten. Aber umgekehrt hab ich nen Knoten im Kopf und komme auf keine Lösung!

Freu mich auch Hilfen und Tipps von euch!

Gruß
Tom
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du benutzt RPI.GPIO. Da solltest du nicht tun, das ist ziemlich schlecht. Benutz besser gpiozero, oder mein persoenlichen Favoriten pigpio.

Und dann zeig mal bitte deinen GUI-Code. Davon haengt ab, wie man das loest.
KuPZdf
User
Beiträge: 2
Registriert: Freitag 2. Februar 2018, 13:41

Hallo und Danke erst mal für die erste Hilfe. Lauter neue Sachen für mich!

Ich habe GUI-mäßig bisher ja nur die Lösung: Button drücken und Relais ziehen an und fallen nach vorgegebener Zeit wieder ab.

Code: Alles auswählen

from tkinter import *
import time
import RPi.GPIO as GPIO

GPIO.setmode(GPIO.BOARD)
GPIO.setup(36, GPIO.OUT)
GPIO.setup(37, GPIO.OUT)

root =Tk() # Fenster erstellen
root.wm_title("Raspberry Pi GUI") # Fenstertitel
root.config(background = "#FFFFFF") # Hintergrund des Fensters

# Hier kommen die Elemente hin
Frame = Frame(root, width=400, height=400) # Frame installieren
Frame.grid(row=0, column=0, padx=10, pady=3) # Relative Position und Seitenabstand (padding)
Frame.config(background = "#FFFFFF")



def callback1():
    i = 5
    while i > 0:
        GPIO.output(36, GPIO.LOW)
        time.sleep(1)
        GPIO.output(36, GPIO.HIGH)
        time.sleep(1)
        i = i-1

def callback2():
    i = 3
    while i > 0:
        GPIO.output(37, GPIO.LOW)
        time.sleep(1)
        GPIO.output(37, GPIO.HIGH)
        time.sleep(1)
        i = i-1


buttonFrame = Frame
buttonFrame.grid(row=1, column=0, padx=10, pady=3)

B1 = Button(buttonFrame, text="Relais 1 5x schalten", bg="#FF0000", width=15, height=10, command=callback1)
B1.grid(row=0, column=0, padx=10, pady=3)

buttonFrame = Frame
buttonFrame.grid(row=1, column=0, padx=10, pady=3)

B2 = Button(buttonFrame, text="Relais 2 3x schalten", bg="#553311", width=15, height=10, command=callback2)
B2.grid(row=0, column=1, padx=10, pady=3)



root.mainloop() # GUI wird upgedatet. Danach kein Element setzen
GPIO.Cleanup()

Gruß
Tom
__deets__
User
Beiträge: 14522
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ok. Du musst erstmal eine GUI schreiben, die tut, was sie eigentlich tun soll. Und dann bitte mal hier im Tkinter Forum etwas stoebern: wir beschreiben hier eigentlich fast taeglich den Umgang mit "after", der Funktion, die man braucht, um einen Timer zu programmieren in tkinter. Damit kannst du schon mal periodisch pruefen, ob das Relais an ist, oder nicht.
Antworten