sitemap link mailform link home

GPIO programmieren (Konsole)

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.

GPIO

GPIO

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 Externer Link hier.

Es soll zu Beginn eine LED am Pin 11 über einen Vorwiderstand 270 Ω gegen Masse (Pin 25) angeschlossen werden:

Schaltplan    LED an GPIO

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:

LXTerminal

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:

gpio_readall

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! Frown

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.

.

Letzte Änderung:
July 18. 2018 15:51:31
«    top    »