Abgesehen davon, dass ich den Fehler auch nicht sehe (weil die Definition von lwt fehlt ?) , ist die Frage, was das mit dem String Objekt soll?
Eine sinnvolle Variable wÀre doch eher vom Typ const char* oder ein const char []
Die Fehlermeldung kommt vom Mqtt-Server nicht vom ESP.
lwt= lastwilltopic
Das Topic wird dynamisch erzeugt, daher ist eine feste Zuweisung der Variable nicht sinnvoll.
Das Ergebnis soll nachher so aussehen: "LED-" + CHIP-ID + "/esp/lwt"
Wobei die CHIP-ID natĂŒrlich bei jeden uC anders ist.
Wenn die CHIP-ID immer die gleiche Anzahl Zeichen hat, gibt's erst recht keinen Grund fĂŒr ein ( bzw. mehrere, wegen deinem + Operator ) String-Objekte. Wenn nicht, gibt's immer noch sprintf.
Aber String::c_str() liefert eine Adresse zurĂŒck, die nur so lange gĂŒltig ist, wie das String Objekt lebt.
Mach mal (nur zum Test, nicht als Lösung) static String lwt , oder global.
Schon klar. Schickst ihm eben nicht das, was du denkst.
Wobei .enableLastWillMessage
wohl nur eine Adresse weiterreicht, die "spÀter" noch gebraucht wird. Wenn buffer nur lokal existiert, hast du mit @Kai-R s Stringfreiem Vorschlag dasselbe Problem.
So hÀsslich es ist, wÀre static char buffer[21]; doch eine Lösung.
Klar geht global auch. Ist halt noch hĂ€Ălicher.
Das Problem ist ja, dass der Inhalt von buffer lÀnger gebraucht wird als eigentlich nötig.
Dass buffer dann öffentlich zugÀnglich und Ànderbar ist, ist eigentlich grade nicht gewollt.
Aber das ist eher eine theoretiscche Sache. Hauptsache es geht.