Hallo Roger10499,
Versteht ihr was ich meine?
Ja, jetzt weiß ich, worum deine Gedanken kreisen, aber das wird so nichts.
Was Du da liest, ist der HTML Quelltext, der per HTTP an den Brower übermittelt wird. Diese Datei bleibt unverändert; da schreibt der Browser nichts hinein. Das kann er nicht, das soll er nicht, das darf er nicht. Solche Dateien sind für den Browser nur lesbar.
Man könnte den Server so konfigurieren (wenn man denn wüsste, welcher Server im ESP32 läuft - NGINX? Apache? Irgendwas anderes?), dass er PUT Requests annimmt und als Datei speichert. Diese Datei könnte dein Controllerprogramm auslesen. Aber das muss erstmal überhaupt möglich sein, und dann löst das die ganze Hölle an parallelen Dateizugriffen aus. Nein, das willst Du nicht, glaub mir 😉
Was Du - wie ich meine - wirklich brauchst, ist ein Socket-Listener. Den musst Du in dein C Programm einbauen. Sprich: einen IP-Socket auf der öffentlichen IP des ESP32 öffnen und auf einen Port lauschen. Der Standardport 80 ist vermutlich schon vom ESP32-Webserver belegt, nimm die 8080; das ist der übliche Alternativport. Oder irgendwas hohes zwischen 32000 und 48000.
Mit diesem Socket musst Du nun Datenpakete austauschen. Weil Dein Client ein Browser ist, bist Du auf das HTTP Protokoll limitiert. Das musst Du also in deinem Programm im ESP implementieren. Die Idee wäre, dass dein HTTP Listener an Hand der vom Browser gesendeten Datenpakete die neue Stellung des "Joysticks" in dein Autocontroller-Programm überträgt. Wie Du das machst - keine Ahnung. Das ist so trivial nicht. Aber vielleicht gibt's ja schon eine fertige Lib für einen einfachen HTTP Server.
Auf HTTP Ebene werden vom Client Kommandos verschickt. Die heißen GET, POST, PUT oder ähnlich.
Zum Beispiel, wenn Du die URL http://www.example.org/test/index.html abrufst, kontaktiert dein Browser die IP, die für www.example.org registriert ist, und schickt ihr einen HTTP Befehl:
GET /test/index.html HTTP/1.1
Host: www.example.org
Der Server erkennt das GET Verb, er erkennt den Ressourcennamen, er erkennt die Protokollversion (HTTP 1.1). Die zweite Zeile ist ein sogenannter Header, das sind Name-Wert Paare mit Zusatzinformationen. Das Host-Attribut kommt immer mit, denn viele Server implementieren viele Webs und brauchen den Hostnamen, um die Anfrage zum richtigen Web zu schicken (was für deinen ESP irrelevant ist).
Der Server antwortet dann beispielsweise mit
HTTP/1.1 200 OK
Content-Type: text/html
<!doctype html>
...
Die erste Zeile liefert den HTTP Erfolgsstatus (200=OK), dann können Antwort-Header folgen, dann kommt eine Leerzeile und dann der Inhalt der Antwort. Der Content-Type ist wichtig, damit der Browser weiß, dass es eine HTML Seite ist.
Das XMLHttpRequest Objekt in Javascript (bzw. das Fetch API) wertet den Content-Type der Antwort aus, um das Ergebnis im richtigen Format aufzubereiten. Das kann Text sein, ein Binärdatenstrom, oder ein in JSON codiertes Objekt.
Du kannst das aber auch mit dem Inhalt bleiben lassen und die Antwort in einem Custom-Header verstecken; die kannst Du im JavaScript ebenfalls auslesen. Custom-Header haben ein X- Präfix. Dein Server könnte antworten:
HTTP/1.1 200 OK
X-Speed: 200
Oder gar keinen Antwortheader liefern, nur OK.
Deine Joystick-App könnte die gewünschten Parameter in der URL verstecken ein eigenes HTTP Verb verwenden (das kann man bei fetch einstellen) und Anfragen dieser Art senden:
CAR /X=100/Y=75 HTTP/1.1
Schluss aus. Mehr nicht. Dein HTTP Listener muss solche Datenpakete natürlich empfangen und verstehen können, die OK Antwort schicken und die Werte intern weiterleiten.
Beachte dabei auch, dass jede Kommunikation vom Browser ausgehen muss. Dein HTTP Listener darf nur auf HTTP Anfragen antworten. Schickt er unerwartet etwas, wird das ignoriert. Es gibt zwar eine HTTP Erweiterung - das WebSocket Protokoll - die das ermöglicht, aber das willst Du im ersten Schritt nicht implementieren.
So; nun hast Du Recherchefutter. Wie Du das alles im Detail machst, kann ich Dir nicht sagen. Wie Du fetch benutzt, schon, aber ich kann Dir nicht remote die Joystick-Seite für's Handy programmieren. Das wirst Du schon tun müssen. Und es ist eben mehr als "einen Wert in eine Seite schreiben".
Alternative: Suche nach fertigen remote control Apps für ESP32.
Rolf
--
sumpsi - posui - obstruxi