Habe diesen Thema schon im englischem Forum eröffnet. Leider ohne Erfolg. Würde gerne auch eure Meinung hören. Im englischem Froum, wurde ich gewarnt, dass das nutzen von sehr langen Strings, den ESP8266 RAM überlasten würde. Der Grund: Da die Strings sehr lang sind, müsste immer dementsprechend auch Speicherplatz gefunden werden, welches zur Länge passt. Da es aber zu lang ist, wird der String immer wieder an das Ende des RAM eingefügt, bis es irgendwann crashen tut.
Habt ihr vielleicht eine gute Lösung ? Wie ist eure Meinung dazu ? Den Code füge ich am Ende mit ein. Es handelt sich hierbei um einen Webserver mit HTML-Page.
Es geht um den String "index_html". PS. Die Länge des Strings beträgt etwa 6000 Zeic hen.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
char * ssid_ap = "testing";
char * password_ap = "11111111";
IPAddress ip(192,168,11,4); // arbitrary IP address (doesn't conflict w/ local network)
IPAddress gateway(192,168,11,1);
IPAddress subnet(255,255,255,0);
ESP8266WebServer server;
String index_html = R"rawliteral(<html>
<body>
<p>
Beispiel text. Die Länge des gesamten Strings beträgt etwa 6000 Zeichen.
</p>
<p>
<form action="/action_page"><input type="hidden" name="input" value="1"><input type="submit" value="Sensor On"></form>
</p>
<p>
<form action="/action_page">aa<input type="hidden" name="input" value="2"><input type="submit" value="Sensor Off"></form>
</p>
<p>aa <-- this will be replaced</p>
</body></html>)rawliteral";
void setup() {
WiFi.mode(WIFI_AP);
WiFi.softAPConfig(ip,gateway,subnet);
WiFi.softAP(ssid_ap,password_ap);
Serial.begin(115200);
server.on("/", HTTP_GET, []{server.send(200,"text/html",String(index_html));});
server.begin();
}
void loop() {
server.handleClient();
}
Verwenden Sie SPIFFS oder LittleFS, um die HTML-Seiten im Flash-Speicher zu halten, und Rawliterals sollten nicht in Strings umgewandelt werden ... behalten Sie sie als cStrings ...
PS: Doppelposting ist in diesem Forum nicht erwünscht. Wenn Sie das Gespräch im englischen Forum begonnen haben (Sie hätten einen Link teilen können), dann führen Sie das Gespräch dort fort.
Die ESPAsyncWebServer-Bibliothek erwartet, dass das Netzwerk aktiv ist und funktioniert - also richten Sie es genau so ein, wie Sie es möchten ... Ich bin mir nicht sicher, ob ich verstehe, was Sie sagen.
Ja, der AsyncronServer funktioniert auch. Aber wie gesagt, ich brauche den anderen Webserver, wie oben beschrieben. Die IP-Adressen kann man mit meinem Code oben, sehr gut erstellen.
Und SPIFFS kann man bei meinem Code oben nicht anwenden ?
Bitte beschreibe was du machen willst und was am Ende rauskommen soll.
Auch mit dem
ESP8266WebServer.h
kann man auf einer Seite dynamisch Daten einbinden.
Wenn du eine Stunde Zeit hast, schau dir meine Seite an
(es geht nur um den generischen webserver, die Hardware ist egal, das verwende ich mehrmals auf der Seite).
und probier einen derartigen Sketch mal aus.
bedank dich im englischen Thread bei den Helfern mit einem Like,
verlinke den deutschen und schreibe, dass du hier weitermachen willst. Sonst wird auf zwei Seiten gearbeitet - was sinnlos ist.
okay, werde ich tun. Verzeiht mir, aber hatte eine Nachtdienst gestern. Auch heute werde ich Nachtdienst haben. Muss jetzt schnell was einkaufen, und auch frühstücken. Werde es dann auf der Arbeit ausprobieren, und es dann hier teilen.
Vrzeiht mir für die Unhöflichkeit, dass ich jetzt weg muss kurz.
Nochmal zur Wiederholung: ist etwas unfhöflich, einfach wegzugehen. Daher Sorry. Bin zwar nicht so alt, aber ich habe dennoch gesundheitliche Probleme. Kann weder in Ruhe, sitzen, noch liegen, noch in ruhe stehen, da mir alles weh tut. Aber anderes Thema.
Kann ich dich evtl. auch mal kontaktieren ? Du scheinst ein ESP-Profi zu sein, da du ja schon ein eigenes Produkt auf dem Markt hast.
Leute, ich bedanke mich für eure Hilfe.. aber (da gibt's wirklich kein Aber) ich habe das selbst gelöst. Durch einen genialen Trick. Ihr werdet euch wundern
Und das Beste: die Strings bleiben klein, und somit keine Last für den RAM.
Poste es gleich mal hier. Yeaaaaah.
Die Lösung werde ich als Kommentar ins Code implementieren
Hier ist meine Lösung (ps. englische kommentiert, da der andere Thread es auch lesen können sollte):
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
char * ssid_ap = "testing";
char * password_ap = "11111111";
/////////////////////////////////////////////////////////Hey falks !!! Thanks again!
/////////////////////////////////////////////////////////here are 6 STringe (relatively short)
/////////////////////////////////////////////////////////it is that easy :D now just implement
/////////////////////////////////////////////////////////this 6 strings, into the server.send() below;
String index_html1 = R"rawliteral(<html><head>
<body><p>test1
</p>)rawliteral";
String index_html2 = R"rawliteral(<p>test3
</p>)rawliteral";
String index_html3 = R"rawliteral(<p>test4
</p>)rawliteral";
String index_html4 = R"rawliteral(<p>test4
</p>)rawliteral";
String index_html5 = R"rawliteral(<p>test5
</p>)rawliteral";
String index_html6 = R"rawliteral(<p>test6</p>
</body></html>)rawliteral";
void setup() {
WiFi.mode(WIFI_AP);
WiFi.softAP(ssid_ap,password_ap);
/////////////////////////////////////////////////////////so as you can see, here are 6 Strings seperately inserted into the server.send();
/////////////////////////////////////////////////////////it is that easy... now the RAM is going to have a good time
server.on("/", HTTP_GET, []{server.send(200,"text/html",String(index_html1 + index_html2 + index_html3 + index_html4 + index_html5 + index_html6));});
server.begin();
}
void loop() {
server.handleClient();
}