Raspberry Pi, LED über eine Webseite ein und ausschalten

Der Raspberry Pi ist ein Computer in Scheckkartengröße auf dem ein Derivat von Linux läuft. Wenn man das Linux auf die SD-Karte gespielt hat, oder so wie ich ein Starterkit mit fertiger SD-Karte bei Ebay gekauft hat, muss man zunächst noch einige Programme installieren.

raspberry-led-ein-aus

Empfehlenswert ist auch SSH einzuschalten. Dadurch kann man per Putty auf dem Raspberry Pi arbeiten und muss weder Monitor noch Tastatur anschließen. In das Konfigurationsmenü kommt man mit dem Befehl

sudo raspi-config

Es empfiehlt sich das Gesamtpaket aus Apache2, PHP, mySQL und dem FTP-Server zu installieren. Dazu gibt es hier eine Anleitung. PHP braucht man um Befehle per exec ausführen zu können, durch den FTP-Server kann man später per FileZilla die Webseiten auf den Raspberry Pi schieben und eine Datenbank kann auch nicht schaden.

Nachdem der Server läuft installieren wir noch zusätzlich das Programm WiringPi welches das Ansteuern der PINs regelt. Eine Anleitung ist hier zu finden. Sie ist Englisch aber man braucht eigentlich nur die Befehle abtippen und ausführen.
Ist man bei

gpio -v
gpio readall

angekommen sollte es so wie auf diesem Bild aussehen.

gpio-readall3

Die Pins sind per default als Eingänge definiert. Nun tippen wir in die Konsole:

gpio mode 0 out

Damit wird aus Pin 0 ein Ausgang. Nicht Vergessen: Diese Einstellung geht nach einem Neustart verloren.
Nun schalten wir den Pin ein:

gpio write 0 1

und testen nochmal mit „gpio readall“ ob sich etwas verändert hat.

gpio-readall-0-high

Wie man sieht ist Pin 0 nun ein Ausgang und auf High. Mit

gpio write 0 0

können wir den Pin wieder ausschalten.

Nun wird es Zeit die LED anzuschließen. Wer hier eine PIN-Belegung ähnlich dem Arduino erwartet sollte sich erstmal einen Beruhigungstee kochen und sich auf üble Linuxfrickelei einstellen.

Der Pin 0 (Null) auf der Konsole wird später in PHP als Pin 17 angesprochen. Soweit kann man das aus der mit „gpio readall“ erzeugten Liste auch ablesen (wiringPi und GPIO). Wo stecken wir nun die LED an? Natürlich weder bei 0, noch bei 17, sondern bei Pin 11. Das sagt uns die folgende Liste (GPIO 17 steht neben Pin 11)

raspberry-pins
Wir klemmen die LED, natürlich mit Vorwiderstand, an Pin 11 auf dem Raspberry Pi und GND auf den Pin 6.
Wenn sich die LED nun mit dem Konsolenbefehl „gpio write 0 1“ ein und mit „gpio write 0 0“ wieder ausschalten lässt ist alles soweit richtig installiert und angeschlossen. Nicht vergessen: Wenn der Raspberry Pi ausgeschaltet war muss der Pin wieder mit „gpio mode 0 out“ als Ausgang definiert werden.

Nun können wir das PHP-Script angehen. Wie bereits oben erwähnt hat der Pin hier die Nummer 17. Beim Aufruf der Seite wird er mit „gpio -g mode 17 out“ als Ausgang definiert. Wer seine Schaltung dauerhaft für einen bestimmten Zweck nutzen möchte sollte diese Definitionen später in ein Script auslagern das beim Start von Linux ausgeführt wird. Hier geht es aber erstmal auch so.

Durch einen Klick auf einen Link ruft sich das Script selber auf und testet den Inhalt der GET-Variablen „led“.  Die Schrift wird per CSS extra Groß gemacht damit es auf einem Smartphone gut anklickbar ist.

<?php 
//Pin als Ausgang definieren
$val = trim(@shell_exec("/usr/local/bin/gpio -g mode 17 out"));

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

   //LED ein
   if($_GET['led'] == 'ein') {
      $val = trim(@shell_exec("/usr/local/bin/gpio -g write 17 1"));
   }

   //LED aus
   elseif($_GET['led'] == 'aus') {
      $val = trim(@shell_exec("/usr/local/bin/gpio -g write 17 0"));
   }
}
?>

<span style="font-size:7.0em">
  <br>
  <a href="<?php print($_SERVER['PHP_SELF']); ?>?led=ein">Led ein</a>
  <br>
  <a href="<?php print($_SERVER['PHP_SELF']); ?>?led=aus">Led aus</a>
</span>

Nun kann man die LED auch per Wlan über sein gläsernes Handy schalten ohne eine App schreiben zu müssen.

Iphone-led-ein-aus

Bauteile (Bezugsquellen):

eBay: Breadboard
Breadboard Kabel
LED
Raspberry Pi
Raspberry Pi Starter Kit
Amazon: Breadboard
Breadboard Kabel
LED
Raspberry Pi
Raspberry Pi Starter Kit

Gut?

FacebooktwitterredditpinterestlinkedinmailFacebooktwitterredditpinterestlinkedinmail