Beitrag vom 18.1.2016
1. Allgemeines
Die grün gekennzeichneten Pins (General Inputs/Outputs) der GPIO-Schnittstelle (General Purpose Input Output) des Raspberry Pi können sehr einfach programmiert werden.
Es lassen sich damit direkt LEDs oder LC-Displays ansteuern - und über entsprechende Treiberschaltungen auch Motore oder Lampen usw. steuern.
Einige Pins der GPIO-Schnittstelle sind speziell für die Datenübertragung mit anderen Geräten über die Interfaces I2C, SPI und UART vorgesehen. So lassen sich dann beispielsweise LC-Displays mit einer I2C-Schnittstelle ansteuern.
Bild: GPIO-Pinbelegung
aus http://scammo.de/2015/02/mit-dem-raspberry-pi-in-die-realitaet-die-gpio-schnittschtelle/
2. LED an GPIO anschließen
Wir wollen uns erst einmal auf die Programmierung der General Inputs/Outputs konzentrieren.
Eine ausführliche Beschreibung der GPIO-Programmierung findet man hier.
Es soll zu Beginn eine LED am Pin 11 über einen Vorwiderstand 270 Ω gegen Masse (Pin 25) angeschlossen werden:
3. Installieren der Bibliothek wiringPi
Diese Bibliothek ermöglicht ein einfaches Ein- und Ausschalten von GPIO-Pins.
Dazu benötigt man erst einmal keine Entwicklungsumgebung und keine Programmiersprache.
Die Bibliothek muss aber zuerst einmal auf dem System installiert werden.
Eine Internet-Verbindung (möglichst über Netzwerkkabel) wird dazu benötigt.
Wir öffnen LXTerminal, um sogenannte Konsolen-Befehle ausführen zu können:
Bevor man etwas installiert, wird immer ein Raspbian-Update durchgeführt.
Dazu gibt man in der Konsole (LXTerminal) den Befehl sudo apt-get update ein:
pi@raspberrypi: ~ $ sudo apt-get update
Variante 1 - wiringPi selbst compilieren:
Die Bibliothek wiringPi herunterladen:
pi@raspberrypi: ~ $ git clone git://git.drogon.net/wiringPi
In den Ordner wiringPi wechseln:
pi@raspberrypi: ~ $ cd wiringPi
Den Build-Prozess starten:
pi@raspberrypi: ~/WiringPi $ ./build
Variante 2 - fertige Bibliothek aus dem Repository installieren:
pi@raspberrypi: ~ $ sudo apt install wiringPi
Nun ist die Bibliothek wiringPi installiert und wir können den Status der GPIO-Pins auslesen mit dem (neuen) Befehl gpio readall im LXTerminal. Wir erhalten eine Tabelle mit dem aktuellen Zustands der GPIO-Pins:
Screenshot: GPIO READALL
In den beiden Spalten in der Mitte (B Plus Physical) erkennt man die physische Numerierung der GPIO-Pins (vergleiche Bild: GPIO-Pinbelegung).
Die Spalten V (jeweils links bzw. rechts daneben) zeigen an, ob der Pin momentan eine logische 0 oder 1 besitzt.
Die Spalten Mode zeigen an, ob der Pin auf IN oder OUT geschaltet ist.
Die Spalten mit der Bezeichnung Name enthalten die GPIO-Pin-Namen (vergleiche Bild: GPIO-Pinbelegung).
BCM und wPi verwenden leider unterschiedliche Nummerierungen, die nicht identisch mit den physischen Pin-Nummern sind.
wPi ist die Pinbezeichnung, wie sie innerhalb der Bibliothek wiringPi.h verwendet wird. Näheres dazu im nächsten Abschnitt.
4. Erster Test der Bibliothek wiringPi
Zuerst wird der GPIO-Pin 17 (physikalischer Pin 11) auf OUT (Ausgabe) geschaltet:
pi@raspberrypi: ~ $ gpio export 17 out
Die LED reagiert noch nicht.
Erst wenn wir eine logische 1 augeben, dann leuchtet die LED:
pi@raspberrypi: ~ $ gpio -g write 17 1
Wir geben eine logische 0 aus und die LED erlischt:
pi@raspberrypi: ~ $ gpio -g write 17 0
WiringPi benutzt eine andere GPIO-Belegung (Tabelle oben). Die Option -g weist WiringPi an, die normale Raspberry Pi Belegung (BCM) zu benutzen.
Die verschiedenen Namen und Nummern ein- und desselben Pins sind wirklich vewirrend!
Ohne die Option -g müsste man lt. Screenshot gpio readall die wPi-Pinnummer 0 verwenden, um den physischen Pin 11 anzusprechen:
Eine logische 1 bringt dei LED zum Leuchten:
pi@raspberrypi: ~ $ gpio write 0 1
Die LED erlischt:
pi@raspberrypi: ~ $ gpio write 0 0
Also - aufpassen mit den Pinbezeichnungen und -nummern!
Im nächsten Kapitel steuern wir die LED mit Hilfe der Programmiersprache C. Dazu verwenden wir die komfortable Entwicklungsumgebung CodeBlocks.
.