Web GPIO Class

  • Horroreyes hat mich vor kurzem gefragt, ob ich eine brauchbare PHP Class für den Umgang mit GPIO kenne ...


    Bisher habe ich mir immer die paar Sachen die ich brauchte selber geschrieben - allerdings auf Basis von /sys/class/gpio/ was aber nur eine sehr oberflächliche Funktionalität bietet. PWM sowie natürlich auch I2C und SPI sind weitaus aufwendiger und nicht wirklich über /sys/class/gpio/ realisierbar.


    Nach einigen Recherchen bin ich auf verschiedene Möglichkeiten gestoßen, die ich hier mal zusammenfassen möchte - um später daraus resultierend vielleicht etwas brauchbares zusammen zu schustern :daumendreh2:


    /sys/class/gpio/-Funktionalitäten wird nachfolgend nur noch "Standard-GPIO" genannt.


    • https://github.com/WiringPi/WiringPi-PHP


      Dies ist eine PHP-Extension, also ein Module welches zusätzlich vom Webserver geladen wird. Das Projekt ist aber eine Sackgasse, weshalb es auch 2 Jahre keine Updates gab. Es basiert auf wiringPi und benötigt deshalb auch weiterhin root Rechte um mehr als nur "Standard-GPIO" bieten zu können. Es gäbe zwar eine Modifikation um PHP als fcgi laufen zu lassen, wo man dann den Benutzer als welcher es ausgeführt wird selber festlegen könnte, allerdings stellt dies ein massives Sicherheitsrisiko dar.


    https://github.com/rakeshpai/pi-gpio


    Dies ist ein auf node.js basierende lib, also JavaScript. Leider scheint dieses Projekt auch eingestellt worden zu sein, bietet aber ebenfalls nur "Standard-GPIO".


    https://github.com/Tobbe/pi-fast-gpio


    Ebenfalls ein JavaScript welches allerdings nur ein Client für den pigpio Daemon (nicht pi-gpio) ist. Leider scheint hier nur PWM- und Servo- Unterstützung vorhanden zu sein, "Standard-GPIO" fehlt.


    Mehr habe ich nicht finden können, also dachte ich mir es sei an der Zeit endlich mal was zu entwickeln :D


    Aktuell glaube ich das die beste Möglichkeit mithilfe von pigpio umsetzbar wäre - pigpio bietet hierfür nämlich gleich 2 nützliche Features:
    1) Sockets
    2) FIFO pipe /dev/pigpio


    Auf der pigpio Seite gibt es auch unter Examples 2 Scripts die als Vorlage dienen können, wo von eines eigentlich sogar in die obere Liste mit aufgenommen werden müsste:

    • pigpio CGI (siehe Anhang)
      Ein Python Script welches als CGI Script beim Webserver eingebunden und direkt angesprochen wird, und verwendet dann direkt das pigpio Python Module.
    • Easy as Pi Server (siehe Anhang)
      Ein Python Script welches dank socketserver direkt angesurft werden kann und entsprechende URI's verarbeitet. Irgendwas bezüglich GPIO fehlt hier allerdings.


    Die Idee vom 2. hatte ich Anfangs auch, allerdings wäre das denk ich suboptimal und für Anfänger eher ungeeignet - man möchte sowas ja wenn dann direkt in seine Webseite und somit PHP einbauen...


    Also bliebe eigentlich nur noch die 1.Variante als CGI Script oder JavaScript :denker:


    Und an dieser Stelle sei jetzt auch noch WebIOPI erwähnt:
    Dieses sehr umfangreiche Projekt ist so ähnlich aufgebaut wie ich es sozusagen in Betracht gezogen hatte - nur nicht so monströs.
    WebIOPI basiert ebenfalls auf einer Mischung aus JavaScript und einem im Hintergrund laufendem Python-Script welches Verbindungen via Socket vom Rest annimmt und verarbeitet. Es beinhaltet aber auch C Programme die nativ auf die Hardware zugreifen und somit unabhängig von wiringPi & Co und somit auch mehr als "Standard-GPIO" bieten kann.
    Das ist mir aber zu umfangreich und zu viel des Guten - klassisches Oversized für dies hier ;)



    Was denkt ihr?
    Oder kennt ihr ggf sogar noch andere Projekte die hierbei hilfreich sein könnten?