Raspberry Pi: GPIO per PHP ansteuern

Hier erkläre ich eine Möglichkeit die GPIO Ein- und Ausgänge über das Internet mit Hilfe von PHP aus dem Web zu steuern.

Als erstes ist die Installation von PHP5 und dem Apache Server notwendig.

Dies erfolgt per:

apt-get install php5 apache2

Nun läuft auf dem RPi ein Webserver, der unter der Adresse des RPis zu erreichen ist.
Soll dieser nun nicht nur im heimschen Netzwerk, sondern auch per Internet zu erreichen sein, dann muss eine entsprechende Weiterleitung im Router eingerichtet werden.

Der Inhalt des Webservers liegt in: var/www/

Hier erstellen wir nun eine php Seite.
Ich nutze hier shell-Befehle, die auf der PHP-Seite ausgeführt werden.
Ich denke, dass das nicht die sicherste Lösung ist, wenn der Rechner von Internet zu erreichen ist, bzw auch von fremden Leuten gesteuert werden soll. Ich nutze es aber nur im W-LAN und habe daher kaum Bedenken.

Nun zum Code.

Als erstes erstellen wir ein .php Dokument.
In meinem Beispiel gehe ich davon aus, dass an GPIO 23 eine LED angeschlossen ist.
Wichtig zu sagen ist, dass ich die Befehle des Programmes „wiringpi“ benutze. Die Installation von wiringpi ist also vorher notwendig. Wie wiringpi funktioniert habe ich auch hier im Blog erklärt.

<?php 

if(isset($_GET['Befehl'])) {

//EINSCHALTEN
//LED1
if($_GET['Befehl'] === 'led1ein') {

$val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 1")); //Befehl an die Shell senden um GPIO 23 einzuschalten
}

Darunter kommt der Befehl um die LED wieder auszuschalten:

//AUSSCHALTEN
//LED1
elseif($_GET['Befehl'] === 'led1aus') {
$val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 0"));
}}
?>

Dies ist der php Teil der Webseite.

Direkt darunter erstellen wir nun Links um die Befehle aufzurufen:

<a href="<?php print($_SERVER['PHP_SELF']); ?>?Befehl=led1ein">Led1 einschalten</a>
<a href="<?php print($_SERVER['PHP_SELF']); ?>?Befehl=led1aus">Led1 ausschalten</a>

Diese Datei speichern wir ab als GPIO.php in dem Order /var/www/
Wird diese nun im Browser aufgerufen, lässt sich die LED per Mausklick Ein- und Ausschalten.

Im Prinzip ist damit der erste Schritt getan.
Jeder Befehl den wirinGpi unterstützt kann so einfach per PHP ausgeführt werden. Mit dem „read“ statt „write“ Befehl, kann auch der Status eines GPIO Pins abgefragt und ausgegeben werden, wenn man die Variable wieder ausgibt.

28 Gedanken zu „Raspberry Pi: GPIO per PHP ansteuern

  1. Du solltest evtl. noch an das Ende deines PHP-Teils die }} setzen um die "Befehle" zu schließen.
    Wenn man in der php.ini nicht die Fehleranzeige eingeschaltet hat, so landet man bei der aufgerufenen Seite immer im Nirvana.

  2. Als Neuling habe ich ein Problem. Der Apache Webserver läuft, ich kann die indes.html auch sehen, aber dein php Quelltext macht mir Probleme.
    Muss man den Quelltext für "LED einschalten", "LED ausschalten" und die links für die Befehle in einer GPIO.php kopieren? Bei mir kann ich zwar über über die interne-IP die GPIO.php aufrufen, aber ich sehe dann den Quelltext von "LED einschalten" und "LED auschalten". Sollten da nicht links oder ähnliches zum ein und ausschalten sein? Wer kann helfen?

    • Hey,
      ich habe mir den Code nochmal angesehen und feststellen müssen, dass sich hier einige " ; " zuviel eingeschlichen haben. Ich vermute, dass es am Editor des Blogs liegt.
      Ich habe den Code oben nochmal korrigiert.
      Probier es damit einfach nochmal.
      Würde mich über eine Rückmeldung freuen, ob es geklappt hat oder nicht.
      Gruß
      Christoph

  3. Pingback: Anleitung zur Steuerung der GPIO Pins per Internet online

  4. Pingback: GPIO mit PHP-Script ansteuern | -Raspberry Pi-

    • Hey Fillip,

      klar, geht das 😉

      Du kannst doch per PHP jedes beliebige Python Script starten.

      Dann führt du per PHP z.B: shell_exec("sudo python test.py") aus und in der test.py
      machst du dann etwas in der Art:

      GPIO.OUTPUT(pin, TRUE)
      sleep(1)
      GPIO.OUTPUT(pin, False)

      Gruß
      Christoph

      • Danke Christoph für die Schnelle antwort 😉 Bin leider noch relativ neu auf dem Gebiet mit PHP und So. HTML schon länger, das andere kommt so nach und nach daher die frage 😉 Werde es testen 🙂

      • Ah, da fällt mir doch noch ne frage ein 😀 Du hast ja geschrieben dass man sich auch den Status der GPIOs anzeigen lassen kann. Bezieht sich das dann auf den Status, welchen ich per Befehl geändert habe?

        Ich habe nämlich vor (Beispiel) einen Schalter/Taster an den GPIO zu schließen und wenn dieser gedrückt (geschlossen) ist dann möchte ich das auf der Web Oberfläche angezeigt bekommen 😀

        Vielleicht kann man sich ja mal per Mail "unterhalten" damit es nicht so chaotisch wird hier 😉

      • Ah, da fällt mir doch noch ne frage ein 😀 Du hast ja geschrieben dass man sich auch den Status der GPIOs anzeigen lassen kann. Bezieht sich das dann auf den Status, welchen ich per Befehl geändert habe?

        Ich habe nämlich vor (Beispiel) einen Schalter/Taster an den GPIO zu schließen und wenn dieser gedrückt (geschlossen) ist dann möchte ich das auf der Web Oberfläche angezeigt bekommen 😀

        P.S.

        Vielleicht kann man sich ja mal per Mail "unterhalten" damit es nicht so chaotisch wird hier 😉

  5. Kann mir mal einer helfen.
    Ich habe alles so eingerichtet nur mit GPIO22, aber wenn ich auf der Internetseite auf LED EIN klicke schaltet sich die LED nicht ein. Fehlen da irgendwelche Adminrechte?
    Wenn ja wie kann ich das beheben?
    Wenn ich mich als su einloggen will und das Passwort eingebe steht immer su: Authentication failure

  6. Vielen Dank!
    Ich bin neu in diesem Bereich und habe leider noch nicht viel Ahnung in Sachen Programmieren usw…
    Wie kann ich am besten von einem PC auf den Webserver zugreifen? sprich um es am ende steuern zu können.
    Danke

Kommentar verfassen