WiringPi

Die WiringPi Bibliothek vereinfacht die Ansteuerung der GPIO-Anschlüsse. Es werden Funktionen zum Initialisieren, Lesen und Schreiben der GPIO-Anschlüsse und wichtige Timing-Funktionen zur Verfügung gestellt. Diese Seite behandelt das Installieren und Arbeiten mit WiringPi.

Inhalt


WiringPi Installation

Der Download der WiringPi Bibliothek erfolgt über Git.
git clone git://git.drogon.net/wiringPi
Anschließend in den Ordner wechseln und die Bibliothek bauen.
cd wiringPi
./build
Wenn alles normal gelaufen ist, dann müsste jetzt die Bibliothek in das Projekt eingebunden werden können. Zum Testen können folgende Befehle in der Konsole benutzt werden:
gpio -v
gpio readall
Es muss eine Header-Datei in jede .cpp Datei eingebunden werden, in der Funktionen aus der Bibliothek benutzt werden.
#include <wiringpi.h>
Beim Compilieren muss angegeben werden, dass die WiringPi Bibliothek mitbenutzt werden soll.
g++ Codedatei.cpp -o Ausgabedatei -lwiringPi
Für weitere Informationen besuche folgende Websites:

GPIO-Anschlüsse ansteuern

Das Ansteuern der GPIO-Anschlüsse ist mit der WiringPi-Bibliothek sehr einfach. Jeder Anschluss wird mit einem Schlüssel identifiziert. Die Schlüssel sind weiter unten in einer Tabelle aufgelistet.

Als erstes definiere ich für jeden GPIO-Anschluss, den ich benutze eine Konstante für die jeweiligen Schlüssel.
#define GPIO16 27
#define GPIO20 28
#define GPIO21 29
Eine Idee wäre es eine Headerdatei zu schreiben, die jeden Schlüssel auf diese Weise einer Konstante zuordnet.
Bevor ein Anschluss benutzt werden kann, muss definiert werden, ob der Anschluss ein Eingabe- oder ein Ausgabeport ist. Dazu verwendet man folgende Funktion:
pinMode (GPIO16, INPUT);
pinMode (GPIO20, OUTPUT);
Anschließend können die Anschlüsse mit eine Lese- bzw. einer Schreibefunktion angesteuert werden.
digitalWrite(GPIO20, HIGH);
digitalWrite(GPIO20, LOW);
int read16 = digitalRead(GPIO16);
Üblicherweise möchte man beim Auslesen weniger eine Momentaufnahme auslesen, sondern viel mehr eine Zustandsänderung abwarten. Dazu liest man ein Port solange aus, bis die Eingabe sich ändert.
while(digitalRead(GPIO16) == HIGH) {
    // Warten bis Eingabe auf LOW
}
// Ausführen sobald digitalRead(GPIO16) == LOW
Für weitere Informationen besuche folgende Seite:

Nutzung des I2C-Bus

Für die Nutzung des I2C-Bus des Raspberry Pi müssen weitere Vorbereitungsmaßnahmen unternommen werden. Als erstes müssen die I2C Helferfunktionen installiert werden.
sudo apt-get install libi2c-dev
Anschließend muss die wiringPi Bibliothek neu gebaut werden.
cd wiringPi
./build
Der nächste Schritt ist das Laden der Treiber in den Kernel mit folgendem Befehl:
gpio load i2c
Es solle überprüft werden ob alles geklappt hat. Dazu sucht man mit i2cdetect nach angeschlossenen Geräten.
gpio i2cdetect
Wenn euer Gerät mit seiner Geräte-ID in der Tabelle auftaucht, dann hat alles geklappt und der I2C-Bus kann verwendet werden.

Im Quelltext muss eine weitere Header-datei eingebunden werden:
#include <wiringpiI2C.h>
Diese Datei stellt eine Reihe Lese- und Schreibfunktionen zur Verfügung. Zusätzlich wird eine wichtige Setup-Funktion bereitgestellt:
int wiringPiI2CSetup (int devId);
Mit der Setup-Funktion bekommt man einen Filehandler für das Gerät zurück. Dieser ist wichtig für die Identifikation des Geräts für die Lese- und Schreibvorgänge. Als Übergabeparameter bekommt die Funktion die Adresse des Geräts aus der I2CDetect-Tabelle.

Mit dem Filehandler können folgende Funktionen zum Lesen und Schreiben verwendet werden:
int wiringPiI2CRead(int fd);
int wiringPiI2CReadReg8(int fd, int reg);
int wiringPiI2CReadReg16(int fd, int reg);
int wiringPiI2CWrite(int fd, int data);
int wiringPiI2CWriteReg8(int fd, int reg, int data);
int wiringPiI2CWriteReg16(int fd, int reg, int data);
Es hängt von dem Gerät mit dem kommuniziert werden soll ab, welche Funktionen verwendet werden müssen. In allen Fällen benötigt man den Filehandler.

Für weitere Informationen besuche folgende Seite:

GPIO-Keys

Die Funktionen der WiringPi Bibliothek zum Ansteuern der GPIO-Anschlüsse erfordern besondere Schlüssel für jeden Anschluss. In der folgenden Tabelle sind alle Schlüssel der GPIO-Anschlüsse aufgelistet.

WiringPi GPIO # # GPIO WiringPi
3.3V Power 1 2 5V Power
8 I2C_SDA - GPIO 2 3 4 5V Power
9 I2C_SCL - GPIO 3 5 6 Ground
7 GPCLK0 7 8 GPIO 14 UART_TxD 15
Ground 9 10 GPIO 15 - UART_RxD 16
0 GPIO 17 11 12 GPIO 18 - PCM CLK 1
2 GPIO 27 13 14 Ground
3 GPIO 22 15 16 GPIO 23 4
3.3V Power 17 18 GPIO 24 5
12 SPI_MOSI - GPIO 10 19 20 Ground
13 SPI_MISO - GPIO 9 21 22 GPIO 25 6
14 SPI_SCLK - GPIO 11 23 24 GPIO 8 - SPL_CE0 10
Ground 25 26 GPIO 7 - SPI_CE1 11
30 I2C - ID_SD 27 28 I2C - ID_SC 31
21 GPIO 5 29 30 Ground
22 GPIO 6 31 32 GPIO 12 26
23 GPIO 13 33 34 Ground
24 GPIO 19 35 36 GPIO 16 27
25 GPIO 26 37 38 GPIO 20 28
Ground 39 40 GPIO 21 29

Keine Kommentare:

Kommentar veröffentlichen

Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.