Steuern von Buttons mittels Taster an GPIO möglich?

  • Hallo,


    habe vor ein kleines Projekt zu realisieren und würde dazu gerne mittels Taster Buttons auf einer PHP-Seite steuern. Konnte seither leider nur Methoden finden, bei welchen man GPIO-Pins über PHP steuern kann. Ich würde jedoch leider genau die umgekehrte Richtung benötigen? Ist dies überhaupt möglich, falls ja, gibt es hierzu eventuell irgendwo ein Tutorial?


    freundliche Grüße,
    User


  • Hallo,


    ...und würde dazu gerne mittels Taster Buttons auf einer PHP-Seite steuern.
    ...Ist dies überhaupt möglich, falls ja, gibt es hierzu eventuell irgendwo ein Tutorial?


    Hmm...
    Ich verstehe dich kaum...


    PHP hat keine "Buttons".
    Die finden sich im HTML und damit auf dem Browser.
    PHP steckt im (Web)Server.


    Ich rate mal:
    Du möchtest am Pi einen Knopf drücken.
    Dieses als Nachricht an einen Webserver senden.


    Ja, das ist möglich.


    z.B. cURL kann POST Requests senden

  • Nun verstehe ich dich wiederum nicht combie :)


    PHP ist genau so wie HTML eine Sprache - die dann allerdings HTML ausgeben muss damit der "Browser" etwas "sehen kann".. Also klar die Buttons werden mit HTML (oder CSS) erzeugt bzw ausgegeben, die Verarbeitung was dann beim drücken des Buttons passiert wird aber über PHP abgearbeitet ;)


    Zugegebenermassen drückt sich user92 etwas ungünstig aus :(


    Einen Button auf einer Webseite definieren der dann bei betätigung eine bestimmte Aktion durchführen soll ist das eine...
    Aber Taster kann man nicht "fremdsteuern", es sei denn dieser Taster hat ein elektrisches Bauteil welches sich über zuführen von Strom betätigen und den Taster öffnen/schliesen lässt - aber das bezweifel ich mal :)
    Es sei denn du meinst sowas wie Relais?



    Am besten du (user92) beschreibst ausführlich(er) was genau du vor hast oder machen möchtest

  • Ok, dann klarer!
    Mit dem Pi einen Button im Browser zu bedienen ist unmöglich.
    Aus dem einfachen Grund, weil der Server keine Verbindung zum Browser aufnehmen kann.
    Das ist im HTTP nicht vorgesehen.


    Tricksen könnte man mit Ajax, long polling, WebSockets ,
    Flash, JavaApplet, ein ActivX Control im Browser versenken, oder was auch immer.....


    Aber was man gut und einfach machen kann, ist mit z.B. cURL einen Request absetzen und damit den gleichen Effekt erzielen, als hätte der Benutzer den Button im HTML Formular betätigt.


    Möchte man allerdings im Browser zeigen, dass am Pi ein Knopf gedrückt wurde, ist das ohne einen Zusätzlichen Requset nicht möglich.
    Der Browser muss diesen aktiv auslösen. Ajax wäre da ein einfacher weg.

  • ob man nun curl oder wget nutzt ist denk ich egal combie - fraglich ist:
    1) was der TE nun überhaupt machen möchte
    2) wie sein Code aussieht (denn es muss nicht _POST sein sondern könnte auch _GET sein..)


    Solange 1) nicht klarer vom ThemenErsteller beschrieben wurde, bringen alle weitere Spekulationen nicht wirklich viel :D

  • Hallo,


    tut mir Leid, dass ich mich im Startpost so undeutlich ausgedrückt habe und dadurch nun eine solche Diskussion ausgelöst habe, am einfachsten wäre es wohl gewesen, gleich etwas Code anzuhängen! Der Ausschnitt des betreffenden Codes würde wie folgt aussehen:


    Dabei ginge es mir nun darum, dass ich am Pi gerne zwei Taster hätte mit welchen ich jeweils einen der Beiden Buttons steuern könnte. (+ und -)


    Gibt es hierfür eine Lösung? Hoffe es ist nun so formuliert, dass Helfende nicht zu sehr verwirrt werden bzw. meine Frage verstehen.


    Danke im Voraus!
    freundliche Grüße,
    User

  • Oha ziemlich unleserlich gecoded :D


    Was bewirken die HTML-Buttons denn?



    Wenn du die "method" nicht auf GET ändern möchtest bliebe dir nur der Weg den combie von wegen cURL andeutete


    Nun wäre aber erneut die Frage worüber du die Taster abfragst - python? bash? php?
    Es muss halt ein GPIO pin Konfiguriert werden und dieser abgefragt werden - bei betätigen des Tasters muss eine Aktion ausgeführt werden: cURL aufrufen und den POST an das PHP-Script absetzen


    Einige Beispiele für cURL kannst du hier nachlesen:
    für bash: http://www.yilmazhuseyin.com/b…-tutorial-examples-usage/
    für php: http://blog.zoom7.de/php-eine-post-anfrage-per-curl-senden/
    für python: http://www.angryobjects.com/20…python-pycurl-by-example/

  • Wofür verwendest du überhaupt php? PHP ist für Webseiten, ich glaube eigentlich willst du etwas ganz anderes machen...

  • Hallo,


    verwende PHP um möglichst einfach eine "GUI" auf einem Monitor darzustellen, welche ich mit Buttons bedienen kann. Was gäbe es hierzu für alternativen?



    Wenn du die "method" nicht auf GET ändern möchtest bliebe dir nur der Weg den combie von wegen cURL andeutete


    Es wäre kein Problem die method auf "GET" zu ändern, was ich nun auch schon erledigt habe. So könnte ich quasi die Buttons über die URL steuern, was das ganze eventuell erleichtert?



    Oha ziemlich unleserlich gecoded Icon_biggrin2


    Was bewirken die HTML-Buttons denn?


    Was kann man an dem Code leicht noch optimieren?
    Die Buttons bewirken, dass sich eine Variable ändert, +1/-1, je nachdem ob man eben + oder - drückt.



    Nun wäre aber erneut die Frage worüber du die Taster abfragst - python? bash? php?


    Habe diesbezüglich nicht viel Ahnung. Wenn dies jedoch ebenso über PHP funktionieren würde, wäre es vermutlich das beste, dies auch gleich so zu realisieren um am ende alles in einem zu haben?


    Tut mir Leid, dass ich mich scheinbar so unverständlich ausdrücke!
    freundliche Grüße,
    User

  • Quote

    So könnte ich quasi die Buttons über die URL steuern, was das ganze eventuell erleichtert?


    Nein, du kannst die Button nicht über eine URL steuern.
    Denn die Buttons sind immer noch im Browserfenster.


    Und Ja!
    Es erleichtert es!
    Denn du kannst dann per URL den Server, und damit auch dem PHP, ein abgesendetes Formular vorgaukeln. So tun als ob. De Browser merkt nix davon, aber das PHP tut seinen Job.



    Darum brauchst du auf dem Pi ein Dauerläuferprogramm. Service, Dienst oder Daemon.
    Egal in welcher Sprache. Python und C bieten sich an, weil damit die Interrupt gesteuerte GPIO Behandlung (relativ) einfach möglich ist und sie beherrschen Threads. Aus beiden Sprachen kann man GET Requests an den Webserver senden. PHP ist hier nicht so toll geeignet, weil es eben keinen einfachen Flansch an die Interruptsteuerung bietet. GET Requests lassen sich in PHP problemlos über file_get_contents() absetzen. Es ist eben die fehlende Hardwarenähe, die es schwierig macht, dort PHP einzusetzen.



    Quote

    Tut mir Leid, dass ich mich scheinbar so unverständlich ausdrücke!


    Ja, irgendwie ist es schwer zu verstehen....
    Z.B. weiß ich immer noch nicht was die Knöpfe bewirken sollen....
    Oder genauer: Warum muss das über den Webserver gehen?
    Oder, warum soll das über den Browser gehen, (obwohl das doch quasi unmöglich ist)?

  • Es wäre kein Problem die method auf "GET" zu ändern, was ich nun auch schon erledigt habe. So könnte ich quasi die Buttons über die URL steuern, was das ganze eventuell erleichtert?


    Jein nicht "die Buttons steuern" sondern das was die Buttons bewirken/auslösen :)
    $_GET bedeutet halt das es über die URL angesprochen wird also zum Beispiel: http://localhost/test.php?plus=1
    Würde also bedeuten das es $_GET["plus"] gibt was " 1 " enthällt


    Du müsstest also in deinem PHP Script eine Abfrage einbauen:

    PHP
    if (isset($_GET['plus'])) { $stk++; }
    if (isset($_GET['minus'])) { $stk--; }[/php]
    Dann führst du über die Konsole einfach [code]wget -q -O- http://localhost/test.php?plus=1


    oder

    Code
    wget -q -O- http://localhost/test.php?minus=0


    aus und änderst somit $stk , was auch immer das is ;)



    Was kann man an dem Code leicht noch optimieren?


    Naja einfach leserlicher schreiben ;)
    Vergleich mal deinen Code aus Beitrag#7 mit meinem: http://www.forum-raspberrypi.d…-infos?pid=28467#pid28467



    Habe diesbezüglich nicht viel Ahnung. Wenn dies jedoch ebenso über PHP funktionieren würde, wäre es vermutlich das beste, dies auch gleich so zu realisieren um am ende alles in einem zu haben?


    Naja wie hast du das denn derzeit? Hast du bereits Taster angeschlossen?


  • Das funktioniert nun leider auch nicht so, wie ich es mir vorstelle. Zumindest sollte es so sein, dass sich der Wert auch im geöffneten Browser ändert... Habe nun schon sehr viel gelesen, aber es scheint fast so, als wäre dies unmöglich! Oder habe ich bezüglich deines Vorschlages noch etwas falsch gemacht und es sollte mit sehr wohl im Browser dargestellt werden?



    Naja einfach leserlicher schreiben ;)
    Vergleich mal deinen Code aus Beitrag#7 mit meinem: http://www.forum-raspberrypi.d…-infos?pid=28467#pid28467


    Alles klar, tut mir Leid. Der Code war zuvor doch etwas besser formatiert, als nach dem einfügen hier als "Code".



    Naja wie hast du das denn derzeit? Hast du bereits Taster angeschlossen?


    Habe derzeit Taster angeschlossen, welche über ein einfaches Shell Script "eingelesen" werden.


    Naja nun sieht es doch fast so aus, als würde das ganze scheitern, da die Realisierung, wie ich sie mir vorstelle, mit PHP scheinbar unmöglich ist? Im Prinzip wollte ich seither PHP verwenden, da ich damit schon mehrere Sachen realisieren konnte und mir andere Sprachen eher unbekannt sind. Welche Alternativen gäbe es am PI um über Raspbian ein kleines Programm mit netter GUI und Verbindung zu einer SQL-DB sowie Eingabe über Taster laufen zu lassen?


    Auch wenn das Projekt scheinbar kein allzu gutes Ende nimmt freut es mich, dass einem in diesem Forum geholfen wird!
    User

    Edited once, last by user92 ().

  • Nichts ist unmöglich :D


    Eine Änderung der $stk Werte siehst du erst wenn du die Seite neu lädst -> Wenn du das auch noch Live im Browser sehen möchtest wie sich das ändert dann musst du AJAX benutzen.. Mit AJAX kann man Teilbereiche einer Seite regelmässig und im Hintergrund neu laden ohne " F5 " drücken zu müssen, also zum Beispiel das anzeigen der aktuellen Werte...


    Leider zeigst du weder den vollständigen Code, noch verräst du was tatsächlich durch betätigen eines Buttons passiert - ausser das irgendwas hoch oder runter gerechnet wird aber nicht was dies bewirkt - so ist es schwer Dir Deinen code so zu verbessern das es auf Anhieb Deinen Wünschen vollundganz entspricht.....


    Was für ein Shell Script? In welcher Sprache ist das Shell Script für die Taster? bash? python? php? ruby? c? c++? ...