www-data ALL=NOPASSWD: ALL
Stellen Sie außerdem sicher, dass das Verzeichnis /var/www dem Benutzer und der Gruppe www-data gehört. Gegebenenfalls setzen Sie Benutzer und Gruppe mit folgendem Befehl:
$ sudo chown -R www-data:www-data /var/www
Nun sollte dem An- und Ausschalten der LED über die PHP-Webapp nichts mehr im Weg stehen.
Ausbaumöglichkeiten
So simpel die vorgestellte PHP-App auch ausfällt, lässt sie sich doch mit nur minimalen Anpassungen für eine ganze Reihe von Zwecken nutzen. So nutzt der Autor beispielsweise einen einfachen Transistorschalter, um mit dem RasPi seine digitale Spiegelreflexkamera anzusteuern – diesen Aufbau haben wir Ihnen bereits in Ausgabe 03/2014 vorgestellt [3].
Damals kam zur Betätigung des Schalters ein kleines Python-Skript zum Einsatz. Um es zu nutzen, war allerdings eine SSH-Verbindung notwendig – in vielen Situationen nicht besonders praktisch. Als Alternative bietet sich eine Variante des hier vorgestellten PHP-Skripts an – Sie finden sie in Listing 3.
Hier genügt ein einzelner Button. Die If-Abfrage wurde so modifiziert, dass sie bei dessen Betätigung den Transistorschalter aktiviert, eine halbe Sekunde wartet (sodass die Kamera das Signal erkennt) und dann denn Schalter wieder deaktiviert. Auf diese Weise lässt sich die Kamera von jedem Rechner oder Mobilgerät aus via Browser auslösen.
Listing 3
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Trigger</title>
</head>
<body>
Trigger switch:
<form method="get" action="switch.php">
<input type="submit" value="Trigger" name="switch">
</form>
<?php
$setmode17 = shell_exec("/usr/local/bin/gpio -g mode 17 out");
if(isset($_GET['switch'])){
$gpio_off = shell_exec("/usr/local/bin/gpio -g write 17 1");
sleep (0.5);
$gpio_on = shell_exec("/usr/local/bin/gpio -g write 17 0");
echo "Done!";
}
?>
</body>
</html>
Gpio-php nutzen
Zwar lassen sich die GPIO-Pins in PHP-Skripten unkompliziert über shell_exec() und Wiring Pi ansteuern, aber es gibt auch noch wesentlich elegantere Lösungen. So stellt das Projekt Php-gpio [4] eine spezielle PHP-Bibliothek für den Zugriff auf die GPIO-Pins des Raspberry Pi zur Verfügung. Sie installieren diese Library samt allen zugehörigen Dateien mit den Befehlen aus Listing 4 auf dem RasPi.
Listing 4
$ cd /home/pi $ wget http://getcomposer.org/composer.phar $ php composer.phar create-project --stability='dev' ronanguilloux/php-gpio
Php-gpio stellt eine Reihe von API-Aufrufen zur Verfügung, über die Sie die GPIO-Schnittstelle aus PHP-Skripten heraus ansteuern. Ein entsprechendes Beispiel für das Ansteuern der LED finden Sie in Listing 5. Das Skript lädt zunächst die Bibliothek (Zeile 2 und 3) und aktiviert dann den GPIO-Pin 17 (Zeile 4 und 5), in diesem Fall für Ausgaben.
In einer Schleife steuert der Code nun die LED an: Der Befehl $gpio->output(17, 1) setzt den Pin-Status auf 1 (die LED leuchtet auf), nach einer Sekunde Pause schaltet $gpio->output(17, 0) den Pin-Status auf 0 (die LED geht aus). Sobald Sie das Skript als blink_led.php abgespeichert haben, können Sie es mit dem Befehl sudo php blink_led.php starten. Die LED blinkt daraufhin im Sekundentakt.
Listing 5
<?php
require 'vendor/autoload.php';
use PhpGpio\Gpio;
$gpio = new GPIO();
$gpio->setup(17, "out");
while (true){
$gpio->output(17, 1);
sleep(1);
$gpio->output(17, 0);
sleep(1);
}
$gpio->unexportAll();
Zwar erleichtert Php-gpio das Ansteuern der GPIO-Pins aus PHP-Skripten heraus, doch müssen Sie diese auf der Kommandozeile starten – bei in HTML-Seiten eingebetteten und per Webserver ausgelieferten Skripten klappt das nicht. Die Lösung liegt auf der Hand: Sie rufen das Skript einfach via shell_exec() aus einer PHP-App auf.
Der Autor betreibt beispielsweise eine kleine PHP-basierte Fotogalerie auf seinem Raspberry Pi. Hier hat er an passender Stelle das Kommando
shell_exec('sudo php path/to/php-gpio/blink_led.php')
eingeflickt, sodass jedes Mal, wenn jemand die Fotogalerie besucht, die LED für einige Sekunden blinkt.






