Grosse Strings, Problem mit ESP8266

Hallo in die Runde,

ich verstehe im Moment etwas überhaupt nicht. In einem kleinen Projekt mit eingebundenem Webserver habe ich drei grössere Strings mit jew. rund 6k Länge definiert (Base64 Bilddaten). Diese stehen direkt nacheinander im Code.

Die Strings füge ich recht unspektulär in HTML-Code ein, was auch (fast) ohne Probleme funktioniert. Was das Kuriose ist, ist die Tatsache, das der dritte String nicht übernommen werden kann (das Bild aus dem Base64 Code wird nicht angezeigt). Ich habe alle möglichen Konstellationen ausgetestest, selbst wenn ich die vorigen beiden Strings auskommentiere, wird der letzte nicht angezeigt, die 2 davor immer. Im Moment behelfe ich mir damit, dass ich einfach die Reihenfolge ändere, da ich immer nur ein Bild der drei Base64 Codes brauche.

Ist das ein Bug oder hat da der ESP ein Problem mit so langen Strings oder ist das ein DAU-Fehler oder vielleicht klassisch RTFM?!

Danke schon mal, Stefan

Bedeutet das dass mit dem dritten String etwas nicht in Ordnung ist? Syntax oder beim Wiedergeben.

also wenn man sich den Code ansieht dann fällt auf, dass ...

moment mal ... du hast ja keinen Code gepostet.

Mach mal einen Demosketch mit deinen drei Bildern und poste den in Code Tags dann kann man mal drüber sehen.

....nein, es ist damit alles in Ordnung, wenn ich die Reihenfolge drehe, z.B. den letzten String an den Anfang setze, dann wandert das Problem nicht nach oben, sondern es betrifft wieder den letzten String.

Hier ist mal ein Beispiel, jedoch gekürzt, ich wollte hier nicht 20k Code posten.

String SpeicherPlatz;

//Hier die Logos der Unternehmen in Base64, nicht verwendete werden in Kommentar gesetzt
String logo1 = "<img src=\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAABACAMAAAD/NG/DAAAAAXNSR\
0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAMAUExURQAAAAYGBgoKCg4ODhERERUVFRkZGR4eHiEhISYmJikpKS0tLTIyMjY2Njk5OT4+PkNDQ\
0ZGRklJSU5OTlJSUlVVVVlZWV5eXmJiYmZmZm9vb2lpaXNzc3V1dXp6ev8aKP8cKv0aLf8eLfcbN/0bNPcbPvkbPP8hLv4jMf8lMv4mNf8sN\
FGekUAt2FapT5NajDFiC2T4vLPrxgXae3aATVGhCGGJvhNk6ramwkTrm34TfVPhMXsAewVE4s9SIwQ/wBcJdUdIhFnkAAAAABJRU5ErkJggg\
==\"><br> <br>";

String logo2 = "<img src=\"data:image/jpeg;base64,iVBORw0KGgoAAAANSUhEUgAAAI4AAAAqCAIAAADqEvSnAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv\
8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAA72SURBVHhe7ZoJWFNXFsfJShKCCRC2hCVshkUWERBQtC6UUkerVmdqUUftOKW1VqtFq1N322q\
ZblrrtNNpP3Rc67jUalFBCoKKimxSZA9LIoQthCRkIcnc8C7kJXlAsLZDHX5fPjjnvkd47/3vPfecex9Op9NZjfF7AA9/jzHqGZNqtKPV9SL\
GWAAcjciU4uq2gnpxgUhW6GM3R9rlPDcifkyq0YXOSlciuJ7Ff0etbQFuqOO2vAfi+23VF5O/HEYqcEzWoxZ3K+RylUqjpZAIZDKRQbem08g\
grhMHtfe241pPYpFQnjKpTIH3C7QD5RBmO8Lj2b+76T6vWJl9V9lNCiN1pjt9gAAAABJRU5ErkJggg==\"><br> <br>";

String logo3 = "<img src=\"data:image/jpeg;base64,/9j/4AAQSkZJRgABAQEAYABgAAD/4QBoRXhpZgAATU0AKgAAAAgABAEaAAUAAAABAAAAPgEbAAUAAAABAA\
AARgEoAAMAAAABAAIAAAExAAIAAAARAAAATgAAAAAAAABgAAAAAQAAAGAAAAABcGFpbnQubmV0IDUuMC4xMQAA/9sAQwAbEhQXFBEbFxYXHhwbI\
ChCKyglJShROj0wQmBVZWRfVV1baniZgWpxkHNbXYW1hpCeo6utq2eAvMm6pseZqKuk/9sAQwEcHh4oIyhOKytOpG5dbqSkpKSkpKSkpKSkpKSk\
pKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSk/8AAEQgALgCrAwESAAIRAQMRAf/EAB8AAAEFAQEBAQEBAAAAAAAAAAABAgMEBQY\
0hMc7op/hIzitygDHfw7aGBY1Z1cHO/OSfrWxQBkR6DHGgX7VNx6YFa9\
AH/2Q==\"><br> <br>";

