Raspberry Pi: GPIO Schnittstelle – Teil 1
Diese Artikelserie widmet sich der GPIO Schnittstelle. Diese Schnittstelle ist mit verantwortlich für den großen Erfolg des Raspberry Pis. Doch was ist das? GPIO heißt ausgeschrieben General-Purpose Input/Output. Die jeweiligen Großbuchstaben ergeben die Abkürzung GPIO. Das heißt soviel, dass diese Schnittstelle für Ein- und Ausgaben genutzt werden kann, jedoch nicht näher spezifiziert ist. Somit kann man diese Schnittstelle selber nach eigenem Ermessen verwenden.
Die GPIO Schnittstelle
Die GPIO Schnittstelle besteht beim Raspberry Pi aus 26 einzelne Pins. Der Prozessor hat insgesamt 54 Ein- und Ausgabeleitungen, von denen 17 als GPIO Schnittstelle verwendet werden können. Das heißt für den Programmierer, er kann entweder diese Leitungen zum Ausgeben oder zum Einlesen nehmen. Die Schnittstelle wurde beim Raspberry Pi B+, Raspberry Pi 2 und Raspberry Pi 3 erweitert. Ein exaktes Raspberry Pi GPIO Pinout findet ihr in meinem weiterführenden Artikel.
Ausgabe
Wird auf einer Leitung ein Signal ausgegeben, so sind dort entweder 3,3 Volt angelegt (Spannung oder logisch 1) oder eben keine Ausgabe, also 0 Volt (logisch 0).
Eingabe
Bei der Eingabe ist das genau anders herum. Liegt dort Spannung an, so ist das eingelesene Zeichen eine logische 1, andernfalls eine logische 0.
unterschiedliche Verbindungen
Leider ist das Arbeiten mit der Schnittstelle nicht ganz so einfach. Es sind nämlich nicht alle 26 Pins einfache Ein-/Ausgabepins. Tatsächlich gibt es eine reihe unterschiedliche Verwendungen:
- echte GPIO Pins
diese Pins funktionieren wie beschrieben um Eingaben einlesen oder zur Ausgabe. - I2C Interface Pins
das sind spezielle Pins über die Hardware über nur 2 Pins verwendet werden kann. So gesehen spezialisierte Pins. - SPI Interface Pins
funktionieren genau so wie die I2C Pins, jedoch mit einem anderen Standard. - Rx und Tx Pins
mit diesen Pins kann man serielle Geräte ansteuern. Wobei hier Rx für Receiver, also Empfänger steht und Tx für Transmitter, also Sender.
Zusätzlich muss man noch erwähnen, dass manche Pins PWM (pulse width modulation) verwenden und als Stromquelle verwendet werden können und manche Pins PPM (pulse position modulation) verwenden um damit beispielsweise Servo Motoren anzutreiben.
Verwirrt? Keine Angst, das ganze klingt zwar kompliziert, ist es nicht, solange man die Belegung der Pins kennt. Also bevor man an der Schnittstelle etwas anschließt bitte zuerst eine Information über die Belegung konsultieren. Das ist nun aber das gesamte theoretische Basiswissen über die GPIO Schnittstelle.
Pinbelegung (Pinout)
Die korrekte Pinbelegung herauszufinden war gar nicht mal so einfach, jedoch habe ich dazu eine wirklich tolle Grafik die fast selbsterklärend ist:
Kurz zur Beschreibung der einzelnen Pins:
- Betriebsspannung +5V
Es gibt zwei 5 Volt Pins und zwei mit 3,3 Volt Spannung, welche die Spannung für angeschlossene Geräte liefern. - Erdung GND
Gleich 5 Pins sind für das Erden zuständig. Sie sind relativ gleichmäßig über die Schnittstelle verteilt. - Ein/Ausgabe
alle anderen Pinso sind für die Ein- und Ausgabe von logischen Signalen. Dabei wird eine Spannung von 0-3,3 Volt angelegt bzw. erwartet. Eingabepins sind nicht 5 Volt sicher, man benötigt einen Spannungswandler (level shifter), falls von einer externen Quelle mehr als 3,3 Volt kommen. Manche GPIO Pins kann man ganz normal verwenden, andere sind hier mit den jeweiligen Standard markiert.
Diese Grafik sollte man sich am besten ausdrucken oder merken! Im nächsten Teil geht es nun um die praktische Umsetzung. Dabei werden wir über einen der GPIO Pins eine LED Lampe betreiben.
Super Beschreibung !
Freue mich schon auf die nächsten Beiträge…. C=;-)
Guter Artikel.
Ich habe bisher nur mithilfe der Hersteller-Library auf Hardware zugegriffen.
Doch nun möchte ich einen Schritt weiter gehen.
Kann ich mithilfe der GPIO-Pins des Raspberry Pis ein LCM2004D LCD Display (http://www.phidgets.com/documentation/Phidgets/3654_0_Datasheet.pdf) direkt steuern?
Ich möchte mir die $65.00 für den PhidgetTextLCD Adapter sparen 🙂
Gruss Alexander
Alexander
Hallo Alexander!
ich arbeite gerade an einem Artikel über ein Display für den Pi. Da bin ich gerade dabei mir den Treiber anzusehen. Der liegt auf GitHub vor, eventuell hilft die das ja 😉
Wo kaufst du das ganze Zeug also z.b. die gpios
meistens über Amazon oder Ebay.
Hi,
schöne Grafik zu den Pins!
Ich habe mal auf diesen Blog-Posting bei mir im Blog (http://blog.debuglevel.de/raspberry-pi-und-dcf77-empfaenger-von-conrad/) referenziert, da ich eine Darstellung der Pins gebraucht habe. Komfortabler für die Leser wäre natürlich, wenn ich die Grafik direkt einbinden dürfte (und dann einen Link zu deinem Blog druntersetze).
Falls das okay für dich wäre, wäres es super wenn du mir eine kurze Nachricht schreiben könntest – ansonsten belasse ich es so wie es jetzt ist 😉
Viele Grüße
Marc
Klasse Text, allerdings ist PPS pulse pause Modulation und geerdet wird auch nichts, das ganze sind Masse Pins oder Pins mit 0V Potential..
🙂
GPIO 27 (Pin 13) ist wahrscheinlich GPIO 21
Gruß
*
Vielen Dank für die Angabe der Pin- Funktionen in dem Bild.
Bei meinem Raspberry Pi B stimmt der GPIO27 auf Pin 13 des Steckers.
Hatte im Internet immer nur die Belegung mit GPIO21 auf Pin 13 gefunden, welche bei mir jedenfalls falsch ist!
Es war mir eine sehr große Hilfe!
Vielen Dank!
Vielen Dank für die tolle Beschreibung, ich bin neuer Raspberry fan und es freut mich immer wieder solche Beiträge zu lesen
Kann ich so einen Sensor direkt an einem PI betreiben?
https://www.ramser-elektro.at/shop/bausaetze-und-platinen/giess-o-mat-sensor-bausatz/
Oder brauche ich da noch so einen Frequenzteiler dazu?
http://www.ramser-elektro.at/shop/bausaetze-und-platinen/pegelwandler-und-frequenzteiler-kompletter-bausatz-1418116-18mmx30mmx1-6mm/
LEider ist da die Beschreibung ein bischen schlecht, ob die Dinger direkt betrieben werden können, oder nciht :-/
Hallo Franz,
da ich das selbst nicht wusste habe ich gleich mal beim Shop angefragt. Anbei die Antwort:
Ich hoffe das ist hilfreich.
Glückwunsch! Ja wo kommen denn die ganzen Aufrufe her? Und dann noch auf einer deutschsprachigen Raspberry Pi Seite! Sind das irgendwelche Robboter oder Scripte? Kommen die Aufrufen denn aus Deutschland? Soviele Aufrufe habe ich noch nie auf einen Beitrag auf http://wenzlaff.info/ erhalten. Soll ich auch mal was über GPIO schreiben? Was mach ich falsch?
ich habe noch die Auswertung von Analytics hinzugefügt. Das sind keine Bots, diese Aufrufe werden nicht gezählt. Warum gerade dieser Artikel so gut geht ist mir auch nicht ganz klar, würde sonst nur solche Artikel schreiben 😉 Es hat aber damit zu tun, das es damals im deutschsprachigen Raum nix gab und ich aber die GPIO Schnittstelle für ein Projekt benötigte…also schnell die Erfahrungen mitgenommen und in einem Artikel zusammengefasst. War Jahre lang Nummer 1 auf Google (für Keywords gpio und gpio schnittstelle) – das macht schon viel aus.
Ich lange bei der Recherche zu diversen Themen eigentlich recht oft auf deinem Blog. Vielleicht hast du ja mal lust was gemeinsam zu machen und Backlinks auszutauschen?
Hallo Werner,
super Beschreibung; insbesonder die Grafik mit der PIN-Belegung gefällt mir sehr gut. Ich komme in einer Sache nicht weiter und denke, dass Du mir bestimmt helfen kannst. Ich habe den Razberry (als Z-Wave Controller) auf einem Raspberry3+ installiert und benutze dieses Setup um Home-Asssistant (HA) zu betreiben.
Für HA gibt es auf github eine Image-Datei mit der man sich das Betriebssystem+HA gleichzeitig installieren kann; genannt Hassbian. Der Z-Wave Controller läuft auch und ich kann über Z-Wave meine Geräte im Heimnetz verwalten. Problem gibt es bei der Einbindung von Z-Wave in HA. Dabei muss ein „usb_path“ angegeben werden (für den Razberry, der ja auf der GPIO Schnittstelle hängt, wo sich auch die Stromversorgung befindet) und hier komme ich nicht weiter. Ich habe in den einschlägigen HA-Forum leider keine Lösung gefunden. Welchen Pfad muss man hier angeben? Oder gibt es ggf einen Konflikt mit anderen Raspberry Einstellungen auf dieser Schnittstelle?
Gruß, Herbert
Hey, absolut tolle Anleitung. Weiter so. Viele Grüße, Axel