Client auf Hardware-Tastendruck (ESP8266)

Guten Abend zusammen,

nachdem Ihr mir beim meinem letzten (Hardware-)Problem weitergeholfen habt, betrifft meine heutige Herausforderung eher den Software-Bereich...

Folgendes: Es gibt unzählige Beispiele, wie man ein externes Gerät (Smartphone, PC, Tablet, etc.) als Client für den ESP nutzt, um z.B. GPIOs zu schalten. Wo ich aber nicht wirklich etwas finde, ist für folgende Applikation:

Ich möchte über eine Hardware-Eingabe (Taster, Schalter,...) einen "Client-Request" realisieren, anstatt über die o.g. Geräte. Geht so etwas? Ziel ist es, dass der ESP die Sensorwerte (MCU-6050) per "Tastendruck" an das Endgerät sendet - und das nur nach Aufforderung. Der ESP müsste meines Erachtens nach sowohl als Server und gleichzeitig als Client agieren. Geht so etwas? Oder anders fromuliert: Der Tastendruck müsste dem mobilen Endgerät sagen, dass nun ein Wert da ist, den er abholen kann. Bisher mache ich das so, dass ich in der App (als Client) mit Hilfe von GET einen Parameter setze, der den Tastendruck (auf der App, den ich ja aber mit einem Hardware-Taster ersetzen möchte) erkennt um dann im Sketch über eine if Abfrage

if (header.indexOf("GET /SAVE") >= 0) {
         sig = 1;}

zu detektieren, ob der aktuelle Wert zu erfassen ist oder nicht.

Eine Alternative wäre auch sicherlich, ein zusätzliches "Tag" in meinen String einzubauen, über den der Client erkennt, dass der Taster aktiviert wurde, z.B. schematisch so

            client.println("<!DOCTYPE html>\n<html>");
     
            /*  I2C sensor data aquisition */
            String s;   // html content of the web page
            s=String(Sensorwert) + ",";

            if (tastendruck){
              s+="save";
            }
            else{
              s+="nosave";
            }
            s += "\n</html>\n";
            
            client.println(s);

Nachteil bei dieser Lösung ist, dass ich den Client auf meiner App laufend abfragen lassen muss, um den Tastendruck mitzubekommen.

Ich würde nun gerne wie hoffentlich klar wurde, über einen Tastendruck einen Client auf meinen Endgerät "öffnen", den Wert übergeben und dann wieder "schließen".

Vielleicht wichtig: Ich nutze den MIT App Inventor 2 auf dem Smartphone zur Darstellung der Werte.

Ich hoffe, ich konnte Euch mein Anliegen klar machen. Wenn nicht, fragt bitte nach!

Vielen Dank Euch und Grüße

Bire

Nutze den Webserver des ESP???? (welcher) und baue eine passende Website auf. Dafür gibt es viele Beispiele. Baue auf den Beispielen der aktuellen ESPxxx-Libs auf.
Vom Browser kannst Du dann problemlos darauf zugreifen. Da brauchst Du keine App.

Gruß Tommy

Hallo Tommy,

danke! Ja, die Beispiele habe ich mir selbstverständlich angeschaut und auch eine Webseite erfolgreich aufgenbaut. Wenn ich hier mit "Software-Buttons" agiere und über den Client (Webpage) dem ESP signalisiere, dass dieser Wert gespeichert/erfasst werden soll, klappt das. Dies möchte ich nun durch einen richtigen Taster direkt an meinem ESP realisieren. Die Beispiele repäsentieren entweder immer "nur" einen Server oder "nur" einen Client, oder habe ich etwas übersehen?

Grüße und Danke für Deine Hilfe!

Bire

Moment. Extern über ... oder ein Button am ESP selbst - also mit Strippen zu den Eingängen. Kären wir erst mal, was Du wirklich willst. Um welchen ESP geht es?

Gruß Tommy

Hallo Tommy,

ja, einen echten Taster über "Strippen" mit einem GPIO an einem ESP8266 angeschlossen. Das Gerät ist eine Art Winkelmesser, in dem ein Gyrosensor integriert ist. Im Gerät befindet sich auch der ESP an welchen wiederum der Taster angeschlossen sein soll. Wenn ich den Taster betätige soll mein mobiles Endgerät signalisiert bekommen, dass dieser Messwert zu erfassen / zu speichern ist. Das Endgerät ist nur zum Anzeigen der Werte da.

