Hallo Gemeinde, ich versuch grad 2 Messwerte an den lokalen MQTT-Server zu senden:
// "GreenhousTopic" Veroeffentlichen
String werte[3];
werte[0] = String(tempC).c_str();
werte[1] = String(humidity).c_str();
werte[3]= '\0';
client.publish(outTopic, werte, true); // hier meckert der Compiler mit werte ist er nicht zufrieden
ist sicherlich wiedermal ein Grundlagenproblem, aber kann wer helfen?
Der Weg Zahl -> String -> C-string (char-Array) ist der ungünstigste Weg, den man gehen kann und er führt je nach Prozessor/RAM früher oder später zu so starker Fragmentierung des RAM, dass Absturz noch die Beste Reaktion ist.
Besser ist es, über dtostrf (kleine 8-Bit-AVR) oder sprintf/snprintf (ESP) direkt ein char-Array zu befüllen.
Da Du uns nicht mitteilst, welchen MC Du verwendest, können wir das nicht genauer beantworten.
Wenn Du eine "Gesamtlänge" für das Zahlenformat angibst, müsstest Du für -99.0 schon "%5.1" angeben, weil die 5 für alle Zeichen inklusive "." und einer Nachkommastelle steht. Ist die Zahl kürzer (z.b. 9.9) wird mit Leerzeichen aufgefüllt "__9.9".
Wenn Du das "Auffüllen" mit Leerzeichen nicht haben willst bietet sich snprintf(log,10,"%.1f,%.0f", tempC, humidity);
an. Also fast Deine ursprüngliche Variante. Nur hier ohne Nachkommastelle bei der Luftfeuchte.
Ergibt "-99.9,100" + Char-String Ende '\0' = 10 Zeichen.