WiringPi + PHP: GPIO Eingang abfragen und Ausgang schalten

  • Hallo zusammen,
    ich hoffe, ich habe die richtige Rubrik gewählt.
    Ich beschäftige mich jetzt seit ca. 1 Monat sehr intensiv mit dem Raspi und seinen Möglichkeiten. Ich habe dabei auch schon einige Fortschritte gemacht und gemerkt wie blöd ich mich am Anfang angestellt habe. Mittlerweile habe ich -mit mehr oder weniger Hilfe- schon einige Dinge erfolgreich umgesetzt.
    Trotzdem bin ich nnatürlich Anfänger und stelle mich manchmal immer noch blöd an. So auch jetzt:
    Ich habe es trotz stundenlanger Recherche und Google und in etlichen Foren nicht geschafft folgendes Problem zu lösen:

    Ich habe eine PHP-Datei (hänge ich an), die diverse Relais schaltet, um damit Beleuchtung in meinem Haus zu steuern. Dazu habe ich auch WiringPi installiert.
    Das funktioniert auch super.
    Nun möchte ich nur eine kleine Änderung hinzufügen, bekomme das aber nicht ans laufen.

    Bis jetzt werden die Relais durch Software-Buttons (HTML) aktiviert. Ich möchte nun, dass zusätzlich ein Hardwareeingang (GPIO26) genutzt wird und bei EIN auf dem GPIO26 ein Relais für 0,2s eingeschaltet wird.
    Ich schaffe es nicht, den Befehl richtig zu definieren, mit dem der Eingang von GPIO 26 abgefragt wird und dann der Ausgang (GPIO22) geschaltet wird.
    Ich probiere jetzt seit Stunden und habe natürlich auch recherchiert, aber leider hat mir das nicht weitergeholfen.

    Ich hänge Euch mal die Datei an.
    Unter "//Wohnzimmer einschalten bei Eingang GPIO 26 EIN" findet ihr meinen nicht funktionierenden Versuch.
    Ich bin für einen Tipp echt dankbar.

  • WiringPi + PHP: GPIO Eingang abfragen und Ausgang schalten? Schau mal ob du hier fündig wirst!

  • Es fängt soo schön an in deiner index.php aber dann lese ich $val = trim(@shell_exec()) und krieg direkt nen Brechreitz...

    FAQ => Nützliche Links / Linksammlung => PHP: Anleitung zum schalten von GPIO
    FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)
    FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX

    Letzteres ist die beste Möglichkeit mit GPIO's auf Web-Ebene umzugehen


  • Es fängt soo schön an in deiner index.php aber dann lese ich $val = trim(@shell_exec()) und krieg direkt nen Brechreitz...

    FAQ => Nützliche Links / Linksammlung => PHP: Anleitung zum schalten von GPIO
    FAQ => Nützliche Links / Linksammlung => Befehle über PHP mit root Rechten ausführen (sudo webscript)
    FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX

    Letzteres ist die beste Möglichkeit mit GPIO's auf Web-Ebene umzugehen

    Hallo Meigrafd,
    JA, das habe ich von Dir schon mal gelesen, dass Du dabei einen Brechreiz bekommst. Das war natürlich nicht meine Absicht.
    Aber als Anfänger behilft man sich mit dem was man findet, man halbwegs versteht und was funktioniert. Man hinterfragt es nicht, weil man froh ist, dass es klappt. Daher möchte ich den Ansatz -zumindest so lange, wie ich mich noch als Anfänger bezeichne und es nicht besser kann- auch beibehalten.
    Vielen Dank auch für Deine Links. Die sind bestimmt toll, aber ich sehe den Wald vor lauter Bäumen nicht!
    Ich konnte mit Deiner Anleitung für den Kiosk-Mode am Anfang auch nichts anfangen (was bestimmt an mir und nicht an Dir liegt) und hab es so nicht hinbekommen. Ich habe es dann mit grafischer Oberfläche umgesetzt, was zwar kein echter Kiosk-Mode ist, aber funktioniert hat. So konnte ich das dann nutzen. Erst nach ein paar Wochen experimentieren hatte ich genug Know-how um deine Anleitung umsetzen zu können, was ich dann auch gemacht habe. Heute läuft es so, wie es sein soll. Vielen Dank dafür!
    Nun ist es ähnlich. Ich will etwas realisieren, bin bei 95% angekommen und möchte nicht von vorne anfangen.
    Ich brauche doch nur eine einfache Befehlszeile, wie ich einen Ausgang in Abhängigkeit eines Eingangs in einer PHP-Datei schalten kann. Oder ist das von mir zu einfach gedacht?

  • Du musst den Status des gewünschten GPIO's abfragen und dann eine entsprechende Behandlung ausführen.

    Dabei musst du die Syntax von PHP verwenden, nicht von Python.... Du hast in Zeile 91 nämlich Python Code stehen, das wird so aber nix, das sind zwei völlig unterschiedliche Interpreter.

    Für Dinge die sich ständig wiederholen definiert man am besten eine Funktion - das ist in jeder Programmiersprache so. Du hast zum Beispiel auch ganz oben im Script eine init_GPIO Funktion...
    Siehe erster Link in Beitrag#2 => Fortgeschrittener Code zur 1.Möglichkeit
    [code=php]
    function GetGPIOpinValue($PIN) {
    $Value='';
    if (file_exists("/sys/class/gpio/gpio".$PIN."")) {
    $Value = trim(file_get_contents("/sys/class/gpio/gpio".$PIN."/value"));
    }
    return $Value;
    }

    function einschalten($pin) {
    $handle = @fopen("/sys/class/gpio/gpio".$pin."/value", 'a');
    @fwrite($handle, "1");
    @fclose($handle);
    }

    function ausschalten($pin) {
    $handle = @fopen("/sys/class/gpio/gpio".$pin."/value", 'a');
    @fwrite($handle, "0");
    @fclose($handle);
    }
    [/php]

    In Zeile 91 machst du dann folgendes:
    [code=php]
    if (GetGPIOpinValue(26) === 1) {
    einschalten(22);
    usleep(200000);
    ausschalten(22);
    }
    [/php]


    Ein Problem dabei wird allerdings: Code wird immer von oben nach unten abgearbeitet. Wird deine PHP Datei geladen wird jede Zeile nur ein mal verarbeitet und somit der GPIO auch nur ein mal auf HIGH geprüft... Erst beim nächsten mal laden erneut verarbeitet...

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!