GPIO über PHP setzen/auslesen

  • Hab ich ausgeführt. Er sagt immernoch permission denied =(


    anders gefragt: Was muss ich tun um auf einem frisch installierten raspbian system mit apache2 und php5


    diese zeilen code erfolgreich abfragen zu können (so wie in jedem stinknormalen tutorial):



  • Ich versteh deine Frage nicht - aber auch nicht wieso das bei Dir nicht klappt...


    Nachdem du den www-data der Gruppe gpio hinzugefügt hast musst du den apache2 neu starten. Zur Kontrolle ob das geklappt hat machst du:

    Code
    id www-data

    (und postest das mal bitte)


    Und auch die Ausgabe hiervon:

    Code
    ls -la /sys/class/gpio/


    Und auch die Ausgabe hiervon:

    Code
    sudo -u www-data php -r 'exec("echo 17 > /sys/class/gpio/export"); if (file_exists("/sys/devices/virtual/gpio/gpio17")) { echo "yea "; }'




    PS: auch den usermod Befehl musst du mit root Rechten ausführen - also mit sudo davor
    (ich melde mich generell direkt als root an und brauch deshalb kein sudo)

  • Abend zusammen, habe jetz alles nochmal komplett formatiert, hatte soviel rumgepfuscht weiß garnicht mehr was wie eingestellt war...


    Habe jetz direkt WiringPi installiert und so abgefragt:



    PHP
    <?php
       $value = trim(@shell_exec("/usr/local/bin/gpio -g read 23"));
      echo $value;
    ?>


    Funktioniert einwandfrei :)Dennoch Danke für eure Hilfe und Geduld:bravo2:

  • Suche den Fehler im Bild...


    " cat: /sys/class/gpio/gpio17/value " " cat /sys/class/gpio/gpio17/value "


    "/sys/class/gpio/gpio17/value" ist eine Datei die nur den Status für den GPIO Pin speichert.


    Das sollte jeder Anfänger doch erkennen können.


    Mit dem Befehl "echo "" >" /pfad/datei" schreibt man den in zwischen den "" stehenden Wert in die angegebene Datei.
    Mit dem Befehl "cat /pfad/datei" liest man die Datei aus.
    Das Problem ist das Sonderzeichen zwischen "cat" und dem Pfad ("/pfad/datei"). ":" signalisiert dem Interpreten dass dieser Befehl genau da endet, und als nächstes ein neuer Befehl kommt. Nur kommt da kein Befehl, sondern es wird nur der Pfad angegeben. Permission denied könnte noch vom "cat" Befehl kommen.
    Leider bin ich selber ein Newberry. Deswegen würde ich nicht drauf schwören.
    WiringPi wäre überhaupt nicht nötig gewesen. Genau so wenig wie das ändern der verschiedenen User Rechte.
    Über Python oder einem Bash Script kann man genau die gleichen Sachen machen wie mit WiringPi. ;)

  • JenselBensel: Da missverstehst du leider was gewaltig. Die Fehlermeldung cat: /sys/class/gpio/gpio17/value: Permission denied ist keine falsche Eingabe sondern, wie gesagt, eine Fehlermeldung also Ausgabe der Konsole.
    Das kannst du ganz einfach nachvollziehen indem du den cat Befehl auf eine nicht-existierende Datei anwendest, dann kriegst du auch eine Fehlermeldung die mit cat: anfängt. Oder du wendest den cat Befehl auf eine Datei an auf die du aber keine Leserechte hast, dann käme auch diese "Permission denied" Fehlermeldung...


    Und wenn du die Dateirechte in /sys/class/gpio/ kontrollierst, siehst du das nur root oder die Gruppe gpio lese-/schreib-Rechte haben. Der Webserver läuft über den Benutzer www-data der aber standardmäßig nicht in der Gruppe gpio ist, und selbstverständlich auch nicht root ist. Bedeutet also das dieser Benutzer kein Recht auf die /sys/class/gpio Dateien hat...


    Insofern ist das schon korrekt was hier bisher gesagt wurde - nur dein Post ist leider falsch ... Aber da du ja selber ein Newbee bist, wirst du vermutlich bei deinem letzten Satz auch außer Acht lassen das du vermutlich sudo verwendet hast, aber dann das Script als root läuft und der wiederum natürlich uneingeschränkten Zugriff hat...


    Aber stimmt schon, wiringPI brauch man eigentlich nicht, es geht selbstverständlich auch nativ. Ändert aber nichts an der Tatsache das der www-data Benutzer die nötigen Zugriffsrechte braucht.