NodeMCU Datenbank INSERT Timeout

Ich versuche inzwischen seit drei Stunden verzweifelt einen direkten Datenbank INSERT mit dem NodeMCU v3 und dem MySQL Connector. Als Basis habe ich den Beispiel Sketch "basic_insert_esp8266" genommen. Leider bekomme ich immer ein Timeout beim Schreiben in die Datenbank.

Connected to network
My IP address is: 192.168.178.170
Connecting to SQL... ...trying...
ERROR: Timeout waiting for client.
Error: -1 = FAILED.

Dies passiert sowohl beim Verbinden mit der mysql Datenbank auf meinem Qnap als auch über xampp auf meinem PC. Der INSERT selbst scheint soweit in Ordnung und wurde per SQL direkt in der Datenbank geprüft. Ich hoffe ihr habt noch eine Idee, wo ich ansetzen kann.
Hier noch der Code:

#include <ESP8266WiFi.h>           // Use this for WiFi instead of Ethernet.h
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

IPAddress server_addr(192,168,178,10);  // IP of the MySQL *server* here
char user[] = "arduino";              // MySQL user login username
char password[] = "heutrocknung";        // MySQL user login password

// Sample query
char INSERT_SQL[] = "insert into tbl_Sensoren (id, temperatur, druck, luftfeuchtigkeit, sensor, node, Timestamp) values(NULL, '1', '2', '3', 'BMP280', '1', now())";

// WiFi card example
char ssid[] = "WLAN";         // your SSID
char pass[] = "PASS";     // your SSID Password

WiFiClient client;                 // Use this for WiFi instead of EthernetClient
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;

void setup()
{
  Serial.begin(115200);
  while (!Serial); // wait for serial port to connect. Needed for Leonardo only

  // Begin WiFi section
  Serial.printf("\nConnecting to %s", ssid);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  // print out info about the connection:
  Serial.println("\nConnected to network");
  Serial.print("My IP address is: ");
  Serial.println(WiFi.localIP());

  Serial.print("Connecting to SQL...  ");
  if (conn.connect(server_addr, 3306, user, password))
    Serial.println("OK.");
  else
    Serial.println("FAILED.");
  
  // create MySQL cursor object
  cursor = new MySQL_Cursor(&conn);
}

void loop()
{
  if (conn.connected())
    cursor->execute(INSERT_SQL);

  delay(5000);
}

Welche Host-Rechte hat der DB-User auf Deiner Zieldb?

Gruß Tommy

Dem habe ich zu Testzwecken alle Rechte gegeben, die möglich waren.

Edit: Leider auch das gleiche Ergebnis mit root und einem höher gesetztem Timeout der DB

Du hast die Frage nicht verstanden. Nochmal: Was steht im Feld host beim User?

Gruß Tommy

Sorry, Stand auf dem Schlauch. :roll_eyes:

arduino'@'%

Freigegeben für jeden Host. Das hatte ich auch schon versucht. Hab auch die ip auf die ip vom Arduino geändert mit dem gleichen Ergebnis.

starfire_arduino:
Leider bekomme ich immer ein Timeout beim Schreiben in die Datenbank.

Du bekommst schon keinen connect.
192.168.178.x -> Fritz.box?
Kannst Du ausschliessen, das die Dir da reinfummelt?
Stimmen username/pw? Groß-/Kleinschreibung?

Ich bin noch mal einen Schritt weiter gekommen. Ein Fehler war ganz Banal. Es fehlte schicht der Datenbankname im INSERT. Jetzt schreibt er Daten in die Datenbank, sobald er das aber gemacht hat bekomme ich wieder den Timeout.

Connecting to SQL... ...trying...
Connected to server version 5.5.57-MariaDB
OK.
ERROR: Timeout waiting for client.
Erfolgreicher Eintrag
Verbindung fehlgeschlagen

Der Fehler tritt offenbar am cursor->execute(INSERT_SQL); auf. Dabei beendet er die Verbindung zur DB.

Ist jetzt kein Weltuntergang, schließlich habe ich die Verbindung und die Daten landen in der DB, aber schön ist es trotzdem nicht den Grund für den Timeout zu haben...

Hast Du die aktuelle Version?
Evtl. steht Dir das delay(5000) im Wege.

Ich führe Statements so aus und hatte noch nie Probleme.

boolean exec(char *stmt, boolean progmem=false) {
boolean res;
  MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
  res = cur_mem->execute(stmt, progmem);
  delete cur_mem;
}

Gruß Tommy