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:
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.