RPi.GPIO | Modus und Aktuellen Status auslesen ?

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich arbeite seid einiger Zeit mit der RPi.GPIO Libary in Python.
    Ich möchte diese nutzen um Relais an meinem Raspberry zu schalten.
    Nun zu meinem Anliegen:
    Ist es irgendwie möglich, die aktuelle Konfiguration und den Status eines GPIOs auszulesen,
    die zuvor mit der Funktion GPIO.setup(18, GPIO.OUT) und GPIO.setup(18, GPIO.HIGH) in einem anderen Script gesetzt wurden ?


    Danke.

    Einmal editiert, zuletzt von koechcal (8. Juni 2015 um 15:20)

  • Hi,

    um den Status der GPIO's in der Shell schnell und unkompliziert abzufragen, nutze ich wiringPi.

    Wie Du wiringPi installierst und benutzt, erfährst Du hier

    Mit dem Befehl:

    [code=php]gpio readall[/php]

    werden Dir nach der Einrichtung alle GPIO's mit physikalischer Bezeichnung und als BCM in der Shell angezeigt. Zusätzlich, ob sie als In- oder Output konfiguriert sind.

    Mfg,

    sls

    “Don’t comment bad code - rewrite it.”

    Brian Kernighan

  • erstmal vielen Dank für die Hilfe!
    Die Lösung von bootsman war genau das was ich gesucht habe, habe es bereits getestet.
    Mit der Lösung von sls kann ich leider nichts anfangen da ich bei diesem Skript auf die Verwendung zusätzlicher Libarys gerne verzichten möchte.

    Ich kann nun mit der Funktion GPIO.gpio_function() auslesen wie der GPIO Konfiguriert wurde, jetzt würde ich gerne noch wissen, auf welchem Status sich der GPIO befindet welcher als OUT konfiguriert wurde (HIGHT oder LOW).
    gibt es dafür ebenfalls eine Funktion ? in der Wiki konnte ich leider nichts entdecken.

    EDIT:
    ich bin mit der Möglichkeit mit der GPIO.input() Funktion einen OUTPUT auszulesen bewusst, diese kann ich jedoch nicht nutzen, da hierbei der GPIO vorher im Skript mit GPIO.setup(1, GPIO.OUT) Konfiguriert werden muss und dadurch der wert des GPIOs verändert wird.

    Einmal editiert, zuletzt von koechcal (8. Juni 2015 um 16:16)

  • Muss es unbedingt Python sein?

    Also wenn du GPIO.gpio_function() nicht nutzen möchtest wäre RPi.GPIO denk ich das falsche, aber es gibt ja auch noch andere Möglichkeiten. Von wiringPI gibt es auch ein python Module und pigpio gäbe es auch noch (was ich persönlich besser finde insbesondere pigpiod). Und wenn das alles nichts nützt kann man auch noch auf die virtuellen Dateien in /sys/class/gpio/ zurückgreifen.

  • Ja ich würde gerne bei der Python-Variante bleiben.

    Es muss doch irgendwie möglich zu ermitteln ob ein zuvor gesetzter OUTPUT auf HIGH oder LOW steht ???

    Also, man kann mit der Funktion GPIO.input() den Status eines zuvor gesetzten OUTPUTS auslesen, dies geht aber leider nur wenn er im SELBEN Skript mit GPIO.setup() definiert wurde!! Wenn ich nun den OUTPUT mit GPIO.setup() neu definiere wird der aktuelle Status zurückgesetzt bevor ich ihn mit der GPIO.input() Funktion auslesen konnte.

    Ist das so Korrekt und aktueller Stand der RPi.GPIO Libary ?
    Falls ja wäre das ja der größte Schwachsinn!

    Was ich brauche ist eine ähnliche Funktion wie, GPIO.gpio_function() mit der ich die Konfiguration eines GPIOs auslesen kann, für den Status eines GPIOs.

    Einmal editiert, zuletzt von koechcal (8. Juni 2015 um 20:28)

  • ich habe bereits pigpio und wiringpi2 getestet.. leider sind beide libarys in meinem Test lange nicht so schnell wie RPi.GPIO.. (das python script wurde über einen apache2 webserver und php ausgeführt).
    des weiteren Installiere ungerne eine neue Libary nur weil mir eine Funktion fehlt.. vielleicht hat hier noch jemand eine Idee ansonsten werde ich gezwungener Maßen auf pigpio ausweichen müssen.

    Trotzdem vielen Dank @meigrad

  • Solche Fragen kommen immer auf, wenn man fertige Bibliotheken nutzt ohne die Grundlagen zu beachten. Ich habe nichts dagegen, weil man das Rad nicht immer wieder neu erfinden muss, aber man sollte verstehen, was man benutzt. Den aktuellen Wert (Status) eines GPIO erhält man, indem man einfach mal nach /sys/class/gpio/gpio#/value schaut. Entweder erweitert man die Library mit einer Methode oder man schreibt eine Funktion.

  • Ja das kann bei "learning by doing" durchaus vorkommen.
    Perfekt genau das habe ich gesucht! habe es grade bereits getestet.

    Ich werde das ganze mal als Funktion schreiben und hier Teilen, da es mir nach Stundenlanger Suche nicht gelungen ist eine Lösung für dieses Problem zu finden.

    Vielen Dank.

Jetzt mitmachen!

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