Salve a tutti, sto sviluppando con un Arduino Mega 2560 un sistema di datalogger che trasmette i dati rilevati ad un server MySQL tramite una scheda Ethernet Shield e fino a quando c'è la rete tutto funziona correttamente.
Ho implementato il sistema sfruttando anche la microSD della Ethernet Shield per memorizzare in essa le query di INSERT che non dovessero andare a buon fine, e che invio successivamente quando la rete lo permette, e anche questo funziona perfettamente.
Problema: quando eseguo la funzione getHostByName() per la risoluzione del nome ci impiega esattamente 60 lunghi secondi per restituirmi l'errore nel caso non ci sia rete. Ho provato a mettere come terzo parametro del metodo getHostByName() un tempo inferiore senza alcun risultato.
Anche client.setConnectionTimeout(AttesaHost) non risolve il problema.
Qualcuno ha un'idea da suggerirmi?
Questo è il codice che utilizzo per connettermi al server.
bool ConnettiServer(bool verifica) {
Serial.print(F("Ricerca nome host... "));
Ethernet.begin(mac_addr);
dns_client.begin(Ethernet.dnsServerIP());
if (dns_client.getHostByName(hostname, server_ip) == 1) { // si ferma per 60 secondi
Serial.println(server_ip);
}
else {
Serial.println(F("non risolto"));
OkConnect = false;
return false;
}
Serial.print(F("Connessione... "));
OkConnect = conn.connect(server_ip, 3306, user, password);
if (OkConnect) Serial.println(F("Ok"));
else Serial.println(F("fallita"));
if (verifica) conn.close();
return OkConnect;
}
p.s. per provare a disconnettere la rete la stacco fisicamente il cavo Ethernet dalla scheda.
Grazie a tutti.