500px-Traffic_lights_4_states.svg

GPIO

Raspberry Pi Ampelschaltung mit GPIO Teil 1

In diesem Tutorial geht es um eine einfache Ampelschaltung mittels der programmierbaren GPIO Pins via Python. Im nächsten Tutorial erweitern wir die Schaltung um ein paar Funktionen (u.a. einen Input).



Zubehör

Folgendes brauchen wir dazu:

 

 Vorkehrungen

Zunächst müssen wir die Pakete und Pfade aktualisieren.

sudo apt-get update
sudo apt-get upgrade

Damit die Bibliothek nachher auch richtig funktioniert, brauchen wir python-dev.

sudo apt-get install python-dev

Anschließend laden wir die Python GPIO Bibliothek (die neueste Version gibt es hier, evtl. Version anpassen: https://pypi.python.org/pypi/RPi.GPIO )

sudo wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.6.1.tar.gz

Jetzt noch entpacken

tar zxvf RPi.GPIO-*

und in das Verzeichnis wechseln

cd RPi.GPIO-*

Nun lässt sich die Bibliothek instaliieren.

sudo python setup.py install

Sollte es hier zu Fehlern kommen, schreibt sie in die Kommentare. Die meisten Fehler sind zum Glück recht gut beschrieben.

Aufbau

Der Aufbau der ersten Schaltung sieht wie folgt aus:

ampel1_Steckplatine

Als Tipp: jede LED hat ein längeres und ein kürzeres Ende. Das längere gehört zum Positiven (3,3V), das kürzere zum Negativen (GND). Als Vorwiderstand bekommt die LED 470 Ω.

Ein Transistor funktioniert so, dass sobald auf den mittleren Pin ein Strom kommt, die Leitung von links nach rechts freigegeben wird. Damit der Strom jedoch nicht zu groß ist, schalten wir einen 10k Ω Widerstand.

Bevor du die Kabel ans Pi anschließt, überprüfe noch einmal die Schaltung.

 

Programmierung

Nachdem alles aufgebaut und angeschlossen ist, brauchen wir ein Skript, dass die LED blinken lässt. Wir erstellen ein Skript

sudo nano ampel_skript1.py

mit folgendem Inhalt

Achtung: Hier ist die Nummer des Pins wichtig und nicht die GPIO Nummer. Die Pin-Nummer ist 26, wobei es GPIO Pin 07 ist. Falls die GPIO Nummer angegeben werden soll, muss in Zeile 6 stehen:

GPIO.setmode(GPIO.BCM)

Wir speichern und beenden den Editor (STRG + O, STRG + X) und führen das Skript aus.

sudo python ampel_skript1.py

Um das Skript wieder abzubrechen, drücke STRG + C.

In Teil 2 bauen wir die Phasen einer Ampel ein.



,


38 Kommentare

  1. Marcus Wollmann sagt:

    Hallo,

    ich habe 2 Fragen bzgl. dem Aufbau der Ampelschaltung:
    1.) Welche Transistor-Typen kann ich statt des BC547 benutzen? BC337, BC546, BC139, BC140, 2N2222, 2N3904, 2N4401, 2N3055?
    2.) Wie befestige ich die Drähte an den GPIO-Pins?
    Liege ich richtig, wenn ich eine Steckverbindung auf die GPIO-Pins stecke und die Drähte oben drauf löte?

    Vielen Dank für Ihre Bemühungen.

    • Felix sagt:

      Hi,
      du musst zwischen PNP und NPN Transistoren unterscheiden.
      Bzgl. GPIOs nimm doch einfach Jumper Kabel dann musst du nichts löten.

  2. Michael Grom sagt:

    Hallo Felix,

    wofür sind die Transistoren überhaupt gut? Reicht es nicht, die LED mit Vorwiderstand direkt an die GPIO Pins zu legen? Zumindest legen die Beispiele auf sunfounder.com das nahe. 🙂

    Viele Grüße
    Michael

    • Felix sagt:

      Hallo Michael,
      der Transistor ist wie eine Art Schalter, der sich durch einen niedrigen Strom an der Basis die Verbindung Emitter-Kollektor öffnet (genaueres dazu auf Wikipedia). Bei den LEDs wäre es möglich sie auch direkt mit einem Vorwiderstand an den GPIOs anzuschließen, aber es ist generell nicht zu empfehlen, auch um die GPIOs vor Spannungsschwankungen zu schützen.
      LG Felix

  3. Simon sagt:

    Hallo
    Ich kenne mich nicht wirklich mit Python aus. Wenn ich das AmpelSkript ausführe Kommt in meinem Terminal die Meldung:
    File „ampel_skript1.py“, line 14
    GPIO.output(26, True)
    ^
    IndentationError: expected an indented block

    Wenn jemand weiß wo mein Fehler liegt wäre ich für eine Antwort dankbar.
    LG Simon

  4. Julius sagt:

    Hey ich hab ein Problem bei „sudo python setup.py install“
    sowie ich dies ausführe kommt bei mir zum Schluss „error: command ´gcc´failed with exit status 1“
    bitte um möglichst schnelle und genaue Hilfe, vielen dank schon mal im vorraus ^^

  5. Julius sagt:

    Hey ich bins nochmal, ich habe erneut einen Fahler, diesmal am Skript. bei mir Taucht ab Line 14 die Fehlermeldung :
    File „ampel_skript1.py“, line 9 (bzw.14)
    ^
    IndentionError: expected an indented block

    kann mir bitte jemand weiterhelfen, habe es schon via root probiert, hat aber auch nicht geklappt…
    vielen Dank im vor raus für die Hilfe.
    Mit Freundlichen Grüßen Julius

    • Felix sagt:

      Ich nehme an du hast das Skript geändert? Du musst nämlich aufpassen, da ein Tab ungleich mehreren Leerzeichen ist. Die Einrückung muss immer die selbe sein (z.B. Tabs oder z.B. 4 Leerzeichen). Du kannst diese aber nicht kombinieren, auch wenn die Einrückung gleich aussieht, ist es für den Kompiler ein Unterschied. Daher der „Indention“ (Absatz) Fehler.

  6. MrChrisEs sagt:

    Hallo,
    ich hab den versuch aufgebaut und das Skript mit Python 2 als auch mit python 3 probiert.
    Wenn ich das ganze dann abspeichere und im LX Terminal sudo python ampel_skript1.py eingebe bekomme ich die fehler meldung:
    File „ampel_skript1.py“, line 1
    Python 2.7.9 (default, Mar 8 2015,00:52:26)
    ^
    syntaxError: invalid syntax

    Wenn ich im Python die ersten drei Zeilen raus lösche, also die Info die von Haus aus in den ersten drei Zeilen steht:
    Python 2.7.9 (default, Mar 8 2015, 00:52:26)
    [GCC 4.9.2] on linux 2
    Type „copyright“, „credits“ or „license()“ for more information.

    Jetzt das Skript speicher und ausführe bekomme ich die Fehlermeldung:
    File „ampel_skript1.py“, line1
    >>> import RPi.GPIO as GPIO
    ^
    SyntaxError: invalid syntax

    Eine Idee?
    Danke für die Hilfe….

    • Felix sagt:

      Du musst die eckigen Klammern löschen (>>> ).

    • MrChrisEs sagt:

      Hallo, danke für die Antwort.
      Ich hatte RASPBIAN JESSIE installiert. Habe dann alles noch einmal aufgesetzt aber diesmal auf RASPBIAN WHEEZY. Jetzt war alles um einiges leichter da die Befehle die du schreibst auch funktionieren bzw stimmt das was du schreibst mit dem was bei mir passiert überein.

      Allerdings habe ich ein neues Problem:
      Wenn ich das Ampel_Skript1 ausführen will bekomme ich immer die Fehlermeldung:
      Traceback (most recent call last):
      File „ampel_skript1.py“ line1, in
      import RPi.GPIO as GPIO
      ImportError: No module named GPIO

      Habe mittlerweile schon viele Foren durchforstet und anscheinend bin ich nicht der einzige mit diesem Problem, allerdings komme ich nicht auf eine lösung drauf.
      So wie es mir scheint hat es etwas damit zu tuen das Python nicht auf die GPIO libary zugreifen kann weil keine berechtigung oder so ähnlich….
      Danke für deine hilfe, der Raspberry liegt die ganze zeit neben mir alles aufgebaut aber die LED fängt nicht zu leuchten an und ich weiß das es nur eine Kleinigkeit ist damit es funktioniert.
      Wie gesagt bin ein absoluter Anfänger auf dem Gebiet aber freue mich schon darauf deine Tutorials durchzuarbeiten.

      Viele Grüße

    • Felix sagt:

      Versuch erstmal ein Update:

      sudo apt-get update && sudo apt-get upgrade

      Gab es bei der Installation der GPIO Bibliothek (neueste ist 0.6.1) irgendwelche Fehlermeldungen? Wobei bei den neuen Raspbian Wheezy Versionen die GPIO Library bereits vorinstalliert ist.

  7. MrChrisEs sagt:

    …nein, beim installieren der GPIO Bibliothek (0.6.1) gab es keine Fehlermeldung.
    ich kann auch in das Verzeichnis wechseln…
    pi@raspberrypi ~/RPi.GPIO-0.6.1 $
    aber wenn ich das Skript starte bekomme ich die Fehlermeldung
    ImportError…

    Habe in diesem Forum einen Tread dazu gefunden habe das Gefühl das es am ehesten an das Problem herankommt, allerdings verstehe ich nicht ganz was sie damit meinen…
    http://www.forum-raspberrypi.de/Thread-python-rpi-gpio
    (2. seite)
    ???

    Danke dir noch einmal für die super Untersützung

    • Felix sagt:

      Hast du die Pakete alle soweit installiert?

      sudo apt-get update
      sudp apt-get upgrade
      sudo apt-get install python-dev
      sudo apt-get install python-rpi.gpio

      Der Fehler besagt nämlich, dass die Bibliothek (RPi.GPIO) nicht vorhanden ist, also wird sie wahrscheinlich nicht (korrekt) installiert worden sein.
      LG Felix

  8. MrChrisEs sagt:

    sudo apt-get update –> gemacht
    letzte zeile:
    Packetlisten werden gelesen… Fertig

    sudo apt-get upgrade
    Packetlisten werden gelesen… Fertig
    Abhängigkeitsbaum wird aufgebaut.
    Statusinformationen werden eingelesen… Fertig
    Die folgenden Pakete sind zurückgehalten worden:
    nuscratch
    0 aktualisiert, 0 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.

    sudo apt-get install python-dev
    Packetlisten werden gelesen… Fertig
    Abhängigkeitsbaum wird aufgebaut.
    Statusinformationen werden eingelesen… Fertig
    python-dev ist schon die neueste Version.
    0 aktualisiert, 0 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.

    sudo apt-get install python-rpi.gpio
    Packetlisten werden gelesen… Fertig
    Abhängigkeitsbaum wird aufgebaut.
    Statusinformationen werden eingelesen… Fertig
    python-rpi.gpio ist schon die neueste Version.
    0 aktualisiert, 0 neu installiert, 0 zu entfernen und 1 nicht aktualisiert.

    Langsam glaube ich es soll nicht sein…

  9. MrChrisEs sagt:

    gibt es am raspberry so etwas wie Zugriffsrechte?

    Hab mich in der Zwischenzeit ein bisschen mit GUI programmierung gespielt.
    Wenn ich das starten will (F5) kommt die Meldung :
    [Errno 13] Permission denied: ‚/home/pi/Obfl1.py‘

    Hat das etwas damit zu tuen?

    • Felix sagt:

      Mit sudo führtst du etwas mit Root Rechten aus. Das ist für den GPIO Zugriff auch nötig, aber ich denke mal, dass du das Skript auch so gestartet hast (sudo python xy.py)?

  10. MrChrisEs sagt:

    Ja , habe ich.
    Habe alles mit sudo ausgeführt.
    Komischerweise findet er kein Modul.
    Habe wie eben geschrieben bisschen die Oberfläche zu schreiben begonnen aber auch da findet er das modul ( in dem Fall Tk inter) nicht.

    Hab jetzt den Benutzer gewechselt zu root und alles nocheinmal durchgegangen aber auch so, immer die gleich Fehlermeldung…

  11. MrChrisEs sagt:

    gibt es eine möglichkeit das zu sehen?

    Oder sollte ich alles nocheinmal runterlöschen mit:
    purge python?

    • Felix sagt:

      sudo dpkg -l | grep python
      Ansonsten im Extremfall ein frisches Raspbian verwenden und erstmal überprüfen, was schon installiert ist (sudo python und dann in der Python Konsole import RPi.GPIO as GPIO).

  12. MrChrisEs sagt:

    Hallo Felix.
    Du hattest recht, nach dem Installieren hab ich ein Upgrade gemacht.
    Hab mir das Protokoll durchgelesen und gesehen das Python und die GPIO libary auch dabei war.
    Nach dem ich das standart setup gemacht hab (wlan, xrdp ect…)
    hab ich das Ampel skript geladen und es funktioniert. 🙂
    Werde mich jetzt einmal durcharbeiten und anfangen mein projekt zu realisieren.
    Vielen vielen Dank für deine super Hilfe.

    p.s.
    wenn es ok ist werde ich dich noch ein paar mal anschreiben um bei meinem Projekt weiter zu kommen und mir evtl ein zwei tutorials wünschen!?

    Danke nocheinmal…

  13. Steve sagt:

    Traceback (most recent call last):
    File „ampel_skript1.py“, line 2, in
    import RPi.GPIO as GPIO
    ImportError: No module named GPIO

    Hat jemand eine Ahnung?

    • Felix sagt:

      Ja, dir fehlt die GPIO Bibliothek. Wenn die Installation über die hier vorgestellte Variante bei dir nicht geklappt hat, kannst du auch ein aktuelles Raspbian Wheezy Betriebssystem nehmen, denn da ist die Bibliothek vorinstalliert.

    • Felix sagt:

      Ja, dir fehlt die GPIO Bibliothek. Wenn die Installation über die hier vorgestellte Variante bei dir nicht geklappt hat, kannst du auch ein aktuelles Raspbian Wheezy Betriebssystem nehmen, denn da ist die Bibliothek vorinstalliert.

  14. Sebastian sagt:

    Gibt es einen Grund, wieso du deine LEDs über Transistoren ansteuerst? Hat das einen speziellen Grund? Kann man dadurch eventuell auch leistungsstärkere LEDs schalten, die höhere Ströme benötigen (natürlich im Rahmen der Ströme, die der Transistor verträgt)?

    Eine weitere Frage noch: Wie groß ist der Strom, den ich maximal über den 5V Pin des Raspberry Pi ziehen kann? Ist der nur vom Netzteil, dem Grundverbrauch des PIs und dem Verbrauch der angeschlossenen USB-Geräte abhängig?

    • Felix sagt:

      Ja, genau. Wenn du den Strom vom Pi nehmen willst, sind maximum 5V möglich, was ein GPIO nicht liefern kann (und sogar kaputt gehen würde. Im Idealfall setzt man noch eine Diode ein, was ich der Einfachheit weggelassen habe. Wie du sagtest, kommst es auf die angeschlossenen Geräte (USB und GPIO) sowie an das Netzteil des Pi’s an. Über 2-300mA habe ich es aber noch nicht probiert.
      Bei größeren Spannungen würde ich ein Relais statt Transistor nehmen.
      LG Felix

  15. Julius sagt:

    Hey Felix, bei mir ist ein Fehler bei Zeile 2 :
    import RPi.GPIO as GPIO
    –> Import Error: No module named GPIO
    muss ich nochetwas installieren? ich hab die Bibliothek nähmlich bereits und weis nicht, was ich jetzt noch machen könnte.

    Danke schonmal im vorraus für deine Antwort

    • Felix sagt:

      Hallo Julius,
      nutzt du Python2 oder 3 (python --version)? Ist dein Raspbian auf dem neusten Stand?
      Du kannst mal versuchen die Bibliothek mit pip (sudo apt-get install python2-setuptools python2-pip bzw. sudo apt-get install python-setuptools python-pip) zu installieren:

      sudo pip install RPi.GPIO

      Ansonsten schau mal in diesen Artikel: https://sourceforge.net/p/raspberry-gpio-python/wiki/install/

    • Julius sagt:

      Ich habe Gemacht, was darin stand, aber es zeigt trotzdem den selben Fehler an…

      pi@raspberrypi ~/RPi.GPIO-0.6.1 $ sudo python ampel_skript1.py Traceback (most recent call last):
      File „ampel_skript1.py“, line 2, in
      import RPi.GPIO as GPIO
      ImportError: No module named GPIO

      (Kopie aus dem Terminal)
      der Fehler hat sich bis jetzt noch nicht behoben

      ps ich benutze python 2

      danke im vorraus

  16. Maxxx sagt:

    Servus,
    ich stehe ganz am Anfang und habe quasi 0 Kenntnisse. Bei mir ergab sich schon ein Problem im ersten Schritt mit dem aktualisieren der Pakete und Pfade. Ich habe keine Möglichkeit mit dem Pi einen Internetzugang zu erhalten und muss daher alles offline erledigen.

    Ist das generell möglich? Quasi alles am Pc downloaden und per usb-stick auf den Pi. Und wenn ja, wie geht das?

    Danke schonmal im voraus,

    Max

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!