int subtexte[4];

Mit diesen Strings kommt allterdings nichts brauchbares raus. Was davor und danach steht habe ich mal mitkoopiert, wie schon gesagt, es funktioniert so lange alles, bis ich den dritten String verwende, da ist kein syntaktischer fehler. Als HTML wird lediglich der String eingefügt.

Darf ich dich fragen, warum du das so tust?

Wo sich SPIFFS oder LITTLEFS doch geradezu anbieten.
Es würde die Datenmenge verringern, die Codemenge verringern, und zudem dem Browser erlauben die Bilder zu cachen.

Dan schau doch wie man in HTML die Bilder einbettet, da ist nix mit String. Wen du das jedoch mit client.print machen willst dann gute Nacht.
Deshalb solltest zeigen was du vor hast

auf einem ESP würde ich die Bilddaten auch einfach im FS halten.

Aber ohne einen kompilierbaren Sketch kann man das Problem ohnehin nicht weiter analysieren.

...das wäre die Lösung, würde ich auch liebend gerne machen, habe jedoch für die 2.xx IDE nichts gefunden, was mir nach einer Anleitung aussieht (und auch funktioniert)

Das hat nichts mit der IDE zu tun.
Eher mit HTTP und HTML

Ein klein wenig behindert mich jedenfalls die 2er IDE da schon: Ich kenne momentan keine Möglichkeit, Dateien initial ins Filesystem hochzuladen wie das mit den Tools in der 1.8.19 geht.
Habe es bei SPIFFS mit der alten erledigt und erfolgreich mit einem Sketch aus der neuen weiter gearbeitet.

Warum nimmst Du nicht den LittleFS- oder SPIFFS-Tab von Fips?

Gruß Tommy

1 Like

Hochladen geht über HTTP oder auch FTP, es gibt sicherlich noch ein Dutzend weiterer Protokolle, die das erlauben.
Muss man nur auf dem ESP vorsehen.

Und nein, mit der alten IDE ist das auch nicht zuverlässig möglich.
z.B. bei den Wemos D1 mit 16MB

1 Like

@Tommy56 , @combie :
Ihr habt ja recht, mit den Tabs von Jens würde es auch gehen.
Ist bei mir pure Bequemlichkeit und mit den ESP32 DevKit v2 und v4 geht das auch prima.

Ich nutze ja nur ESP8266. Da habe ich einen Grundwebserver mit OTA und LittleFS.
Den kopiere ich mir jeweils und baue darauf auf.
Der "Aufwand" fällt also nur ein Mal an.

Gruß Tommy

Für die 8266er

Habe ich zufällig vor 2 Tagen entdeckt, da mein Upload Tool in der IDE 1.8.19 nicht mehr lief.

...schon mal probiert? Habe es eben mal so installiert wie beschrieben, geht aber nix.

....also, ich bin dem Ganzen mal weiter auf den Grund gegangen, Programmierungsfehler schliesse ich hiermit absolut aus.

Ich habe jetzt einem vierten String einen Dummy-Inhalt zugewiesen und siehe da, jetzt ist dieser vierte String leer und die drei Strings davor haben den richtigen Inhalt. Muss(!!) also ein Bug in der IDE sein. Was ich noch nicht getestet habe, ist, ab welcher Grösse eines Strings dieses Problem auftritt.

Drauf gekommen bin ich, als ich ein paar Zeilen Debug rein genommen hatte, mit denen ich mir die Stringlänge habe anzeigen lassen.

Ich melde das mal den Entwicklern, mal sehen, was die dazu für eine Meinung haben.

Bevor ich das tue, eine Frage, ich habe dazu nichts in den Referenzen gefunden, wieviel Bytes darf eigentlich ein String lang sein?

Soviel wie an einem Stück reserviert werden kann.

Ganz sicher nicht.

Ich weiß das klingt absolut lächerlich.
Aber mit welchen Code schickst du die Daten wohin bzw. verarbeitest du die Strings.

Ein bei deinen Fehlerbild und deiner letzten Aussage kommt mir das so vor als wenn die Daten in eine Array liegen die Schleife zu früh auf hört.

Zeig mal den Codeteil der den Job erledigt. Ist geraten aber klingt so.

Gruß

Pucki

Nicht wirklich richtig. :wink:

Lt. deren Seite 32 KB.

Wenn auch genug Platz ist im Variablen-Speicher.

Gruß

Pucki