GPIO Port in Python nutzen

  • Hallo zusammen,
    mache gerade meine ersten RPi gehversuche und hänge schon an der blinkenden LED.
    dieses kleine Programm
    import RPi.GPIO as GPIO
    import time
    GPIO.setmode (GPIO.BCM)
    GPIO.setup (11, GPIO OUT)
    while True:
    GPIO.output (11, True)
    time.sleep (2)
    GPIO.output (11, False)
    time.sleep (2)
    GPIO.cleanup()
    funktioniert leider nicht. was mach ich falsch ??

  • Hallo Perseus,

    herzlich Willkommen in unserem Forum!


    funktioniert leider nicht. was mach ich falsch ??


    Kommt 'ne Fehlermeldung? Wenn ja, da posten!
    Kommt keine? Was passiert sonst?
    Quellcode ohne Schaltung zu posten ist nur bedingt tauglich, um Dir zu helfen.

    Mir fällt auf, daß

    Code
    GPIO.setup (11, GPIO OUT)


    wohl eine Fehlermeldung erzeugen müsste. Es sollte wohl heißen

    Code
    ... GPIO.OUT

    Dann startest Du eine Endlosschleife, an deren Ende die GPIOs aufgeräumt werden. Im zweiten Durchlauf gibt's die dann nicht mehr. Ist das beabsichtigt? Oder verstehst Du unter Blinken 1x an, 1x aus - dann passiert nichts mehr, aber Programm läuft weiter.

    Auch hier würde ich eine Fehlermeldung erwarten...


    Beste Grüße

    Andreas

    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.

    Einmal editiert, zuletzt von Andreas (24. Februar 2017 um 19:45)

  • Hallo,

    ich würde das wie unten angehängt machen.
    Aufpassen Pin11 ist GPIO17
    Gruß Franzel

    Einmal editiert, zuletzt von Franzel007 (24. Februar 2017 um 20:20)

  • Nutzt doch bitte die Code Klammern. Bei pyhton ist extrem wichtig Auf die einrückung zu achten!

    Code
    import RPi.GPIO as GPIO
    import time
    GPIO.setmode(GPIO.BCM)
    GPIO.setup(11,GPIO.OUT)
    while True:
        GPIO.output(11,True)
        time.sleep(2)
        GPIO.output(11,False)
        time.sleep(2)
    GPIO.cleanup()


    müsste eher stimmen ;)

    ps: welchen pi nutzt du ? könnte auch mit GPIO.setmode (GPIO.BOARD) gehen

    :shy: Legastheniker :shy:

    wer fehler findet darf nachsicht haben

    Klick>Youtube Channel<Klick

    Einmal editiert, zuletzt von pedator92 (24. Februar 2017 um 20:23)

  • Die erste Zeile wird leider überall falsch vermittelt - habe das selbst auch erst vor kurzem erfahren:

    [code=php]import RPi.GPIO as GPIO[/php]

    Eigentlich wäre korrekt:
    [code=php]from RPi import GPIO[/php]

    Bei der folgenden Zeile gibts ebenfalls etwas zu beachten:
    [code=php]GPIO.setmode (GPIO.BCM)[/php]
    Als erstes setzt man kein Leerzeichen in den Funktionsaufruf, also zwischen setmode und ()
    Nicht:
    [code=php]
    GPIO.setmode (GPIO.BCM)
    GPIO.output (11, True)
    time.sleep (2)
    [/php]
    Sondern:
    [code=php]
    GPIO.setmode(GPIO.BCM)
    GPIO.output(11, True)
    time.sleep(2)
    [/php]

    Das entscheidende ist aber dass es 2 verschiedene Modies gibt: GPIO.BCM und GPIO.BOARD
    BCM bezieht sich auf die GPIO-Nummer
    BOARD auf die Pin-Nummer
    So wäre zum Beispiel GPIO#2 -> Pin#3 und GPIO#3 wäre Pin#5
    Würdest du also GPIO.BOARD verwenden und stellst 11 auf GPIO.OUT müsstest du dein Kabel an Pin#11 bzw GPIO#17 anschließen. Da du aber GPIO.BCM verwendest wäre es GPIO#11 und somit Pin#23

    Und natürlich musst du GPIO punkt OUT setzen ohne Leerzeichen:[code=php]GPIO.OUT[/php]

    GPIO.cleanup() setzt die GPIO's wieder zurück.

    Bei Python sind Einrückungen extrem wichtig - anhand derer erkennt Python welche Zeilen wozu gehören und wo sich Blöcke von anderen Absetzen. Deine while Schleife ist also ein Block die Zeile für Zeile abgearbeitet wird. Das GPIO.cleanup() müsste wenn dann unter diesen Block gesetzt werden damit dies erst später ausgeführt wird... Allerdings blockiert die while Schleife das Script und nur ein STRG+C KeyboardInterrupt unterbricht diese..... aber erstmal egal

  • bootsmann ist meine Quelle :fies:

    In der Python Umgebung gibt es ein Verzeichnis: dist-packages/RPi/
    Dessen Inhalt ist:

    Ein Import mit " . " bezieht sich immer auf ein Unterverzeichnis.
    Bei meinem RoPi Projekt habe ich zum Beispiel folgende Struktur:

    Code
    RoPi/
    `- Toolsbox/USBinterface.py
    |- Main.py


    Meine Main.py liegt also direkt im RoPi Verzeichnis und ist jene die ich direkt starte. Im Toolsbox/ Unterverzeichnis hab ich weitere *.py Dateien die wiederum über die Main.py importiert werden:
    [code=php]
    from Toolsbox.USBinterface import USBinterfaceClass
    [/php]


    Übrigens: RPi.GPIO ist mittlerweile überholt. Nutze lieber das weitaus bessere und insbesondere für Anfänger leichter nutzbare gpiozero Module

  • Hallo Perseus,


    Vielen Dank an's Forum für die schnelle Hilfe.
    Fehler gefunden :)


    aber wie DEINE Lösung jetzt aussieht, behältst Du für Dich? :s

    Beste Grüße

    Andreas

    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.

Jetzt mitmachen!

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