GPIO Ports Konfigurieren

  • Ich hab mir ein PHP Script geschrieben um die Richtung und den Wert der GPIO Pins ändern zu können...


    Dazu gesagt habe ich erst später (wurde hier in Post#2 erwähnt) erfahren das es sowas bereits gibt, fand es aber trotzdem interessant das selber zu programmieren :)



    Vorraussetzungen:


    Das eigentliche PHP Script:
    /var/www/GPIO.php



    Allerdings habe ich auch als root ein seltsames Problem :-/

    Code
    root@raspberrypi:/var/www# echo pwm >/sys/class/gpio/gpio17/direction
    -bash: echo: Schreibfehler: Das Argument ist ungültig.
    root@raspberrypi:/var/www#


    :helpnew:

  • Hey meigrafd,


    errno 2 wäre "no such file or directory" ....
    Hängt evtl. mit sudo zusammen ... da gibts nen workaround, weil Du im script ja sudo nicht verwenden kannst - es sei denn, Du änderst was in der sudoer ... aber das muss ich erst suchen. Hatten wir schon das eine oder andere mal ...


    cu,
    -ds-

  • Ne, aber ich mach ja auch nicht

    Code
    sudo -u www-data sudo echo "out" > /sys/class/gpio/gpio17/direction



    Wenn ich im PHP Script "sudo" davor setze funktionierts aber leider auch nicht :(

    Code
    exec("sudo echo $newPIN > /sys/class/gpio/export",$output,$error);


    /etc/sudoers

    Code
    www-data ALL=(ALL) NOPASSWD: ALL

  • Ne, aber ich mach ja auch nicht

    Code
    sudo -u www-data sudo echo "out" > /sys/class/gpio/gpio17/directio


    Damit meinte ich das ich das NICHT mache, und deshalb der Befehl normal als www-data Benutzer ausgeführt wird und da nunmal auch funktioniert - und ich deshalb nicht glaube das ich den Befehl unbedingt mit root-Rechten ausführen muss


    Also ja: der Unterschied ist gewollt ;) *hide*


    Code
    -u user     The -u (user) option causes sudo to run the specified command as a user other than root.


    Das macht aber alles kein Unterschied:

    Code
    root@raspberrypi:~# sudo -u www-data sudo echo "out" > /sys/class/gpio/gpio17/direction
    root@raspberrypi:~# cat /sys/class/gpio/gpio17/direction
    out
    root@raspberrypi:~# sudo -u www-data echo "in" > /sys/class/gpio/gpio17/direction     
    root@raspberrypi:~# cat /sys/class/gpio/gpio17/direction
    in
    root@raspberrypi:~# sudo -u www-data echo "out" > /sys/class/gpio/gpio17/direction
    root@raspberrypi:~# cat /sys/class/gpio/gpio17/direction
    out
    root@raspberrypi:~#


    Deshalb glaub ich eher das der Fehler irgendwo anders im PHP Script liegt :s =(

  • Habe den ersten Post aktuallisiert, allerdings habe ich auch als root ein seltsames Problem :-/

    Code
    root@raspberrypi:/var/www# cat /sys/class/gpio/gpio9/{direction,value}  
    in
    0
    root@raspberrypi:/var/www# echo 1 >/sys/class/gpio/gpio9/value  
    -bash: echo: Schreibfehler: Die Operation ist nicht erlaubt.



    Wieso dürfen bei GPIO Ports die in Richtung " in " sind der Wert nicht auf 1 gestellt werden?


    :helpnew:

  • Hallöchen,


    hmmm ich hab das mal ausprobiert:



    Code
    pi@raspberrypi ~ $ gpio export 0 in
    pi@raspberrypi ~ $ echo 1 /sys/class/gpio/gpio0/value
    1 /sys/class/gpio/gpio0/value
    pi@raspberrypi ~ $




    Code
    pi@raspberrypi ~ $ ls -l /sys/class/gpio/
    insgesamt 0
    --w------- 1 root root 4096 Aug 17 19:56 export
    lrwxrwxrwx 1 root root    0 Aug 17 19:55 gpio0 -> ../../devices/virtual/gpio/gpio0
    lrwxrwxrwx 1 root root    0 Aug 17 19:56 gpiochip0 -> ../../devices/virtual/gpio/gpiochip0
    --w------- 1 root root 4096 Aug 17 19:56 unexport




    Code
    pi@raspberrypi ~ $ ls -l /sys/class/gpio/gpio0/
    insgesamt 0
    -rw-r--r-- 1 root root 4096 Aug 17 19:56 active_low
    -rw-r--r-- 1 root root 4096 Aug 17 19:56 direction
    -rw-r--r-- 1 pi   pi   4096 Aug 17 19:55 edge
    drwxr-xr-x 2 root root    0 Aug 17 19:56 power
    lrwxrwxrwx 1 root root    0 Aug 17 19:55 subsystem -> ../../../../class/gpio
    -rw-r--r-- 1 root root 4096 Aug 17 19:55 uevent
    -rw-r--r-- 1 pi   pi   4096 Aug 17 19:55 value


    geht alles ohne root ....


    cu,
    -ds-

  • Hallo dreamshader,


    schau dir bitte nochmal den folgenden Befehl an.


    Code
    echo 1 /sys/class/gpio/gpio0/value


    Da fehlt wohl die Ausgabeumlenkung. Danach wirst du vermutlich auch eine Fehlermeldung bekommen.


    Gruß Georg

  • Hallo zusammen,


    jetzt mal im Ernst. Sobald ein GPIO-Pin als Eingang definiert ist, soll dieser doch das elektrische Signal, welches an dem GPIO-Pin anliegt, erkennen und als entsprechenden Wert über die "/sys/class/gpio/gpioX/value" bereitstellen. Das bedeutet doch, dass die Datei nur noch lesbar sein sollte. Aus welchem Grund sollte man jetzt den Wert in der Datei ändern können und vor allem was sollte dann passieren? Soll dann der GPIO-Pin auch das entsprechende elektrische Signal ausgeben? Denkt mal bitte darüber nach was ihr eigentlich machen wollt.


    Gruß Georg

  • Da fällt mir spontan eins ein: Simulieren :)


    Ein " in " Pin gibt sowieso nix aus oder? Wenn dann reagiert eine Software darauf was "rein" kommt


    Wenn man einen Pin als " in " konfiguriert und ein Script/Programm geschrieben hat was die Value ausliest, könnte man es so dann simulieren ohne "in echt" etwas auf den Pin geben zu müssen... Deshalb dachte ich dass das eigentlich auch gehen müsste :-/



    Aber Oke, wenn das nicht vorgesehen ist werd ich die "Value" Spalte grau hinterlegen bzw nicht auswählbar machen sobald es auf Direction " IN " eingestellt ist - Danke :)