Fehler beim "Serializing" von Temperaturdaten

OP #7593331

Hallo,

ich möchte die Sensorwerte vom ESP8266 und dem verbundenen Temperatursensor nach LabView über TCP/MQTT herstellen und "publishen". Im Terminal sehe ich die Temperaturwerte und eine Verbindung zum Broker wird auch hergestellt.

Wenn ich zum Subscriber verbinde und "subscribe" bekomme ich folgende Fehlermeldung:

Serialisierte Daten nach Variant in OpenSerializer.lvlib:Serializer.FlattenedString.lvclass:unmarshalling.vi:3430001->OpenSerializer.lvlib:Serializer.lvclass:UnMarshall.vi:4390003->OpenSerializer.lvlib:Serializer.lvclass:UnMarshall (binary).vi:6550002->MQTT Base.lvlib:MQTT_Base.lvclass:Decode Publish Package.vi:2830001->MQTT Client.lvlib:Client.lvclass:Decode Application Message (Type).vi->SubscriberDD.vi

Laut meines Wissens nach werden die Temperaturwerte in einem String Format an den Broker gesendet und an den Subscriber weitergeleitet. Hier müsste der String Format in Binärform und dann in Dezimal umgewandelt werden. Ich wüsste leider nicht wo und in welcher Reihenfolge man den Umwandlung ansetzten müsste.

Über Unterstützung würde ich mich sehr freuen. Mfg

Quellcode vom ESP8266:

1
 
2

3
#include <Wire.h>
4
#include <Adafruit_SHT31.h>
5
#include <ESP8266WiFi.h>
6
#include <PubSubClient.h>
7
#include <SPI.h>
8

9
// Replace with your WiFi credentials
10
const char* ssid = "Test123";
11
const char* password = "Test123";
12

13
// Replace with your MQTT broker details
14
const char* mqtt_server = "Test123";
15
const int mqtt_port = 1883;
16
const char* mqtt_topic = "sensor_data";
17

18
// Create an instance of the SHT85 sensor
19
Adafruit_SHT31 sht;
20

21
// Create an instance of the WiFi client
22
WiFiClient espClient;
23

24
// Create an instance of the MQTT client
25
PubSubClient client(espClient);
26

27
void setup() {
28
  // Start the serial communication
29
  Serial.begin(9600);
30

31
  // Connect to Wi-Fi
32
  WiFi.begin(ssid, password);
33
  while (WiFi.status() != WL_CONNECTED) {
34
    delay(1000);
35
    Serial.println("Connecting to WiFi...");
36
  }
37
  Serial.println("Connected to WiFi");
38

39
  // Connect to MQTT broker
40
  client.setServer(mqtt_server, mqtt_port);
41

42
  // Initialize the SHT85 sensor
43
  if (!sht.begin(0x44)) {
44
    Serial.println("SHT85 not found. Check wiring!");
45
    while (1);
46
  }
47
}
48

49
void loop() {
50
  // Read sensor data
51
  float temperature = sht.readTemperature();
52
  float humidity = sht.readHumidity();
53

54
  // Print sensor data to Serial Monitor
55
  Serial.print("Temperature: ");
56
  Serial.print(temperature);
57
  Serial.print(" °C, Humidity: ");
58
  Serial.print(humidity);
59
  Serial.println(" %");
60

61
  // Publish sensor data to MQTT
62
  if (client.connect("ESP8266Client")) {
63
    char tempStr[10];
64
    char humStr[10];
65
    dtostrf(temperature, 4, 2, tempStr);
66
    dtostrf(humidity, 4, 2, humStr);
67

68
    client.publish(mqtt_topic, tempStr);
69
    //client.publish(mqtt_topic, humStr);
70

71
    client.disconnect();
72
  }
73

74
  // Wait for a while before reading the sensor again
75
  delay(5000);
76
}
Angehängte Dateien:
#7593342

Meine Sensoren publishen ihre Daten folgendermaßen:

1
  char topicc[40]={0};
2
...
3
  strcat(topicc, temp_topic);
4
  client.publish(topicc, String(temp).c_str(), true);

Du könntest auch den MQTT Explorer verwenden, um zu schauen, in welchem Format deine Daten beim Broker ankommen.

#7594388

Yasin Y. schrieb:

Habe ein Bild eingefügt, bekomme anscheinend Float Werte, erwartet hatte ich die Nachrichten im String-Format..

Ich sehe auf dem Bild als Nachrichten Zahlwerte ALS TEXT, also genau was dtostrf produziert. Der MQTT-Explorer wiederum erkennt diesen Text als Zahlwert. Anführungszeichen davor und dahinter (also "String-Format") schickst du nicht und bekommst du also auch nicht.

LG, Sebastian

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 2 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.