Aus Raspberry Pi Geek 02/2015

PHP auf dem Raspberry Pi (Seite 2)

www-data ALL=NOPASSWD: ALL
Abbildung 2: Über diese simple PHP-Webapplikation kontrollieren Sie den Zustand der LED.

Abbildung 2: Über diese simple PHP-Webapplikation kontrollieren Sie den Zustand der LED.

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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS Raspberry Pi Geek bei Google Play Readly Logo
Nach oben