Neben all den vielfältigen Möglichkeiten, die mit einem Raspberry Pi umgesetzt werden können, bietet der Pi auch eine Reihe elektrischer Pins auf seinem Board, die sogenannten GPIO-Ports („General Purpose Input Output“).
An einigen dieser Draht-Pins liegt die Grundspannung an (0 Volt Erdung, 3,3V oder 5V), die übrigen Pins können entweder als lesender Eingang oder als schaltbarer Ausgang verwendet werden, sie können also entweder durch das Betriebssystem ein- und ausgeschaltet werden oder der Pi kann die aktuell am Pin anliegende Spannung in das Betriebssystem einlesen. Über die GPIO-Ports können somit entweder beliebige elektronische Schaltungen durch den Raspberry Pi gesteuert werden, oder es können Werte bspw. von äußeren Sensoren eingelesen werden.
GPIO-Ports ansteuern
Die auf dem Board befindlichen physischen Pins (hier der genaue Plan der Belegung) sind ganz einfach nochmals im Dateisystem des Raspberry Pi abgebildet, im Verzeichnis
/sys/class/gpio
Um beispielsweise an den physischen Pin Nr. 7 (entspricht lt. Belegung dem logischen GPIO 4) eine Spannung ein- oder auszuschalten, gibt man auf der Kommandozeile einfach folgende Befehle ein:
> cd /sys/class/gpio # anzusteuernde Pin-Nr. in die "export"-Datei schreiben # das Verzeichnis gpio4 wird daraufhin automatisch eingerichtet > echo "4" > export # Verzeichnis des GPIO 4 betreten > cd gpio4 # Den GPIO 4 auf Ausgang stellen > echo "out" > direction # Um 3,3 Volt an GPIO 4 einzuschalten # einfach eine "1" in die value-Datei schreiben... > echo "1" > value # ...und mit einer "0" die Spannung wieder ausschalten > echo "0" > value

Raspberry Pi GPIO
Eine sehr einfache Schaltung wäre also, enfach ein Lämpchen zwischen Pin Nr. 6 (konstant 0 Volt, Ground, GRND) und den schaltbaren Pin Nr. 7 (GPIO 4) zu halten und über diese Befehle das Lämpchen an- und auszuschalten…
…aber…
Achtung
Die GPIO-Pins kommen sozusagen direkt aus den Leiterbahnen eures Raspberry Pi und sind daher nur für einen sehr geringen Stromfluss ausgelegt. Ein einzelner Pin sollte nicht mehr als ca. 15 mA leisten müssen, die gesamte GPIO-Schnittstelle in Summe nicht mehr als 50 mA. Höhere Stromwerte führen zu einer nicht zulässigen Wärmeentwicklung, damit ggf. zu Abstürzen des System und im schlimmsten Fall zur Beschädigung eures Raspberry Pi.
Exkurs: Vorwiderstand
Die Stromstärke auf einem GPIO-Port muss also in jeder Schaltung beachtet und möglichst gering gehalten werden. Dies kann über einen sogenannten Vorwiderstand erreicht werden. Möchte man z.B. eine LED mit maximal 1,5V zwischen Pin 6 und Pin 7 wie oben beschrieben anschließen, so muss an eine Vorwiderstand die Differenz zu den vom Pi geleisteten 3,3 V (also 1,8 V) abfallen. Weiterhin soll die Stromstärke in der gesamten Schaltung 10 mA nicht überschreiten, dies ist ausreichend für das Schalten der LED und für den GPIO-Port zulässig.
Für einen Vorwiderstand, der in Reihe vor die LED geschaltet wird, ergibt sich somit nach dem Ohmschen Gesetz (Spannung = Widerstand * Stromstärke, U=R*I) ein minimaler Ohm-Wert von 180 Ohm (-> R=U/I, also 1,8 V / 0,01 A = 180 Ohm).
Wir wählen aus der genormten E-Reihe der verfügbaren Widerstände zur Sicherheit den nächsthöheren Wert, also 220 Ohm (mit Farbcode rot rot schwarz)
Wenn wir nun die LED und den Vorwiderstand zwischen Pin 6 und Pin 7 verdrahten, können wir über die oben gezeigten Terminal-Befehle die LED ein- und ausschalten. Yeah!
Transistorschaltung
Wollen wir nun aber nicht nur eine LED, sondern auch stärkere Verbraucher wie eine Lampe oder einen Motor ein- und ausschalten, so bietet sich die Verwendung einer externen Stromquelle und der Aufbau einer Transistorschaltung an. Den externen Stromkreis führen wir dabei über Kollektor und Emitter des Transistors, über den dritten Pin, die Transistor-Basis, schalten wir den externen Stromkreis über einen GPIO-Ausgang des Raspberry Pi.
Da an den GPIO-Ports eine positive Spannung ausgegeben wird, eignet sich dazu ein Standard-NPN-Transistor wie bspw. der BC-337. Zwischen die Basis und den GPIO-Pin legen wir auch hier wieder, um den Stromfluss zwischen Raspberry Pi und Transistor möglichst gering zu halten, einen relativ hohen Vorwiderstand (1kO oder höher, bitte jeweils die Werte der Schaltung und das genaue Datenblatt eures Transistors beachten). Der Terminal-Befehl „export 1 > value“ setzt dann den Motor in Gang.
GPIO-Ports als Eingang nutzen
Wie schon angedeutet kann der Raspberry über die GPIO-Ports umgekehrt auch einlesen, ob eine Spannung am jeweiligen Port anliegt.. Die Funktion eines GPIO-Ports kann jeweils über den Wert in der direction-Datei gesetzt werden:
> echo "out" > /sys/class/gpio/gpio17/direction > echo "in" > /sys/class/gpio/gpio4/direction
Verdrahtet man also einen Temperatursensor wie bspw. den DS18B20 korrekt mit den jeweiligen GPIO-Pins des Raspberry, so kann der Sensor die von ihm gemessene Temperatur über die Pins als digitalen Code übertragen und der Temperaturwert kann im Raspberry – also in jedem beliebigen Programm – verwendet und angezeigt werden.
Ebenso könnte etwa eine externe Lichtschranke, bestehend aus einer Infrarot-LED und einem IR-Empfänger, eurem Raspi mitteilen, dass sie gerade unterbrochen wurde – und so bspw. als einfache Alarmanlage fungieren.