Mit Bootstrap Button GPIOs Steuern

  • Hallo,
    Ich wollte per Webinterface meine GPIOs vom Raspberry pi steuern. Ich habe 2 Buttons erstellt, hier ist der Code von den Buttons:

    PHP
    <a class="btn btn-default" href="<?php $val = trim(@shell_exec("/usr/local/bin/gpio -g write 17 1")); ?>">Licht Ein</a> 
    <a class="btn btn-default" href="<?php $val = trim(@shell_exec("/usr/local/bin/gpio -g write 17 0")); ?>">Licht Aus</a>


    Wenn ich nur den einen Button auf der Seite habe funktioniert dieser, wenn ich aber beide auf der Seite habe dann schaltet es den GPIO immer aus.
    Woran liegt das ? Ich hoffe jemand kann mir dabei helfen.


    MFG Dennis.

  • > Woran liegt das ?
    Kurze Antwort: an der Reihenfolge der PHP-Anweisungen


    Lange Antwort: das PHP wird beim Laden der Seite vom Webserver ausgefuehrt, Zeile fuer Zeile.
    Auf der ersten Zeile wird der Ausgang eingeschaltet, auf der zweiten wieder aus.


    So geht es also nicht, weil es mit den Buttons eigentlich gar nichts zu tun hat...


    Die PHP-Zeilen sollten erst ausgefuehrt werden wenn der entsprechende Button
    geklickt wird. Das macht man zum Beispiel mit einem Formular das abfragt welcher
    Button geklickt wurde.

  • Hallo Dennis,


    du führst beide Befehle gleichzeitig aus und zwar direkt beim Aufruf der Webseite, PHP kann mit href nicht umgehen.
    Am besten machst du das ganze mit AJAX, hast du da Erfahrungen oder soll ich dir helfen ?


    Gruß

    Edited once, last by djkobi ().

  • Hallo djkobi


    An den AJAX Befehlen bin ich interessiert. Momentan läuft es bei mir noch HTML doch wer weiss bei Zeit und Gelegenheit und wissen könnte das in nächster Zeit Mal umgebaut werden....


    Gruss Dani


  • Hallo djkobi


    An den AJAX Befehlen bin ich interessiert. Momentan läuft es bei mir noch HTML doch wer weiss bei Zeit und Gelegenheit und wissen könnte das in nächster Zeit Mal umgebaut werden....


    Gruss Dani


    Okay ich habe es für Dennis sein Projekt angepasst, kannst es jedoch ganz einfach auf deinen Fall anpassen.



    und die eigene PHP Datei die du logic.php nennen solltest.



    So sollte es funktionieren und man hat auch noch ein Feedback ohne die Seite neu zu laden, man könnte auch statt dem alert den Text dynamisch in ein Div-Element einfügen, aber das ist dann nur Geschmacksache.


    Hoffe es hilft.


    Gruß
    Automatisch zusammengefügt:[hr]
    Die Formatierung ist nicht so nice.
    Hier besser: https://hastebin.com/kedupojoya.xml und https://hastebin.com/eqiveheyuz.xml

    Edited once, last by djkobi ().

  • PHP
    <a class="btn btn-default" href="<?php $val = trim(@shell_exec("/usr/local/bin/gpio -g write 17 1")); ?>">Licht Ein</a> 
    <a class="btn btn-default" href="<?php $val = trim(@shell_exec("/usr/local/bin/gpio -g write 17 0")); ?>">Licht Aus</a>


    Argh...
    Wenn ich das schon sehe .... Brechreiz!
    Wo habt ihr das nur immer her?


    FAQ => Nützliche Links / Linksammlung => PHP: Anleitung zum schalten von GPIO


    Aber wenn du wirklich volle GPIO Funktionalität haben willst dann setz lieber auf:
    FAQ => Nützliche Links / Linksammlung => [Python] Webserver, Websocket und ein bisschen AJAX

  • Hallo djkobi,
    ich werde es heute Abend mal probieren mit AJAX.


    MFG Dennis
    Automatisch zusammengefügt:[hr]
    Hallo,
    Vielen Dank für eure ganzen Antworten, ich habe es doch gerade mal schnell ausprobiert und es funktioniert mit dem Code der Djkobi geschrieben hatte. Ich werde mir auch AJAX mal genauer ansehen, es scheint sehr interessant zu sein.


    MFG Dennis


  • Vielen Dank für eure ganzen Antworten, ich habe es doch gerade mal schnell ausprobiert und es funktioniert mit dem Code der Djkobi geschrieben hatte. Ich werde mir auch AJAX mal genauer ansehen, es scheint sehr interessant zu sein.


    MFG Dennis


    Ajax ist echt super und bringts besonders für die Usability.
    Falls du die Basics lernen willst kann ich dir https://www.w3schools.com/jquery/default.asp empfehlen.
    Du kannst zwar plain in JS auch Ajax nutzen, ich glaube jQuery vereinfacht die arbeit mit Ajax und generell mit JS stark, wenn du ernsthaft im in der Web Programmierung anfangen willst schau dir aber JS auch an.
    Auf w3school findest du übrigens alle Basics für die Webprogrammierung.


    Gruß

  • Ja genau. Alternativ kannst du dir das Package natürlich auch herunterladen und lokal verlinken.


    +1 .


    Mach das auf jeden Fall lokal oder bau dir einen Fallback ein, dass die Steuerung auch ohne jQuery funktioniert. Ansonsten baust du dir eine Steuerungskomponente, die abhängig von der Verfügbarkeit eines fremden Packages und zusätzlich noch von einer Internetverbindung ist.


    Nur so am Rande ;)

    .NET-, Unity3D-, Web-Dev.
    Mikrocomputer-Hobbyist.