In dieser kleinen Anleitung werde ich Euch heute zeigen, wie einfach es ist einen Ausgang des Raspberry Pis zu schalten, um damit z.B. ein Relais zu steuern. Das ganze realisieren wir über einen kleinen Webserver am Raspi auf dem die Steuerung von PHP ausgelöst wird. D.h. wir erstellen eine kleine Webseite mit zwei Button über die wir das Relais anschalten und ausschalten können. Was ihr dann hinter das Relais hängt bleibt Euch überlassen. Auf diese Art und Weise wäre es dann möglich bis zu 17 Relais zu steuern. Als Punkt zwei und drei zeige ich Euch dann wie man dieses kleine PHP Script noch erweitern kann um damit z.B. eine Art von Timer zu integrieren, welcher die Relais nur für eine bestimmte Zeit anziehen lässt. Das ganze können wir dann auch fest vorbelegen und so wäre es z.B. auch möglich nur Schaltimpulse zu geben. D.h. ihr könntet den Raspi in Eure Stromverteilung einbauen um darüber ein Stromstoß-Relais zu steuern wie sie oft in Treppenhäusern oder ähnlichen Örtlichkeiten verbaut sind. Letztendlich könnt ihr mit diesen „5“ Zeilen Code alles ansteuern, was sich auch über einen Schalter steuern lassen würde.
Die Umsetzung dafür ist ebenfalls recht einfach und ich möchte dafür primär auf zwei ältere Raspberry Pi Anleitungen zurück greifen.
Aber dazu gleich noch mehr!
Basis:
Ein installierter Raspberry Pi mit dem typischen Raspberry Pi Image!
Eine Relais-Platte oder zum testen nur eine kleine LED, welche die 3,3 Volt des Ausgangs ab kann.
Auf dieses System setzen wir dann einen Apache2 Server und die Programmiersprache PHP auf.
Wie dies funktioniert, könnt ihr auf folgender Seite nachlesen:
Apache2 und PHP Installation am Raspberry Pi
Ihr müsst dort natürlich nur die ersten beiden Schritte abarbeiten. Datenbanken und FTP Server werden für unser Beispiel nicht benötigt.
Als nächstes müssen wir nun die Eingänge und Ausgänge des Raspberrys konfigurieren. Hierzu bedienen wir uns folgender Anleitung:
Raspberry GPIO Modul konfigurieren – Eingänge und Ausgänge definieren
Das wars dann auch schon!
Jetzt sind wir startklar für den eigenlichen Code!
Halt bevor wir los legen, löschen wir noch schnell die Index Datei, welche uns der Apache Server automatisch angelegt hat!
cd /var/www sudo rm index.html
Jetzt sollte sich keine weitere Datei mehr im /var/www Pfad befinden und wir können uns unsere eigene index.php anlegen:
rm sudo index.php
INFO:
Index Dateien werden immer zuerst vom Apache Server abgearbeitet! D.h. befindet sich eine Index Datei in einem Verzeichnis wird diese automatisch aufgerufen und man muss diese nicht über die URL direkt aufrufen!
In diese index.php fügen wir nun den ersten und einfachsten Code ein:
<html> <head> <meta name="viewport" content="width=device-width" /> <title>Schalter</title> </head> GPIO 18 schalten: <form method="get" action="index.php"> <input type= <input type="submit" value="Licht ein" name="Lichtein"> <input type="submit" value="Licht aus" name="Lichtaus"> </form> <?php $modeon18 = trim(@shell_exec("/usr/local/bin/gpio -g mode 18 out")); if(isset($_GET["Lichtein"])){ $val = trim(@shell_exec("/usr/local/bin/gpio -g write 18 1")); echo "Licht an"; } else if(isset($_GET["Lichtaus"])){ $val = trim(@shell_exec("/usr/local/bin/gpio -g write 18 0")); echo "Licht aus"; } ?> </body> </html>
Ruft ihr nun die IP-Adresse der Webservers auf bekommt ihr zwei Buttons mit der Bezeichnung „Licht ein“ und „Licht aus“ angezeigt. Drückt ihr nun auf den „Licht ein“ Button, wird der Port 18 des Raspberry Pis mit 3,3 Volt gespeist und eine angeschlossene LED würde zu leuchten beginnen. Ein angeschlossenes Relais würde nun anziehen.
Über den „Form-Bereich“ erstellen wir die Buttons.
Die erste Zeile im PHP Code definiert den Ausgang. Hier in unserem Fall wird der GPIO PIN 18 zum Ausgang definiert.
Dann überprüft das Script ob ein Button gedrückt wurde und wenn ja, was passieren soll.
Das was dann passiert ist ziemlich einfach gelöst – denn wir übergeben einfach den Code direkt an die Shell und diese schaltet und den PIN entweder auf aktiv und inaktiv!
D.h. würdet ihr z.B. auf der Konsole selbst folgenden Befehl ausführen:
/usr/local/bin/gpio -g write 18 1
So würde das Relais ebenfalls anziehen.
Mit den echo Befehlen geben wir dann nur den Status aus, was gerade gedrückt worden ist.
Im nächsten Code Schnipsel definieren wir ein zusätzliches Feld, in dem wir eine Zeit in Sekunden hinterlegen können.
Wird dieses Feld gesetzt, so zieht das Relais nur für diesen Zeitraum an und deaktiviert sich danach selbstständig wieder!
<html> <head> <meta name="viewport" content="width=device-width" /> <title>Schalter</title> </head> GPIO 18 schalten: <form method="get" action="index.php"> <input type="text" size="4" value="" name="Sekunden"> <input type="submit" value="Licht ein" name="Lichtein"> <input type="submit" value="Licht aus" name="Lichtaus"> </form> <?php $modeon18 = trim(@shell_exec("/usr/local/bin/gpio -g mode 18 out")); if(isset($_GET["Lichtein"])){ $val = trim(@shell_exec("/usr/local/bin/gpio -g write 18 1")); $Sekunden = $_GET["Sekunden"]; if ($Sekunden > 0) { sleep($Sekunden); $val = trim(@shell_exec("/usr/local/bin/gpio -g write 18 0")); } } else if(isset($_GET["Lichtaus"])){ $val = trim(@shell_exec("/usr/local/bin/gpio -g write 18 0")); } ?> </body> </html>
Wie ihr seht ist dies genauso einfach!
Jetzt gehen wir noch einen Schritt weiter und ich zeige Euch in der nächsten Variante wie man einen zweiten Schalter einbindet!
<html> <head> <meta name="viewport" content="width=device-width" /> <title>Schalter</title> </head> Port 1 - GPIO 18 schalten: <form method="get" action="index.php"> <input type="text" size="4" value="1" name="t1"> <input type="submit" value="P1 an" name="p1an"> <input type="submit" value="P1 aus" name="p1aus"> <br> Port 2 - GPIO 23 schalten: <br> <input type="text" size="4" value"t2" name="t2"> <input type="submit" value="P2 an" name="p2an"> <input type="submit" value="P2 aus" name="p2aus"> </form> <?php $modeon18 = trim(@shell_exec("/usr/local/bin/gpio -g mode 18 out")); $modeon23 = trim(@shell_exec("/usr/local/bin/gpio -g mode 23 out")); if(isset($_GET["p1an"])){ $val = trim(@shell_exec("/usr/local/bin/gpio -g write 18 1")); $t1 = $_GET["t1"]; if ($t1 > 0) { sleep($t1); $val = trim(@shell_exec("/usr/local/bin/gpio -g write 18 0")); } } else if(isset($_GET["p1aus"])){ $val = trim(@shell_exec("/usr/local/bin/gpio -g write 18 0")); } if(isset($_GET["p2an"])){ $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 1")); $t2 = $_GET["t2"]; if ($t2 > 0) { sleep($t2); $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 0")); } } else if(isset($_GET["p2aus"])){ $val = trim(@shell_exec("/usr/local/bin/gpio -g write 23 0")); } ?> </body> </html>
In diesem Beispiel schalten wir nun den Ausgang 18 und den Ausgang 23.
Den Ausgang 18 haben wir nun mit der „value 1“ definiert. D.h. drückt ihr nun den Button P1 an, so wird das Relais für eine Sekunde angezogen und schaltet sich danach wieder ab. Überschreibt ihr diesen Wert mit 0 -> ist ein Dauer-An möglich. Über den Button „P1 aus“ wird dieser Zustand dann wieder zurück gesetzt.
Der zweite Schalter funktioniert ganz normal über „P2 an“ und „P2 aus“ – wird im Textfeld davor eine Zeit gesetzt, wird der Timer aktiviert und der AN-Modul fällt nach „X“ Sekunden zurück.
So, ich hoffe ich konnte Euch nun ein paar Anregungen geben, wie ihr Euer Projekt umsetzen könnt!
Viel Spaß damit!
Tags:
- raspberry pi: relais schalten webinterface
- raspberry relais steuern web interface
- gpio mit webinterface steuern
- raspberry pi gpio relais
- relais mit raspberry pi über wesite steuern