Dadurch wird kein Fehler mehr beim kompilieren angezeigt.
Allerding wird kommt im Programm jetzt eine Fehlermeldung:
ERROR: Timeout waiting for client.
Error: -1 = Connection failed.
ERROR: Class requires connected server.
Das Programm lief bisher einwandfrei!!!
Unter IE und HeidiSQL kann ich den SQL-Server mit dem User und Password öffnen.
Hier der Test-Skretch:
#include <MySQL_Connection.h>
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
// Data for WiFi access
const char* ssid = "***";
const char* pass = "***";
WiFiClient client;
IPAddress server_addr(192,168,178,33); // IP of the MySQL *server* here
char user[] = "***"; // MySQL user login username
char password[] = "***"; // MySQL user login password
MySQL_Connection conn((Client *)&client);
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println(F("Connected to the WiFi network"));
}
void loop() {
while (!Serial); // wait for serial port to connect
Serial.println("Connecting...");
if (conn.connect(server_addr, 3306, user, password)) {
delay(1000);
// You would add your code here to run a query once on startup.
}
else
Serial.println("Connection failed.");
conn.close();
delay(5000);
}
Ok, die verwende ich auch. Ich habe gerade mal einen Test mit einer DB bei meinem Provider gemacht, das funktioniert mit diesem Sketch:
#include <ESP8266WiFi.h>
#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>
WiFiClient client; // Use this for WiFi instead of EthernetClient
MySQL_Connection conn(&client);
MySQL_Cursor* cursor;
// <= 31 Zeichen
const char *ssid = "wlanSSID";
// >= 8 oder <= 63 Zeichen oder NULL
const char *password = "wlanPwd";
char stmt[256];
char dbuser[] = "DB-Username"; // MySQL user login username
char dbpassword[] = "DB-Passwort"; // MySQL user login password
char db[] = "Datenbankname"; // DB-Name
uint32_t lastMillis;
void setup() {
int counter = 0; // Counter für Verbindung zum WLAN
Serial.begin(115200);
Serial.println("\nStart");
WiFi.persistent(false);
// Betrieb als Station
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
// Wait for connection
while (WiFi.status() != WL_CONNECTED) {
delay (500);
Serial.print(".");
counter++;
if (counter > 100) {
Serial.println("Kein WLAN. Restart!");
ESP.restart();
}
}
Serial.print("\nConnected to ");
Serial.println(ssid);
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
IPAddress remote_addr;
if (WiFi.hostByName("DB-Server-name", remote_addr)) {
Serial.print("Remote-DB: ");
Serial.println(remote_addr);
}
Serial.println("\nConnecting to database . . .");
if (conn.connect(remote_addr, 3306, dbuser, dbpassword)) {
Serial.println("DB-Connection ok.");
delay(500);
}
else {
Serial.println("DB-Connection failed.");
delay(10000);
ESP.restart();
}
}
void loop() {
}
Das ergibt ein:
.......
Connected to ......
IP address: 192.168.178.28
Remote-DB: 178.254.0.226
Connecting to database . . .
...trying...
Connected to server version 5.7.24-0ubuntu0.18.04.1-log
DB-Connection ok.
Gruß Tommy
Edit: Ich habe gerade eine lokale DB angelegt, damit läuft es auch.
Ich hätte vermutet, das der schon vorher nicht auflöst.
IP-Adress ist die eigene, aber es fehlt an der Gegenstelle. Und die sollte rauskommen, auch wenn es später keinen Connect gibt.
@topgun-811
Also die Gegenseite mal nicht mit DNS auflösen sondern fest vergeben:
Bei seinem Sketch ist die IP (lokales Netz) angegeben.
Wenn sie nicht auflöst, steht bei mir 255.255.255.255 drin. Das sollte man an der Ausgabe sehen.
Ich habe meinen Testsketch jetzt per #define wahlweise auf den lokalen oder den remote DB-Server umstelbar gemacht. Durch einen Fehler dabei habe ich diese Ausgabe gesehen.