GPIO und threading Einsteigerprobleme "This channel is already in use"

  • Guten Abend,


    ich schlage mich heute schon den ganzen Tag mit Threading rum und scheitere immer wieder an der Fehlermeldung:
    "RuntimeWarning: This channel is already in use, continuing anyway. GPIO.setup(23,GPIO.OUT) #Gelbe LED"

    Aktuell möchte ich einfach nur ein paar dinge mit Threading üben und testen wie z.B. Syncronisation und Queues etc.

    da Morgen alle teile für einen autonomen balancierenden Roboter kommen.
    Da werde ich wohl um Threading kaum herumkommen.
    Zudem will ich es einfach können :)
    Ich habe mir hier mal einen ganz simplen Code verfasst.
    Ich habe Threading schon mit Datumsazsgabe etc. hin bekommen,
    ich schaffe es nur nicht mit GPIO aufgrund der genannten Fehlermeldung.
    Was muss ich hier ändern oder beachten?

    Wenn ich den Code ausführe blinkt nur die rote LED, die gelbe bleibt komplett aus.
    Die Fehlermeldung besagt ja auch das mit der gelben (GPIO23) irgendwas nicht stimmt.

    Wäre wirklich dankbar für ein paar Tipps und entschuldigt falls das hier die
    absolute noob frage ist :stumm:

  • GPIO und threading Einsteigerprobleme "This channel is already in use"? Schau mal ob du hier fündig wirst!

  • Wäre wirklich dankbar für ein paar Tipps und entschuldigt falls das hier die
    absolute noob frage ist :stumm:

    Ein ganz grundsätzlicher Tipp meinerseits, setzte anstatt auf das veraltete RPi.GPIO Modul auf gpiozero

    Diese wird noch aktiv weiterentwickelt und ist auch, meiner Meinung nach, deutlich komfortabler zum Programmieren.

    Allgemein, achte darauf dass du die GPIO Verwendungen bei Beendigung deines Skriptes wieder schließt mit close() oder durch Verwendung des with Statements

  • Hallo,

    Nutze gpiozero, in der Tat.

    Da werde ich wohl um Threading kaum herumkommen

    Falsch, zumindest in dieser pauschalen Form. Du brauchst wahrscheinlich Nebenläufigkeit, richtig. ABER, wie dir bei deiner anderen Frage schon gesagt wurde: Threading ist nicht die alleinige Wahl. Kooperatives Multitasking über Coroutines (ggf. via asyncio) oder Multiprocessing sind manchmal / oft die bessere Wahl, weil flexibler, einfacher etc.

    Es geht sicherlich auch über Threading und es gibt sicherlich auch Fälle, wo es sinnvoll ist, aber grundsätzlich ist IMHO Threading bei Python 3. Wahl, zumal die Umsetzung von Threads in Python auch nicht sooo gloreich ist.

    Wenn du gpiozero nutzt brauchst du dich mit vielen Sachen so wie so nicht beschäftigen, weil gpiozero viel mit Callbacks arbeitet.

    Gruß, noisefloor

  • vielen lieben Dank für die Tipps und Hinweise,
    irgendwie wird überall von Threading abgeraten :)

    Habe soeben mal ein paar tests mit gpiozero gemacht,
    ist ja wirklich nur noch der halbe Code, super!

    Von all dem abgesehen, kann mir dennoch jemand erklären warum bei meinem Test Skript hier Threading nicht tut?
    Ich habe es mal eben mit gpiozero angepasst, dennoch ist das Phänomen das selbe nur das ich nun nicht einmal mehr eine
    Fehlermeldung bekomme :)

  • Hallo,

    im folgenden mal das Geblinke aus dem obigen Thread-Beispiel von 2 LEDs mittels kooperativem Multitasking via asyncio & gpiozero nachgebaut:

    Gruß, noisefloor

    Edited once, last by noisefloor: fehlende `await...` Zeile dazu, damit's auch wirklich blinkt (August 29, 2018 at 8:27 PM).

Participate now!

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