Die beiden Ansätze, die ich beschrieben habe, funktionieren ja grundsätzlich, aber was mir nicht gefällt ist, dass dauerhaft Werte gesendet werden müssen.

Ich denke eleganter wäre: Tasterdruck --> Client öffnen --> Wert senden --> Client schließen. Das Endgerät müsste vermutlich als zweiter Client fungieren...? Hier bin ich mir nicht sicher, ob das von der "Architektur" überhaupt fuktioniert...

Ich hoffe, jetzt wird es klarer...?

DANKE und Grüße

Bire

Damit Client-Senden am ESP funktioniert, muss auf dem Smartfone ein Http-Server laufen, den der Client auf dem ESP mansprechen kann.
Ist das so?

Ansonsten würde mir noch der Weg vom Browser Smartfone via Websockets einfallen, wo der ESP nachdem die Verbindung vom Browser initiiert wurde, die Daten pushen kann.

Gruß Tommy

Hallo Tommy,

Du meinst:

Damit Client-Senden am ESP funktioniert, muss auf dem Smartfone ein Http-Server laufen, den der Client auf dem ESP mansprechen kann.

Verstehe ich Dich richtig, dass das Voraussetzung für mein Vorhaben ist? Wenn ja, dann muss ich das erst einmal prüfen. Bisher agiert die App als Client, der die Werte anfordert. Ich muss erst mal recherchieren, ob der MIT App Inventor dasberhaupt abbilden kann...

Wie müsste ich mir das dann vorstellen? Bisher dachte ich immer, der Teilnehmer, der Daten bereitstellt (in meinem Fall also der ESP) ist der Server und der Anfragende der Client, hier wäre das dann aber wohl andersherum...?!

Auch schaue ich mir mal die Möglichkeit von WebSockets an.

DANKE und Grüße

Bire

Ja, wenn jemand auf Anfragen wartet, ist er ein Server. Der anfragt, ist ein Client.
Wie bei Anwalt(Server) und Client, der was will.

Gruß Tommy

Edit: Da Du das Smartphone ja auch anders nutzt, wäre ein Server darauf bzw. Websockets garnicht so sinnvoll. Was soll passieren, wenn vom ESP ein Tastendruck gemeldet wird und am Handy keiner bereit ist, den entgegen zu nehmen?

Das Thema ist viel verzweigter, als man auf den ersten Blick denkt.

Hallo Tommy,

ok, danke! Auf die Schnelle würde ich sagen, dass mein Vorhaben dann nicht funktioniert, da der MIT App Inventor wohl "nur" als Client funktioniert... :frowning: Ich schaue mir das dann noch einmal an, auch das mit den Websockets und halte Dich / Euch auf dem Laufenden.

Danke und Grüße

Bire

Hallo,

nochmal ich, sorry, hatte Deine Bemerkung zu spät gesehen. Ja, Du hast recht, aber in diesem Fall wäre es ein Smartphone, bzw. eine App, die nur für diese Applikation eingesetzt werden würde, dahingehend wäre das kein "Risiko". Das Geräte (ESP+Gyrosensor) senden nur sporadisch, wenn das Gerät eingesetzt wird, läuft auch die App, sonst nicht. Das meintest Du, oder?

Grüße

Bire

Nein, nicht wirklich. Ich meinte, dass das Smartphone als Server dann ständig aktiv sein müsste, um Anfragen/Meldungen des Clients ESP annehmen zu können.
Andersrum, wenn der ESP der Server ist, kann das Handy (der Client) den Status des Tasters abfragen, bekommt aber außerhalb dieser Abfragen keine Statusändrungen mit.

So ist das halt.

Gruß Tommy

Edit: Man könnte jetzt über Push-Dienste, z.B. Mail nachdenken.

Super! Vielen Dank! Du hast mir ja schon oft weitergeholfen!

Ich recherchiere morgen mal, eventuell komm ich mit Deinen Hinweisen (Push-Dienste, Websocket, Webserver vermutlich eher nicht :frowning: ,...) weiter.

DANKE für Deine Zeit!

Bire