Scrivo due righe, così che possano essere d'aiuto se qualcuno dovesse avere le mie stesse esigenze.
Con l'IDE 1.0 la gestione dell' Ethernet.begin()è cambiata.
Attualmente supporta questi formati (dal forum internazionale):
void begin(uint8_t *mac_address, IPAddress local_ip);
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server);
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway);
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet);
Significa che se si specifica qualcosa oltre a mac address ed ip bisogna per forza mettere anche il dns.
Laddove non si abbia la possibilità basta replicare il gateway.
Per intenderci:
Ethernet.begin(mac,ip,gateway,gateway);
Oppure, nel caso si voglia indicare un dns (come OpenDNS ad esempio) l'inizializzazione completa diventa:
Ethernet.begin(mac,ip,dns,gateway,subnet);
Questo è fondamentale, se invertiamo le posizioni il dns verrà risolto con il gateway o la subnet a seconda.
Chiosando, nel caso si voglia implementare OpenDNS su IDE 1.0 il codice diventa:
/************ ETHERNET STUFF ************/
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,0,9); // IP in lan
IPAddress gateway(192,168,0,1); // Internet access via router
IPAddress subnet(255,255,255,0); // Subnet mask
IPAddress dns(208,67,222,222); // OpenDNS IP
char myserver[] = "google.com";
EthernetClient client; // initialize the library instance
void.setup () {
Ethernet.begin(mac,ip,dns,gateway,subnet);
server.begin();
}
Questo codice ha però un problema.
Specificando che il problema potrebbe dipendere dalla mia attuale configurazione (oltre al webclient con dns ho anche un web server sulla porta 84) la questione è la seguente.
Quando andate ad avviare il client:
if (client.connect(myserver, 80) ) {
Questo ritorna TRUE in ogni caso. Quando c'è la connessione internet, risolvendo correttamente il server name. Ma anche quando la connessione internet non c'è od addirittura il cavo ethernet è staccato.
Non ho ancora ben chiaro il motivo di ciò ma la soluzione dovrebbe essere la seguente.
if (client.connect(myserver, 80) && client.connected() ) {
Questo codice risolve il problema di cui sopra, regolarizzando il comportamento in connessione.
Porta inoltre un altro vantaggio.
Utilizzando il webclient senza dns, ovvero con la classe IPAddress myserver, il client.connect impiega anche 30 secondi a verificare la condizione qual ora non via sia connessione.
Utilizzando client.connect && client.connected il tempo di verifica si riduce a quasi la metà.