GPIOs liefern keine Spannung

  • Hallo,

    mir ist meine SD Karte auf dem Raspbi 3b abgeraucht und ich musste OpenHabian, ein Raspberry Pi OS Lite mit OpenHab, neu installieren.

    Auf dem Pi habe ich ein Python-Skript laufen, mit dem ich meine Rolläden steuere. Das Skript hat bis zum Abrauchen der Karte funktioniert, an dem Skript selbst sollte es also nicht liegen, das sehe ich auch an den Logs.
    Was aktuell nur nicht funktioniert ist, dass die GPIOs, die ich auf HIGH setze, die erwartete Spannung von 3,3 V liefern. Das prüfe ich mit einem Multimeter und diesem Skript:

    Ich habe neben dem GPIO 23 auch schon 24, 2, 8, ... probiert, überall dasselbe. Die einzige Ausnahme ist, wenn ich den 3,3 V oder den 5 V Pin gegen GND messe, die liefern die Spannung.

    Als GPIO-Layout orientiere ich mich hieran: https://schmidt-feldberg.de/raspberry-pi-gpio-belegung/

    Was ich explizit machen musste und gemacht habe war, dass ich die pigpiod.service enabled habe, damit die GPIOs auch nach dem Booten verfügbar sind.

    Habt ihr eine Idee, was fehlen könnte, warum die GPIOs keine Spannung liefern?

    Vielen Dank und viele Grüße

    Felix

  • Mean Ergänzend: Das Argument von main() wird nirgends verwendet. LOW ist der Defaultwert und das macht auch nicht so wirklich Sinn den Pin erst auf LOW zu setzen wenn er sofort danach auf HIGH gesetzt wird. Da macht es dann ebenfalls keinen Sinn das in einer Schleife immer wieder zu tun. Zudem kann man den Initialzustand auch schon setup() mit auf den Weg geben.

    Die Ausnahmebehandlung ist nicht sinnvoll. Wenn man nix mit einer Ausnahme anzufangen weiss, dann macht man einfach gar nichts damit. Und bekommt dann die komplette Ausgabe die man zur Fehlersuche braucht.

    Ungetestet:

    “Don't put your trust in revolutions. They always come around again. That's why they're called revolutions. People die, and nothing changes.” — Terry Pratchett, Night Watch

  • Danke euch für eure Antworten.

    Sicher das die Klammern in Zeile #10 so gehören ?

    Tatsächlich, da hast du Recht. Da ist mir meine Version auf dem lokalen Rechner wohl kaputt gegangen bzw. ich habe sie kaputt auf den Raspbi kopiert und dann wohl nur dort gefixt.

    Mean Ergänzend: Das Argument von main() wird nirgends verwendet. LOW ist der Defaultwert und das macht auch nicht so wirklich Sinn den Pin erst auf LOW zu setzen wenn er sofort danach auf HIGH gesetzt wird. Da macht es dann ebenfalls keinen Sinn das in einer Schleife immer wieder zu tun. Zudem kann man den Initialzustand auch schon setup() mit auf den Weg geben.

    Die Ausnahmebehandlung ist nicht sinnvoll. Wenn man nix mit einer Ausnahme anzufangen weiss, dann macht man einfach gar nichts damit. Und bekommt dann die komplette Ausgabe die man zur Fehlersuche braucht.

    Das Skript ist ein Ausschnit und eine Verkleinerung meines Rolladenskripts, in dem auch noch Mqtt und Logging drin verwendet wird, etc. Ich habe das so umgebaut, dass es möglichst wenige Abhängigkeiten hat. Das Logging brauche ich in dem Fall auch nicht, weil ich das Skript direkt von der Shell aufrufe und mir prints lieber sind.

    Den KeyboardInterrupt dachte ich müsste ich abfangen, damit es keine Fehlermeldung hagelt, sondern das Skript kontrolliert beendet wird.

    Ich werde auf dein Skript umsteigen, danke.

    Meiner Meinung nach wird das aber auch nichts ändern, dass die GPIOs (noch) nicht funktionieren/3,3 V liefern.

    Kann es sein, dass ich explizit noch etwas in Openhabian/Raspberry Pi OS aktivieren muss, damit die GPIOs gehen oder hat sich irgendwas an der Pin-Nummerierung geändert?

  • Mean KeyboardInterrupt so zu behandeln macht Sinn, habe ich aber auch gar nichts zu gesagt und das ist in der Überarbeitung ja auch noch drin.

    print() Aufrufe haben halt den Nachteil, dass man sie nicht in verschiedene Stufen einteilen kann, die man (de)aktivieren kann. Ausserdem werden da keine Zusatzinformationen wie Zeitstempel, Modul- und Funktionsname und so weiter, und Tracebacks bei Ausnahmen ausgegeben. Das müsste man sich alles selber basteln. Von wo das aufgerufen wird ist ja eigentlich egal. Logging muss ja nicht in einer Datei landen, sondern kann auch einfach auf der Standard- oder Standardfehlerausgabe gemacht werden. Ich benutze gerne das externe loguru, das ist dann auf der Konsole auch noch nett bunt und hat noch mehr nützliche Informationen wenn man Ausnahmen protokolliert/protokollieren lässt.

    “Don't put your trust in revolutions. They always come around again. That's why they're called revolutions. People die, and nothing changes.” — Terry Pratchett, Night Watch

  • Meiner Meinung nach wird das aber auch nichts ändern, dass die GPIOs (noch) nicht funktionieren/3,3 V liefern.

    In dem Skript von __blackjack__ ist zumindest, wie von fred0815 schon beiläufig gezeigt, der GPIO als Output (, gpio.OUT) gesetzt worden. In Deinem Beitrag #1, Zeile #10 fehlt das ja offensichtlich.

  • Danke euch.

    Mean KeyboardInterrupt so zu behandeln macht Sinn, habe ich aber auch gar nichts zu gesagt und das ist in der Überarbeitung ja auch noch drin.

    print() Aufrufe haben halt den Nachteil, dass man sie nicht in verschiedene Stufen einteilen kann, die man (de)aktivieren kann. Ausserdem werden da keine Zusatzinformationen wie Zeitstempel, Modul- und Funktionsname und so weiter, und Tracebacks bei Ausnahmen ausgegeben. Das müsste man sich alles selber basteln. Von wo das aufgerufen wird ist ja eigentlich egal. Logging muss ja nicht in einer Datei landen, sondern kann auch einfach auf der Standard- oder Standardfehlerausgabe gemacht werden. Ich benutze gerne das externe loguru, das ist dann auf der Konsole auch noch nett bunt und hat noch mehr nützliche Informationen wenn man Ausnahmen protokolliert/protokollieren lässt.

    Da gebe ich dir Recht. Wobei es mir bei meinen Testscripts normalerweise gereicht hat, wenn ich die Fehlermeldung gesehen habe. Für das echte Rolladenskript verwende ich das logging Paket.

    In dem Skript von __blackjack__ ist zumindest, wie von fred0815 schon beiläufig gezeigt, der GPIO als Output (, gpio.OUT) gesetzt worden. In Deinem Beitrag #1, Zeile #10 fehlt das ja offensichtlich.

    Stimmt. Das hatte ich auf dem Raspberry Pi direkt gefixt.

    Ich habe nun nochmal das Skript von __blackjack__ auf den Raspberry Pi gespielt. Das ging zunächst auch nicht. Dann habe ich nochmal alles neu verkabelt, die Kabel ausgetauscht und auf einmal hat es wieder funktioniert. Keine Ahnung, was da genau falsch lief, zumal ja auch meine Anschlüsse zum Messen von GPIOs, die ich für die Rolläden gar nicht verwende, nicht funktioniert haben.

    Ich verwende für die Steuerung immer noch ein Breadboard. Das ist auch nicht unbedingt optimal und sollte ich endlich gegen Lochplatinen tauschen.

    Danke nochmals!

  • Post by hyle (August 5, 2024 at 8:14 PM).

    This post was deleted by the author themselves: obsolet (August 5, 2024 at 8:22 PM).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!