Referenz, welche HTML-Syntax verwendet werden kann/darf?

Hallo,

ich habe dem ESP32 einen Webserver “aufgesetzt”, wie es so schön heißt. Funktioniert soweit auch. Ich will damit weiter, dass man auf dem Client eine Datei auswählen und an den Server schicken kann. Dazu habe ich folgenden HTML-Quelltext ausgegooglet:

Wählen Sie eine Textdatei (*.txt, *.html usw.) von Ihrem Rechner aus. … und ab geht die Post!

Wie immer, funktioniert das nun nicht im Arduino, weil der über “post” und “multipart” meckert.

Daher die Frage, gibt es eine Art Referenz, welche HTML-Syntax man dem ESP32 unter Arduino antun kann, bzw. muß man bestimmte(und wenn ja, welche) Bibliotheken einbinden, die diese Syntax erweitern?

BL007:
Wie immer, funktioniert das nun nicht im Arduino, weil der über "post" und "multipart" meckert.

Daher die Frage, gibt es eine Art Referenz, welche HTML-Syntax man dem ESP32 unter Arduino antun kann, bzw. muß man bestimmte(und wenn ja, welche) Bibliotheken einbinden, die diese Syntax erweitern?

Was ist denn "meckert" für eine Fehlermeldung?

Eine Art Referenz für den Esp32 gibt es hier!

Gruß Fips

BL007:
Wie immer, funktioniert das nun nicht im Arduino, weil der über "post" und "multipart" meckert.

Der HTML-Inhalt, den er ausliefert, ist für den Prozessor nur eine Ansammlung von Zeichenketten, deren Inhalt ihn überhaupt nicht interessiert.
Wenn also der Compiler "meckert" ist es ein Codefehler. Da musst Du aber schon die genaue Fehlermeldung und den Sketch dazu posten.

Gruß Tommy

Also der ESP32 versteht kein HTML. Braucht der auch nicht.

Kannst du mal ein “compilierbares” Minimalbeispiel anhängen, bei dem der Fehler auftritt?

Besten Dank zunächst für die Unterstützung!

Es geht um folgende Zeilen:

client.println("");
client.println(“Wählen Sie eine Textdatei (*.txt, *.html usw.) von Ihrem Rechner aus.”);
client.println("/label");
client.println("… und ab geht die Post!");
client.println("");

Hier “meckert” Arduino dieses:

…Test:203:47: error: inconsistent user-defined literal suffixes ‘post’ and ‘multipart’ in string literal

client.println("");

Der stößt sich an den Anführungszeichen.

client.println("");

Im Prinzip erscheint mir das auch nicht unlogisch. Nur, bei einer anderen Zeile

client.println("

<a href="/4/off"><button class=“button button2”>OFF

");

stört ihn das nicht.

Nun ist mir nicht ganz klar, welche Syntax da den Unterschied macht und wo man derlei nachlesen könnte. Sind das die Backslashs?

Ja, durch die Backslashes wird ihm mitgeteilt, dass er das nicht als Begrenzer von Zeichenketten sehen sollen. Das nennt man maskieren. Das ist genau wie '\n' was dann kein 'n' sondern ein Zeilenvorschub ist.

Das Problem kann man auch mit RAW-Zeichenketten umgehen.

Gruß Tommy

In C wird mit " ein String begonnen und mit " wieder beendet. Wenn du jetzt ein " in deinem String hast, bekommst du ein Problem.

Aber das kannst du lösen wenn du es maskierst. Dazu stellst du vor jedem Zeichen das maskiert werden muss ein .

Aus

client.println("<form method="post" enctype="multipart/form-data">");

musst du ein

client.println("<form method=\"post\" enctype=\"multipart/form-data\">");

machen. Dann sollte es gehen.

Alternativ kannst du statische Dateien auch SPIFFS benutzen.

Tommy56:
Das Problem kann man auch mit RAW-Zeichenketten umgehen.

Genau, benutze doch gleich das string literal.

const char HELPER[] PROGMEM = R"(<form method="POST" action="/upload" enctype="multipart/form-data">
<input type="file" name="upload"><button>Upload</button></form>Lade die spiffs.html hoch.)";

Funktioniert bei mir!

Auf meine Hompage wurdest du im vorhergehenden Thread von "agmue" schon hingewiesen.

Wenn du den Datei Upload zum Esp32 trotz alle dem selbst bauen willst dann vergiss den WiFiServer und den endlosen "client.print" Arien.

Benutze den kompfortablen Webserver, der macht dir vieles leichter.

Wie der Datei Upload funktioniert findest du im FSBrowser Beispiel.

