MySQL Connector redet bei ArduinoJson mit

Hallo zusammen,
Mein NodeMCU hat im Moment zwei Hauptaufgaben:

  1. Kommunikation mit der MySQL Datenbank
  2. Wetter von OpenWeatherMap holen.

Jede Aufgabe für sich funktioniert, wenn ich aber beides erledigen lasse, stimmt etwas nicht so ganz.
Interessant sind die Ausgaben vom Serial Monitor. Wenn alles passt, sollte die Ausgabe in etwas so aussehen:

15:56:26.844 -> current_weather_main0  Clouds
15:56:26.844 -> current_weather_description0  Ein paar Wolken

So sieht es allerdings nur aus, wenn getWeather() VOR MySQLHandling() ausgeführt wird und danach die Ausgabe getriggert wird. Wird getWeather() und danach MySQLHandling() ausgeführt, bekomme ich:

15:50:08.745 -> current_weather_main0  X_TIMESTAMP(date)
15:50:08.745 -> current_weather_description0  ?

oder

19:16:38.404 -> current_weather_main0  rcalendaralldayallday?
19:16:38.404 -> current_weather_description0  llday?

Alle anderen Textausgaben (daily_weather_description zB) verhalten sich normal. Bei den beiden Fehlausgaben kann man sehen, dass dort Teile des SQL Queries bzw. der Antwort enthalten sind. Wie gesagt, die anderen Ausgaben sind fehlerfrei.
Den Fehler verursacht definitiv der Aufruf von MySQLHandling() in Zeile 186. Wenn ich den Aufruf auskommentiere, ist alles Fehlerfrei. Genau so auch wenn ich in MySQLHandling() ab Zeile 251 alles auskommentiere, also sobald cur_mem->execute(query) ausgeführt wird, kommt es zur Fehlausgabe.

Anbei auch der Code. Nicht relevante Abschnitte wurden entfernt.
#include <ESP8266WiFi.h>WiFiClient weatherclient;WiFiClient mysqlclient; - Pastebin.com ← Code leider zu groß fürs Forum

Ich weiß der Code wirkt recht unübersichtlich, aber ich kam noch nicht wirklich dazu aufzuräumen.
Ich hoffe ihr könnt mir trotzdem helfen.

q5ca5JSy.txt (19.8 KB)

Du kannst den Code als Attachment anhängen. Das Problem klingt nach einem Schreiben außerhalb der Arraygrenzen oder einem anderen Speicherproblem.

Gruß Tommy

Tommy56:
Das Problem klingt nach einem Schreiben außerhalb der Arraygrenzen oder einem anderen Speicherproblem.

Es hat den Anschein, aber wie kann ich den Speicherbereich vom MySQLCursor beeinflussen?

evtl. ist eine Deiner query-Variablen (query2?) zu kurz.

Gruß Tommy

Edit: Der Connector ist es nicht. Der ist bei mir 1,5 Jahre gelaufen

Hab grade auf 100 erhöht, leider auch keine änderung :confused:

Setze ihn hoch und lasse Dir jeweils die Längen der Zeichenketten ausgeben.
Es kann auch etwas anderes über Arraygrenzen hinaus schreiben. Solche Sachen sind sehr schwer zu finden. Von außen ist es fast unmöglich, es sei den es sind augenfällige Fehler.

Gruß Tommy

Hab ich gerade versucht:
query ist 88 Zeichen lang
und query2 34 ... :confused:

Hab ich gerade versucht:
query ist 88 Zeichen lang
und query2 34 ... :confused:

konnte auch feststellen, dass der Fehler nicht in den globalen Variablen ensteht, sondern dass der Json parser an sich bereits die Falschen Daten beinhaltet.

Hast Du mal den freien Speicher zwischendurch geprüft?

Serial.print("Free Heap: "); Serial.println(ESP.getFreeHeap());

Gruß Tommy

Habe die Zeile einige male in MySQLHandling() eingetragen. Der freie Speicher ist immer über 40.000