Komisches Problem mit GPIO

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

    ueber einen Web-Gui (Pilight) steuere ich GPIO 4 BCM 23. (Schater im Gui on/off)

    Wenn das python script mit /home/pi/th/Ferien.py gestartet wird, startet es mit print Off, obwohl mit gpio readall, gpio 4, 1

    anzeigt wird.

    Waehrend das script laeuft und ich den Schalter vom GUI on /off mache, sehe ich wie es print on on on, bezw. off off off ausgibt. Der GPIO wird also vom script richtig geschalten.

    Problem ist nur dass, egal ob pgio 4, 1 oder 0, mit gpio readall anzeigt, beim script start, immer print Off anzeigt und nicht, On, wie erwartet. Es printet nur on oder off wenn das scrip auf der Konsole zu sehen ist wie es ablaeuft.

    So kann ich das Verhalten nicht gebrauchen.

    Was ich noch bemerkt habe dass in der Maske von gpio readall bei GPIO4 unter V es manchmal IN oder OUT anzeigt.

    Dies habe ich auch noch gemacht:

    echo "23 > /sys/class/gpio/export

    sudo chmod 222 /sys/class/gpio/export /sys/class/gpio/unexport

    echo "in" > /sys/class/gpio/gpio23/direction

    Was habe ich falsch gemacht oder nicht daran gedacht??

    Hier das script:

    und hier Auszug von .json

    Code
    "Switch3": {
            "protocol": [ "relay" ],
            "id": [{
                    "gpio": 4
    }],
    "state": "off"

    Gruss

    gwaag:(

    2 Mal editiert, zuletzt von gwaag (6. August 2019 um 17:17)

  • Was habe ich falsch gemacht oder nicht daran gedacht??

    Entgegen des gewünschten Programmablaufs (nicht) eingerückt...

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,

    Danke fuer den Hinweis, aber das war nur ein Fehler in meinem posting. Habe es korrigiert.

    Die .json und das Python script habe ich mit einem web check ueberprueft und es ist soweit alles ok.

    Das ist nicht das komische verhalten. Es macht das gleiche ob mit gpiozero oder Rpi.Gpio programmiert.

    Auch mit einem andern GPIO geht es nicht wie erhofft.

    Gruss

    gwaag

  • Hallo,

    also was die json Datei mit dem dir gezeigten Skript zu tun hat erschließt sich mir noch nicht :conf:

    Es macht das gleiche ob mit gpiozero oder Rpi.Gpio programmiert.

    Versuch es mal statt RPi.GPIO mit gpiozero.

    Aber bitte mit Code herzeigen

    Wenn unbedingt RPi.GPIO dann entfern die sinnlose Zeile: GPIO.setwarnings(False)

    Du lässt dir die Warnungen nicht anzeigen...warum?

    Wie ist überhaupt der Eingang verdrahtet/angeschlossen?

  • Hallo Hofei,

    die .json Datei ist von Pilight. Ueber den Web Gui von Piligth schalte ich den GPIO 4 on/off auf dem Raspberry.

    Mit gpiozero hatte es genau die gleichen Eigenschaften des nicht funktionierens.

    Hier der Code:

    GPIO.setwarnings(False) hatte ich am Anfang mit einer # gesperrt, nachdem keine Fehlermeldungen gekommen sind habe ich die # wieder weg gemacht. Jetzt ist die # wieder drin.


    Verdrahtet ist nichts. Web-gui schaltet ueber.json den GPIO 4 ein und aus.

    Gruss

    gwaag

    • Offizieller Beitrag

    Jackinho Ja, das ist echt verwirrend und ja Du hast absolut recht mit Pin 16, aber siehe hier: https://de.pinout.xyz/pinout/pin16_gpio23 und bedenke, dass die Ausgabe von gpio readall eine Ausgabe von wiringpi ist, fernab von BCM oder Board. :stumm:

  • Das mit der Ausgabe ist mir klar. Aber wie wird der Pin angesprochen? Ich muss gestehen, dass ich mich mit JSON überhaupt nicht auskenne, und darüber wird der Pin ja laut TO geschaltet. Welches Pin-Numbering verwendet denn JSON?

    JSON ist ein allgemeines Datenformat und "verwendet" daher überhaupt kein Pin-Numbering - das obliegt der auswertenden Anwendung.

  • JSON ist ein allgemeines Datenformat und "verwendet" daher überhaupt kein Pin-Numbering - das obliegt der auswertenden Anwendung.

    Ok, danke für die Klarstellung. Ich muss zugeben, dass das mein (Er-)Fassungsvermögen jetzt übersteigt. :/ Ich werde den Thread fortan passiv (aber interessiert) weiterverfolgen.

  • Ähm, vielleicht steh ich auf dem Schlauch. Aber wie schaltet man einen als EINGANG programmierten GPIO softwaremäßig EIN oder AUS? Das widerspricht allem, was ich bisher mit GPIOs angestellt habe. Kann mich mal einer aufklären, was das werden soll? Das enzige, was ich mir noch zusammenreimen könnte, wäre, dass man zwischen Pullup (=ein) und Pulldown (=aus) hin und her schalten kann.

    Und noch weiter gedacht - selbst wenn es geht: Was bringt es dir, einen Eingang softwareseitig ein oder aus zu schalten? Dahinter sehe ich überhaupt keinen Sinn.

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Hallo,

    ich habe mich an das gehalten:

    pi@raspberrypi:~/th $ gpio readall

    Code
    +-----+-----+---------+------+---+-Model B1-+---+------+-------+-----+-----+
    | BCM | wPi |   Name  | Mode | V | Physical | V | Mode | Name  | wPi | BCM |
    +-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
                                       | 16     | 0   IN   | GPIO. 4  | 4 |23|


    .json von Pilight 8.1.5

    Code
    "Switch3": {
            "protocol": [ "relay" ],   # Mit diesem protocol wird der gpio gechalten??
            "id": [{
                    "gpio": 4          # Hier wird gpio 4 angegeben
    }],
    "state": "off"


    Ich habe das so vom Pilight Forum kopiert und mit gpio readall geschaut welcher gpio schaltet und es war GPIO 4, BCM 23.

    Dann habe ich so das python scrip geschrieben.

    Mit gpio readall sieht man dass V jedes Mal von 1 nach 0 oder 0 nach 1 schaltet mit dem button vom GUI. Komischerweise sieht man aber auch, dass manchmal der Mode von IN nach OUT wechselt .

    Wenn auf dem GUI on /off geschaltet wird, steht dann im Mode OUT, wenn man das python script laufen lässt, steht dann IN.

    Sometimes, when using a port as an output, it might be useful to be able to “read” its status – whether it’s 1/http://GPIO.HIGH/True or 0/http://GPIO.LOW/False.

    You can do this by treating it as an input port.

    GPIO.input(24)

    Das zur Erklärung.

    Das Ziel meines Versuchs ist es ueber den Pilight Web-Gui On /Off Button den Zustand, ob On oder Off im Raspberry weiter zu verarbeiten.

    Gruss

    gwaag

  • Hallo,

    gwaag: poste doch mal ein Bild oder eine Skizze des physischen Anschlusses an deinem Raspi. Ich denke auch, dass das "Problem" auch mit einem Durcheinander der Pinnummer ist.

    IMHO ist BCM23=GPIO23 (=physischer Pin 18) und BCM4=GPIO4 (=physischer Pin 7).

    Zitat

    Wenn auf dem GUI on /off geschaltet wird, steht dann im Mode OUT, wenn man das python script laufen lässt, steht dann IN.

    In deinem Skript setzt du den Pin ja auch auf IN... Der kann ja auch nur einen Zustand haben, nämlich IN _oder_ OUT. Wenn da zwei Skripte gegeneinander arbeiten kannst das nicht funktionieren.

    Gruß, noisefloor

  • Darf ich noch mal fragen, was das eigentlich soll, einen INPUT softwareseitig setzen zu wollen?


    Ich verstehe weder den Sinn dahinter, noch was das technisch eigentlich bedeuten soll...

    Oh, man kann hier unliebsame Nutzer blockieren. Wie praktisch!

  • Hallo,

    Also BCM 22, ist GPIO.setup(22, GPIO.IN) Pin 15, wPi 3 und wird neu im python script als Input lesen verwendet.
    BCM 23, ist GPIO 4, wird mit .json angesteuert und ist Pin 16, wPi 4. ( als output von Pilight definiert denk ich mal)

    Die Zuordung von BCM mit Pins und GPIO war nie ein Problem.

    Seit dem ich nun mit GPIO.input(22) den output 4 lese, geht es einwandfrei. Draht von Pin 16 auf 15 gemacht.

    Der Fehler lag im ersten Post beim definieren von GPIO.setup(23, GPIO.IN) anstatt GPIO.OUT und diesen abzufragen mit GPIO.input(23)

    Herzlichen Dank an alle für eure Hilfe.

    gruss

    gwaag

Jetzt mitmachen!

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