mal eine Frage zum payload und MQTT. Ich betreibe einen Brocker auf Rasp 3 und sende Daten (Sensoren) an ein ESP Modul. Jetzt möchte ich, für weitere Verarbeitung, den Payload in eine Globale Variable speichern. (deklariert als int freq = 0;)
void callback(char* topic, byte* payload, unsigned int length) {
//Serial.print("Nachricht eingegangen [");
//Serial.print(topic);
//Serial.print("] ");
for (int i = 0; i < length; i++) {
//Serial.print((char)payload[i]);
payload[length] = '\0';
String s = String((char*)payload);
freq = s.toInt();
Serial.println(freq);
}
Es wird der richtige Wert geprintet aber immer 6 mal untereinander. Wie ändere ich den Code um nur eine Ausgabe zu bekommen??
sollte reichen. Den cast auf char* brauchst Du nicht, die Stringklasse kann auch mit byte* umgehen.
length wird erst wichtig, wenn Du binär-Daten im payload hast, in denen 0x00 innerhalb der Daten vorkommen darf. Zumindest der PubSubClient hängt offenbar das 0-Byte selbst an, habe ich aber nicht nachgeschaut.
Shunth:
......das mag der Compiler nicht......
String s= String(payload);
bei:
String s = String((char*)payload);
compiliert er und gibt nurnoch zwei Werte aus, wobei der erste Murks ist und der zweite stimmt...
ok, laß den cast drin. Müßten wir vermutlich jetzt lib-Versionen vergleichen.
2 Werte in einer zeile oder in 2 Zeilen? Ich habe doch eigentlich nur ein Serial.println(freq); dringelassen?
Laß Dir mal mit Serial.println(s); ausgeben, wie Dein payload genau aussieht und mit Serial.println(length); die Anzahl Bytes, die ankommen.