So sieht das Webinterface bei mir aus.

Gruß Fips

Die Steuerzeichen sind nicht nur eine Eigenheit von C / C++ sondern von vielen Programmiersprachen.
Selbst mit HTML selbst hast Du probleme wenn Du “” als Text ausgeben willst.
Grüße Uwe

Selbst mit HTML selbst hast Du probleme

Extra für HTML wurden Sequenzen wie &lt; (und unzählige mehr) erfunden.

Hi

Die fehlenden Fehlermeldungen oben könne nauch entstehen, wenn eine ungerade Anzahl an " in der Zeile stehen - ab hier 'ist String' und warum sollten in einem String keine CR/LF vor kommen.
Und auch der Text
Serial.print(
kommt dem Kompiler wenig komisch vor, wird Dieser doch durch das folgende " beendet und schließt den oben angefangenen String ab.
Blöd kommt jetzt, daß der Kauderwelsch, Der danach kommt, stößt dem Kompiler eher bitter auf.

mfG

Vielen Dank für die Hilfe!
Mit den Backslashs war ich erst mal ein Stück weiter, wobei das bis jetzt alles nur dem Testen und der Lernkurve dient. Beim richtigen Projekt bin ich (leider) noch nicht.

Derfips:
Auf meine Hompage wurdest du im vorhergehenden Thread von "agmue" schon hingewiesen.

Wenn du den Datei Upload zum Esp32 trotz alle dem selbst bauen willst dann vergiss den WiFiServer und den endlosen "client.print" Arien.

Benutze den kompfortablen Webserver, der macht dir vieles leichter.

Wie der Datei Upload funktioniert findest du im FSBrowser Beispiel.

Fips, ich habe mich (jetzt) mit Deiner Seite beschäftigt. Nur, bei etwas älteren Opas wie fallen die Groschen halt doch langsamer. Weshalb ich da schon mal Schwierigkeiten haben, einen Anfang zu finden. Da gibt's die WebServer.h. Wenn ch das richtig verstehe, ist doch darin die Klasse "WebServer" definiert und deren Methoden. Um damit selbst zu arbeiten und nicht nur die Examples mal durchlaufen zu lassen, müßte man doch diese Methoden (und ggf. Properties und was es da alles so geben kann) genauer kennen. Wo fände ich denn sowas?

BL007:
Wo fände ich denn sowas?

Auf deinem Rechner wo du die IDE installiert hast.
Bei mir:
D:\Arduino_Portable\Arduino_1.8.10_core_2.6.0_&_1.0.4\portable\packages\esp32\hardware\esp32\1.0.4\libraries\WebServer\src

Oder im Internet bei Github.

Gruß Fips

Danke!

Das sind die Quelldateien. Gibt es dazu vielleicht auch irgendwo Beschreibungen oder ähnliches, dass man sich nicht durch jede einzelne Methode fummeln muß?

Hi

Da jede Lib genau Das macht, was Deren Progger Sich so überlegt hat, wird man nur dort fündig, was wirklich passiert.

Oder wovon wünscht Du eine Beschreibung?

MfG

Da das Schreiben von Dokus bei Programmierern vorsichtig gesagt "zu den unbeliebten Beschäftigungen" gehört (es gibt ein paar Ausnahmen), wirst Du mit Glück in den Quelltexten Kommentare finden, sonst musst Du so damit klar kommen.

Use the source, Luke.

Gruß Tommy

BL007:
Danke!

Das sind die Quelldateien. Gibt es dazu vielleicht auch irgendwo Beschreibungen oder ähnliches, dass man sich nicht durch jede einzelne Methode fummeln muß?

Für den Esp8266 gibt es eine gute Arduino Framework Dokumentation, nur wird heutzutage vielen Esp-Beginnern weiß gemacht das es für ein bissel Blinki Blinki mit einem Webserver unbedingt das fette Teil sein muss.

Arduino für ESP32 ist eine Kompatibilitätsschicht, die die IDF-Funktionen aufruft (ESP-IDF-Dokumente).

Dies ist gut, da Sie beide APIs auf beiden Plattformen verwenden können, Arduino-Code auf IDF ausführen oder IDF-Funktionen direkt auf Ihrem Arduino-Code aufrufen können

Die Macher vom Esp32 Arduino Framework verweisen bei Anfragen zu einer Doku auf die vorhandenen auf denen alles aufbaut.

Arduino Referenz

ESP-IDF Programming Guide

Die Beispiele für den Esp32 in der Arduino IDE sind meist hilfreich als Startpunkt für eigene Projekte.

Gruß Fips