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/