GPIO

Raspberry Pi GPIOs mittels I2C Port Expander erweitern – Teil 2

Im zweiten Teil des Tutorials wird gezeigt, wie man mittels eines Skripts die GPIO Pins des I2C auslesen kann und Signale sendet. Außerdem wird ein Skript gezeigt, dass auf einfache User Interaktionen reagiert.



Python Skript zur Ein- und Ausgabe

Also erstellen wir ein Skript

sudo nano i2c_input_output.py

mit folgendem Inhalt:

Mit STRG + O und STRG + X speichern und beenden.

Um das Skript nun zu starten, geben wir

sudo python i2c_input_output.py

ein. Sobald du den Taster drückst fangen die LEDs an zu leuchten. Mit STRG + C kannst du das Skript abbrechen und zur Konsole zurückkehren.

Wie du siehst ist die Benutzung recht einfach und damit hat man sich weitere 16 GPIO Pins geschaffen.



, , , , , ,


9 Kommentare

  1. Spike sagt:

    Hallo Felix,

    sehr gute Anleitung! Könntest du den Punkt mit dem Taster noch in die Anleitung mit aufnehmen (3,3V -> 10kOhm -> GPA7 <- Taster <-GND)? War zwar schnell gegoogelt aber der Vollständigkeit :)?

    • Felix sagt:

      Hey,
      das Tutorial ist nur ein Forsatz des ersten Teils, da ist der Aufbau angegeben 🙂

    • Spike sagt:

      Hallo Felix,

      danke für den Hinweis, habe das nicht im ersten Teil gefunden, daher die Anmerkung 🙂

      Gibt es denn eine Möglichkeit den Status einer Reihe abzufragen?
      Also den Hex Wert ob die Pins als Input oder Output definiert sind?

      Ich versuche gerade ein paar Funktionen zu schreiben die mir das Umrechnen etc. erleichtern.

  2. Holger sagt:

    Moin moin,

    ich habe in dem Script ein kleines Verständnisproblem. In Zeile 14 steht:
    # Binaer: 0 bedeutet Output, 1 bedeutet Input
    In Zeile 15 wird dann PIN 7 als Input definiert mit
    bus.write_byte_data(DEVICE,IODIRA,0x80)
    IODIRA hat den Wert 0x00 was ich denke auch Input aussagt.
    Ist in der Erklärung dann nur ein kleiner Fehler und müsste heißen
    # Binaer: 1 bedeutet Output, 0 bedeutet Input
    oder versteh ich das vollkommen falsch und bin auf dem Holzweg?

    Gruß
    Holger

    • Felix sagt:

      IODIRA und IODIRB haben jeweils 8 IO Pins. Bei IODIRB setzen wir alle als Output, sprich 00000000 (binär = 0x00). Bei IODIRA allerdings setzen wir einen Pin als Input und alle anderen als Output: 10000000 (binär = 0x80).

  3. Holger sagt:

    Nachdem ich mir jetzt noch mal das Datenblatt aus Teil 1 hinzugenommen habe, habe ich es endlich gerafft. 🙂 Danke

  4. Christian Gadau sagt:

    Hallo, vorab erstmal ein Lob zu der guten Anleitung.
    Allerdings habe ich immer Verständnisprobleme, wenn es um das Einlesen von Daten geht. Also die verwendung der Pins als Inputs. Ich lese ja immer ein Ganzes Byte ein. Besp.(00101010) wenn ich nun alle Pins als Eingang deklariert habe, wie kann ich nun differenzieren welches Bit auf „1“ ist? Ich möchte hinter jedes Bit eine Bedingung hängen. Also wenn Bit 2 „1“ ist machhe dies und wenn Bit 5 „1“ ist mache das.
    Du hast hier diese Bedingung abgefragt: if Taster & 0b10000000 == 0b10000000
    Wenn ich also alle Pins als Eingang dklariert habe,so ist die Abfrage so gut wie nie erfüllt. Wenn ich Beispielsweise Bit 7 & 8 auf „1“ habe, ist die Bedingung ja Falsch, aber mein Bit ist ja trotzdem „1“.
    Ich hoffe man kann meine Verwirrung verstehen. Vielleicht drehe ich mich ja auch nur irgendwo im Kreis. Vielleicht könnt Ihr mir ja helfen

    • Felix sagt:

      Hallo Christian,
      mit dem & Operator verbindest du zwei Bits. D.h nur wenn beide Eins sind, kommt als Ergebnis eine 1. Bsp:
      10000011 &
      10001010
      ——–
      10000010

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!