Der Raspberry Pi besitzt diverse "General Purpose Input Output" Pins, die man zum Setzen/Lesen von digitalen Pegeln verwenden kann. Allersings muß diese Funktion durch Installation von 'wiringPi' erst freigeschaltet werden.

 

Pin-Nummerierung und spezielle Funktionen

http://wiringpi.com/pins/special-pin-functions/
http://pi.gadgetoid.com/pinout

 

Installation

Zuerst ist GIT-Kernmodul zu installieren:

sudo apt-get install git-core

anschließend wird der Pi auf den neuesten Stand gebracht:

sudo apt-get update

sudo apt-get upgrade

Jetzt kann die neueste Version von wiringPi heruntergeladen werden:

git clone git://git.drogon.net/wiringPi

Das Paket wird im Homeverzeichnis des Benutzers ins Verzeichnis "wiringPi" geschrieben:

/home/pi/wiringPi

Es ist in dieses Verzeichnis zu wechseln:

cd /home/pi/wiringPi

und

./build

aufzurufen, welches wiringPi compiliert.

 

Test der Installation

Jetzt testet man mit zwei Befehlen, ob die Library funktioniert:

gpio -v

gpio version: 2.26
Copyright (c) 2012-2015 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
Type: Model B+, Revision: 1.2, Memory: 512MB, Maker: Sony

gpio readall

+-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+
| BCM | wPi | Name    | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
|     |     | 3.3v    |      |   | 1  || 2  |   |      | 5v      |     |     |
| 2   | 8   | SDA.1   | IN   | 1 | 3  || 4  |   |      | 5V      |     |     |
| 3   | 9   | SCL.1   | IN   | 1 | 5  || 6  |   |      | 0v      |     |     |
| 4   | 7   | GPIO. 7 | IN   | 1 | 7  || 8  | 1 | ALT0 | TxD     | 15  | 14  |
|     |     | 0v      |      |   | 9  || 10 | 1 | ALT0 | RxD     | 16  | 15  |
| 17  | 0   | GPIO. 0 | IN   | 0 | 11 || 12 | 0 | IN   | GPIO. 1 | 1   | 18  |
| 27  | 2   | GPIO. 2 | IN   | 0 | 13 || 14 |   |      | 0v      |     |     |
| 22  | 3   | GPIO. 3 | IN   | 0 | 15 || 16 | 0 | IN   | GPIO. 4 | 4   | 23  |
|     |     | 3.3v    |      |   | 17 || 18 | 0 | IN   | GPIO. 5 | 5   | 24  |
| 10  | 12  | MOSI    | IN   | 0 | 19 || 20 |   |      | 0v      |     |     |
| 9   | 13  | MISO    | IN   | 0 | 21 || 22 | 0 | IN   | GPIO. 6 | 6   | 25  |
| 11  | 14  | SCLK    | IN   | 0 | 23 || 24 | 1 | IN   | CE0     | 10  | 8   |
|     |     | 0v      |      |   | 25 || 26 | 1 | IN   | CE1     | 11  | 7   |
| 0   | 30  | SDA.0   | IN   | 1 | 27 || 28 | 1 | IN   | SCL.0   | 31  | 1   |
| 5   | 21  | GPIO.21 | IN   | 1 | 29 || 30 |   |      | 0v      |     |     |
| 6   | 22  | GPIO.22 | IN   | 1 | 31 || 32 | 0 | IN   | GPIO.26 | 26  | 12  |
| 13  | 23  | GPIO.23 | IN   | 0 | 33 || 34 |   |      | 0v      |     |     |
| 19  | 24  | GPIO.24 | IN   | 0 | 35 || 36 | 0 | IN   | GPIO.27 | 27  | 16  |
| 26  | 25  | GPIO.25 | IN   | 0 | 37 || 38 | 0 | IN   | GPIO.28 | 28  | 20  |
|     |     | 0v      |      |   | 39 || 40 | 0 | IN   | GPIO.29 | 29  | 21  |
+-----+-----+---------+------+---+----++----+---+------+---------+-----+-----+
| BCM | wPi | Name    | Mode | V | Physical | V | Mode | Name    | wPi | BCM |
+-----+-----+---------+------+---+--B Plus--+---+------+---------+-----+-----+

"wiringPi" ist damit korrekt installiert und kann benutzt werden.

Man kann mit einem weiteren Befehl testen, ob die Pins funktionieren. Hierzu darf nichts am Steckverbinder des Raspberry Pi angeschlossen sein:

cd /home/pi/wiringPi/gpio

./pintest

PinTest
=======

This is a simple utility to test the GPIO pins on your Raspberry Pi.

NOTE: All GPIO peripherals must be removed to perform this test. This
  includes serial, I2C and SPI connections. You may get incorrect results
  if something is connected and it interferes with the test.

This test can only test the input side of things. It uses the internal
pull-up and pull-down resistors to simulate inputs. It does not test
the output drivers.

You will need to reboot your Pi after this test if you wish to use the
serial port as it will be left in GPIO mode rather than serial mode.

This test only tests the original pins present on the Rev A and B. It
does not test the extra pins on the Revision A2, B2 nor the A+ or B+

Please make sure everything is removed and press the ENTER key to continue,
or Control-C to abort...

          The main 8 GPIO pins  0: 7:  OK
                The 5 SPI pins 10:14:  OK
               The serial pins 15:16:  OK
                  The I2C pins  8: 9:  OK

Sieht man dieses Ergebnis, dann ist der Raspberry Pi voll funktionsfähig.

 

Befehle der Library

wiringPi bietet diverse Befehle, welche auf der Kommandozeile aufgerufen werden können:

http://wiringpi.com/the-gpio-utility/

 

LED ein-/ausschalten

Jetzt wird eine 3mm LED über einen 220 Ohm-Vorwidertstand angeschlossen:

  • Pin 5 (wiring Pi 9) => LED Anode über Vorwiderstand
  • Pin 6 (Ground)     => LED Kathode

Auf der Kommandozeile gibt man folgende Befehle ein:

gpio mode 9 out  Programmiere den Pin als Ausgang

gpio write 9 1      Schalte Pin 9 ein (LED leuchtet)

gpio write 9 0      Schalte Pin 9 aus (LED dunkel)

 

Verwendung unter PHP

PHP-Skripte laufen unter der User-ID des Webservers, in unserem Falle unter Benutzer 'www-data' aus der Gruppe 'www-data'. Die Gerätedateien von Linux können nur von 'root' verwendet werden. Bei Verwendung von 'wiringPi' besteht dieses Problem nicht. Jeder  Benutzer kann die Befehle verwenden. Möchte man die Pins unter PHP ansteuern, verwendet man 'shell_exec'. Fas '@' unterdrückt Fehlermeldungen und 'trim()' entfernt überflüssige White Spaces.

Lesen von Pin 2:

$val = trim(@shell_exec("/usr/local/bin/gpio -g read 2"));

Der Wert des Pin steht anschließend in der PHP-Variable '$val". Beispiel: Schreiben einer "1" auf Pin 2:

$val = trim(@shell_exec("/usr/local/bin/gpio -g write 2 1"));

Auf diese Weise sind alle gpio-Befehle zu verwenden.

 

Weitere Infos

https://projects.drogon.net/raspberry-pi/wiringpi/download-and-install/

http://www.it-adviser.net/raspberry-pi-gpio-pins-schalten/