Startseite>PHP auf dem Raspberry Pi
Aus Raspberry Pi Geek 02/2015

PHP auf dem Raspberry Pi

© Olivier Le Moal, 123RF

Sprachtalent

Dmitri Popov

Es muss nicht immer Python sein: Auch per PHP lassen sich auf dem RasPi die GPIO-Pins ansteuern, was das Ganze für Webapps interessant macht.

README

Der Einstieg in PHP fällt auf dem Raspberry Pi nicht schwer. Dieser Artikel zeigt, wie Sie mit einer simplen PHP-App über eine Webapplikation die GPIO-Schnittstelle ansteuern.

Python und Scratch haben sich als die beliebtesten Programmiersprachen für den Raspberry Pi etabliert. Der Mini-Rechner versteht sich aber auch auf andere Sprachen wie etwa PHP. Letzteres macht den RasPi auch für Webprogrammierer interessant, die mit der Sprache vertrauter sind als mit Python und bereits erstellte PHP-basierte Apps mit dem Rechenzwerg zusammen einsetzen wollen.

Vor dem Einstieg in PHP müssen Sie es erst einmal auf dem RasPi installieren. Nachdem die Sprache typischerweise zusammen mit einem Webserver zum Einsatz kommt, geschieht das meist mit folgendem Kommando:

$ sudo apt-get install apache2 php5

Für die typischen Einsatznischen des Raspberry Pi erweist sich Apache allerdings oft als überdimensioniert. Um einen leichtgewichtigeren Webserver wie Lighttpd einzurichten, ersetzen Sie in dem Kommando einfach apache durch lighttpd.

Brücken bauen

Den einfachsten Weg, auf dem RasPi PHP zu verwenden, stellt das Verwenden der PHP-Funktion shell_exec() dar: Sie führt, wie der Name schon vermuten lässt, Befehle in der Shell aus und schafft auf diese Weise eine Art Brücke zwischen PHP und dem RasPi.

Im simpelsten Fall rufen Sie via shell_exec() Bash- oder Python-Skripte auf, die GPIO-Pins ansteuern oder andere gewünschte Aufgaben übernehmen. Eine etwas ausgefeiltere Variante zum Ansteuern der GPIO-Schnittstelle bietet die Bibliothek WiringPi [1], die es vorab aber erst einmal zu installieren gilt. Da sie nicht als Raspbian-Paket zur Verfügung steht, müssen Sie sie aus den Quellen übersetzen. Falls die dazu benötigte Versionsverwaltung Git noch nicht auf dem RasPi läuft, richten Sie diese als Erstes ein (Listing 1, Zeile 1) und laden damit die WiringPi-Quelldateien herunter (Zeile 2). Dann wechseln Sie in das dabei neu entstandene Verzeichnis (Zeile 3) und installieren die Bibliothek (Zeile 4).

Listing 1

 

$ sudo apt-get install git-core
$ git clone git://git.drogon.net/wiringPi
$ cd wiringPi
$ ./build

Mithilfe des Kommandos gpio -v prüfen Sie anschließend, ob dabei auch alles geklappt hat. Als Rückgabe liefert der Befehl im Erfolgsfall die Versionsnummer des installierten WiringPi sowie einige allgemeine Informationen zum verwendeten Raspberry Pi. Als Nächstes rufen Sie den Befehl gpio readall auf, der ein detailliertes GPIO-Layout-Diagramm ausgibt.

Erste Schritte

Im Folgenden soll eine ganz schlichte PHP-App demonstrieren, wie sich eine LED ansteuern lässt. Verbinden Sie die Diode dazu über einen Widerstand mit GND und dem GPIO-Pin 17 (Abbildung 1). Öffnen Sie dann auf dem RasPi ein Terminal und wechseln Sie ins Verzeichnis /var/www. Dort legen Sie die Datei gpio.php an und öffnen sie mit einem Texteditor. Tippen Sie den Code aus Listing 2 ein – er stammt von der Raspberry-Pi-Tutorials-Webseite [2] – und speichern Sie die Datei dann ab.

Abbildung 1: Das Verkabelungsdiagramm für den LED-Versuchsaufbau.

Abbildung 1: Das Verkabelungsdiagramm für den LED-Versuchsaufbau.

Listing 2

 

<html>
<head>
  <meta name="viewport" content="width=device-width" />
  <title>LED Control</title>
</head>
<body>
  LED Control:
  <form method="get" action="gpio.php">
    <input type="submit" value="ON" name="on">
    <input type="submit" value="OFF" name="off">
  </form>
  <?php
  $setmode17 = shell_exec("/usr/local/bin/gpio -g mode 17 out");
  if(isset($_GET['on'])){
    $gpio_on = shell_exec("/usr/local/bin/gpio -g write 17 1");
    echo "LED is on";
  }
  else if(isset($_GET['off'])){
    $gpio_off = shell_exec("/usr/local/bin/gpio -g write 17 0");
    echo "LED is off";
  }
  ?>
</body>
</html>

Das Herzstück der App ist ein HTML-Formular mit den Schaltern ON und OFF (Zeilen 8 bis 11). Klicken Sie einen der beiden an, übergibt das Formular dessen Wert als Teil der URL (gpio.php?on=ON oder gpio.php?off=OFF). Der PHP-Code kontrolliert über die Funktion shell_exec() den GPIO-Pin 17. Die Anweisung in Zeile 13 setzt den Pin zunächst auf OUT; der Code-Block in den Zeilen 14 bis 20 liest den aktuellen Wert aus der URL und schaltet dann den Pin mittels shell_exec() an beziehungsweise aus.

Nun können Sie in einem Webbrowser die URL http://RasPi-IP/gpio.php aufrufen (Abbildung 2) und mittels der Buttons die LED zum Leuchten bringen und wieder ausschalten.

Troubleshooting

Falls das nicht klappt, liegt das höchstwahrscheinlich daran, dass der Webserver nicht über ausreichende Rechte zum Aufruf von Shell-Kommandos verfügt. Dann müssen Sie mithilfe des Befehls sudo visudo nachhelfen und der Datei sudoers folgende Zeile hinzufügen:

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.

DIESEN ARTIKEL ALS PDF KAUFEN
EXPRESS-KAUF ALS PDFUmfang: 4 HeftseitenPreis €0,99
(inkl. 19% MwSt.)
€0,99 – Kaufen
RASPBERRY PI GEEK KAUFEN
EINZELNE AUSGABE Print-Ausgaben Digitale Ausgaben
ABONNEMENTS Print-Abos Digitales Abo
TABLET & SMARTPHONE APPS
Deutschland