Moin allerseits,
ich scheitere gerade dabei, einen großen JSON-Array per MQTT zu übertragen:
Wenn ich im Sketch arr_size auf 2 stelle, kommt noch was an, aber ab 3 nicht mehr.
Kann das daran liegen, dass der Broker nur eine bestimmte Anzahl an Zeichen durchlässt?
Oder hab ich im Sketch irgendwo einen Fehler?
Aber die Buffer sollten eigentlich alle korrekt dimensioniert sein.
Habt ihr ne Idee?
#include <PubSubClient.h>
#include <WiFi.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>
WiFiClient wifiClient;
PubSubClient client(wifiClient);
static const char mqtt_broker[43]="broker.emqx.io"; // z.B. broker.emqx.io
static const char mqtt_username[25]="emqx"; // z.B. emqx
static const char mqtt_password[8]="public"; // z.B. public
char mqtt_topic[20]="esp32_daniel/";
const char ssid[14] = "MEINE_SSID";
const char password[21] = "MEIN_PASSWORT";
unsigned long connTimer=0;
void setup() {
Serial.begin(115200);
// Mit der Welt verbinden
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
connTimer = millis();
while (WiFi.status() != WL_CONNECTED && (millis() - connTimer < 5000)) {
delay(500);
}
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Wir sind verbunden...");
} else {
Serial.println("Wir sind nicht verbunden");
}
// Mit MQTT-Broker verbinden
client.setServer(mqtt_broker, 1883);
if (!client.connected()) {
if (mqtt_reconnect()) {
Serial.println("MQTT-Verbindung --> hat geklappt!");
}
}
// Laut dem Assistenten auf ArduinoJson.org reichen für den Test-Array unten
// 3072, ich hab mal auf 4000 aufgerundet ;-)
DynamicJsonDocument mqtt_json(4000);
uint8_t arr_size = 2; // Bei arr_size=2 funktonierts noch --> MQTT-Message kommt an, bei > 2 nicht mehr.
for (uint8_t i = 0; i < arr_size; i++) {
mqtt_json[i]["wert1"] = 12;
mqtt_json[i]["wert2"] = "Hallo";
mqtt_json[i]["wert3"] = "Welt";
mqtt_json[i]["wert4"] = 13;
mqtt_json[i]["wert5"] = "Hallo";
mqtt_json[i]["wert6"] = "Welt";
mqtt_json[i]["wert7"] = 14;
}
char buffer[2000];
// Der Array oben ergibt 1942 Zeichen, Buffer sollte also ausreichen...
serializeJson(mqtt_json, buffer);
// Der JSON-String wird korrekt erzeugt
Serial.println("Ausgabe JSON-String:");
Serial.println(buffer);
// Aber die Message kommt nicht an (nur wenn der Array eine gewisse Größe unterschreitet)
client.publish(mqtt_topic, buffer);
}
boolean mqtt_reconnect() {
if (client.connect("meinEsp32_1234", mqtt_username, mqtt_password)) {
client.subscribe(mqtt_topic);
}
return client.connected();
}
void loop() {
//
}
Sind knapp 2000 Zeichen schlicht und einfach zuviel um per MQTT übertragen werden zu können?
Grüßle
Daniel