ethernet shield non comunica con router

Ciao a tutti ho appena preso una ethernet shield ma il mio modem fastweb non riesce ad assegnargli un ip.
ho provato con vari sketch:

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 
 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xBE };
byte ip[] = { 
 192 ,168 ,1 ,150 };
byte gateway[] = { 
 192 ,168 ,1 ,254 };
byte subnet[] = { 
 255 ,255 ,255 ,0 };
EthernetServer server(80); 
String readString = String(30);

void setup(){
 delay(2000);
 Ethernet.begin(mac, ip, gateway, subnet);
 delay(1000);
 pinMode(5, OUTPUT);
 digitalWrite(5, LOW);
 Serial.begin(9600);
 Serial.print("Serial Start! at ");
 Serial.print(millis());
 Serial.println(" microsecond.");

 // Stampa dati Ethernet
 Serial.print("Local IP: ");
 Serial.println(Ethernet.localIP());
 Serial.print("SubnetMask: ");
 Serial.println(Ethernet.subnetMask());
 Serial.print("Gateway: ");
 Serial.println(Ethernet.gatewayIP()); 
 Serial.print("DNS Server: ");
 Serial.println(Ethernet.dnsServerIP());
} 

void loop(){
 EthernetClient client = server.available();
 if (client) {
   Serial.println("Client presente");
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       if (readString.length() < 30)
       {
         readString = readString + c;
       }
       if (c == '\n') {
         Serial.print(readString);
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();

         if(readString.startsWith("GET /?out=5&status=1"))
         {
           Serial.print("\n 5 HIGH \n");
           digitalWrite(5, HIGH);
           client.print("{\"status\" : \"1\" , \"out\" : \"");
           client.print(5);
           client.print("\"}");
         }
         if(readString.startsWith("GET /?out=5&status=0"))
         {
           Serial.print("\n 5 LOW \n");
           digitalWrite(5, LOW);
           client.print("{\"status\" : \"0\" , \"out\" : \"");
           client.print(5);
           client.print("\"}");
         }

         if(readString.startsWith("GET /?out=all"))
         {
           Serial.print("\n OUT ALL\n");
           client.print("{\"ip\" : \" 192.168.1.150\", ");
           client.print("\"devices\" : ");
           client.print("[{ \"type\" : \"light\", \"name\" : \"Led\", \"out\" : \"");
            client.print("5");
            client.print("\"}");
            client.print("]}");
         }
         readString="";
         client.stop();
       }
     }
   }
 }
}

l' output sulla seriale è
Serial Start! at 3300 microsecond.
Local IP: 0.27.27.27
SubnetMask: 0.0.0.0
Gateway: 0.0.0.0
DNS Server: 192.168.1.254

ma l' ip 0.27.27.27 non è quello da me definitoe cmq non è raggiungibile.
Il modem fastweb è adbb mod. dv2200, quindi quando entro nel menu admin vedo luce verde accesa ma nessun ip assegnato.
Grazie per l' aiuto

Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Con i parametri che dai, chiedi di darti un ip fisso. Magari il modem non è settato per farlo ma può solo dare un ip dinamico tramite dhcp.

Prova con solo Ethernet.begin(mac);
se funziona ottieni un ip dinamico dato dal router
"The DHCP version of this function, Ethernet.begin(mac), returns an int: 1 on a successful DHCP connection, 0 on failure. The other versions don't return anything."

tarata:
Ethernet.begin(mac, ip, gateway, subnet);

Errore.
Fai una ricerca sul forum o su google perché la soluzione l'ho scritta 8247 volte. :grin: :grin:
Comunque abbiamo notato una certa incompatibilità tra la shield e alcuni router. A volte non va e non si sa il perchè.

abbiamo notato una certa incompatibilità tra la shield e alcuni router. A volte non va e non si sa il perchè

dove lo abbiamo scritto? non mi ricordo

nid69ita:
Ti invitiamo a presentarti (dicci quali conoscenze hai di elettronica e di programmazione) qui: Presentazioni
e a leggere il regolamento se non lo hai già fatto: Regolamento
Qui una serie di link utili, non inerenti al tuo problema:

Il codice devi racchiuderlo nei tag code, vedi sezione 7 del regolamento, spiega bene come fare ( pulsante </> ).
Altrimenti parte del codice può essere visualizzata male o mancare perchè interpretato come attributo del testo stesso.

Fatto tutto

tarata:
Fatto tutto

Grazie e benvenuto.

nid69ita:
Con i parametri che dai, chiedi di darti un ip fisso. Magari il modem non è settato per farlo ma può solo dare un ip dinamico tramite dhcp.

Ethernet - Arduino Reference
Prova con solo Ethernet.begin(mac);
se funziona ottieni un ip dinamico dato dal router
"The DHCP version of this function, Ethernet.begin(mac), returns an int: 1 on a successful DHCP connection, 0 on failure. The other versions don't return anything."

fatto ma nada

#include <SPI.h>
#include <Ethernet.h>

// the media access control (ethernet hardware) address for the shield:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  


void setup()
{
 Ethernet.begin(mac);
}

void loop () {}

Possibile che mi blocco prima di iniziare?

Prova così

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xBE };
byte ip[] = {192 ,168 ,1 ,150 };
//byte gateway[] = {192 ,168 ,1 ,1 };
//byte subnet[] = {255 ,255 ,255 ,0 };
EthernetServer server(80);
String readString = String(30);

void setup(){
 delay(2000);
 Ethernet.begin(mac, ip);//, gateway, subnet);
 delay(1000);
 pinMode(5, OUTPUT);
 digitalWrite(5, 0);
 pinMode(10, OUTPUT); digitalWrite(10, 1);
 pinMode(4, OUTPUT); digitalWrite(4, 1);
 Serial.begin(9600);
 //Serial.print("Serial Start! at ");
 //Serial.print(millis());
 //Serial.println(" microsecond.");

 // Stampa dati Ethernet
 Serial.print("Local IP: ");
 Serial.println(Ethernet.localIP());
 //Serial.print("SubnetMask: ");
 //Serial.println(Ethernet.subnetMask());
 //Serial.print("Gateway: ");
 //Serial.println(Ethernet.gatewayIP());
 //Serial.print("DNS Server: ");
 //Serial.println(Ethernet.dnsServerIP());
}

void loop(){
....
....

quando entro nel menu admin vedo luce verde accesa ma nessun ip assegnato.

Non lo vedrai l'IP nel menù del router, non è una scheda di rete completa di software precaricato, manca il protocollo ARP.

Scusa dallo sketch che hai messo sopra, come fai a dire nada non funziona se non hai messo nemmeno un serial.print

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  

void setup(){
pinMode(10, OUTPUT); digitalWrite(10, 1);
 pinMode(4, OUTPUT); digitalWrite(4, 1);
 Ethernet.begin(mac);
Serial.print("Local IP: ");
 Serial.println(Ethernet.localIP());
}

void loop () {}

Se non funziona ancora, prova la tua ethernet con un altro router.
se va con un altro router significa che il router sofisticato vuole che le schede ad esso collegate supportino il servizio di broadcast

ipconfig

Configurazione IP di Windows

Scheda Ethernet Connessione alla rete locale (LAN):

Suffisso DNS specifico per connessione: lan
Indirizzo IPv6 locale rispetto al collegamento . : ***********
Indirizzo IPv4. . . . . . . . . . . . : 192.168.1.108
Subnet mask . . . . . . . . . . . . . : 255.255.255.0
Gateway predefinito . . . . . . . . . : 192.168.1.254

Scheda LAN wireless Connessione rete wireless:

Stato supporto. . . . . . . . . . . . : Supporto disconnesso
Suffisso DNS specifico per connessione:

Scheda Tunnel isatap.lan:

Stato supporto. . . . . . . . . . . . : Supporto disconnesso
Suffisso DNS specifico per connessione: lan

Scheda Tunnel Teredo Tunneling Pseudo-Interface:

Stato supporto. . . . . . . . . . . . : Supporto disconnesso
Suffisso DNS specifico per connessione:

Scheda Tunnel isatap.{18C99858-3030-442D-B5E5-25F3C8BB1704}:

Stato supporto. . . . . . . . . . . . : Supporto disconnesso
Suffisso DNS specifico per connessione:

ho provato

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xBE };
byte ip[] = {192 ,168 ,1 ,150 };
//byte gateway[] = {192 ,168 ,1 ,1 };
//byte subnet[] = {255 ,255 ,255 ,0 };
EthernetServer server(80);
String readString = String(30);

void setup(){
 delay(2000);
 Ethernet.begin(mac, ip);//, gateway, subnet);
 delay(1000);
 pinMode(5, OUTPUT);
 digitalWrite(5, 0);
 pinMode(10, OUTPUT); digitalWrite(10, 1);
 pinMode(4, OUTPUT); digitalWrite(4, 1);
 Serial.begin(9600);
 //Serial.print("Serial Start! at ");
 //Serial.print(millis());
 //Serial.println(" microsecond.");

 // Stampa dati Ethernet
 Serial.print("Local IP: ");
 Serial.println(Ethernet.localIP());
 //Serial.print("SubnetMask: ");
 //Serial.println(Ethernet.subnetMask());
 //Serial.print("Gateway: ");
 //Serial.println(Ethernet.gatewayIP());
 //Serial.print("DNS Server: ");
 //Serial.println(Ethernet.dnsServerIP());
}

void loop(){
 EthernetClient client = server.available();
 if (client) {
   Serial.println("Client presente");
   while (client.connected()) {
     if (client.available()) {
       char c = client.read();
       if (readString.length() < 30)
       {
         readString = readString + c;
       }
       if (c == '\n') {
         Serial.print(readString);
         client.println("HTTP/1.1 200 OK");
         client.println("Content-Type: text/html");
         client.println();

         if(readString.startsWith("GET /?out=5&status=1"))
         {
           Serial.print("\n 5 HIGH \n");
           digitalWrite(5, HIGH);
           client.print("{\"status\" : \"1\" , \"out\" : \"");
           client.print(5);
           client.print("\"}");
         }
         if(readString.startsWith("GET /?out=5&status=0"))
         {
           Serial.print("\n 5 LOW \n");
           digitalWrite(5, LOW);
           client.print("{\"status\" : \"0\" , \"out\" : \"");
           client.print(5);
           client.print("\"}");
         }

         if(readString.startsWith("GET /?out=all"))
         {
           Serial.print("\n OUT ALL\n");
           client.print("{\"ip\" : \" 192.168.1.150\", ");
           client.print("\"devices\" : ");
           client.print("[{ \"type\" : \"light\", \"name\" : \"Led\", \"out\" : \"");
            client.print("5");
            client.print("\"}");
            client.print("]}");
         }
         readString="";
         client.stop();
       }
     }
   }
 }
}

la seriale non stampa nulla il ping di 192.168.1.150 mi da Host di destinazione non raggiungibile.

ho provato

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  

void setup(){
pinMode(10, OUTPUT); digitalWrite(10, 1);
 pinMode(4, OUTPUT); digitalWrite(4, 1);
 Ethernet.begin(mac);
Serial.print("Local IP: ");
 Serial.println(Ethernet.localIP());
}
void loop () {}

la seriale non stampa nulla in ipconfig non mi da altri ip assegnati.

Nel lato admin del modem, nei dettagli della lan3 a cui arduino è connesso, nei dettagli non assegna un ip,ma mac address diverso da quello dell' etichetta dello shield.

ho letto un po di post credo che un router a cascata sia una soluzione ideale

Ok, grazie
Prima però di comprare un altro router da mettere in cascata, mi accerterei che quella scheda funzioni davvero.

pablos:
Ok, grazie
Prima però di comprare un altro router da mettere in cascata, mi accerterei che quella scheda funzioni davvero.

Concordo!

Comunque la discordanza dei mac address è strana, provato a "forzare" quello indicato nel modem fastweb?

Non me lo fa cambiare,la scheda ha tutti i led accesi e l act che lampeggia.esiste un modo per capire se la scheda funziona?

Grazie per l'interessamento ...

  • Te l'ho detto vai da un amico e attaccala al suo router un po' meno sofisticato
  • collegala al tuo pc con un cavo cross-over e fai un ping

ho l'impressione che non hai capito una riga di quello che abbiamo detto o forse non l'hai letto, o peggio non ti interessa ... forse ... dico forse .. l'unica cosa che ti interessa e che funzioni punto e basta ... ma ci vogliono piccoli passi ... uno alla volta.

per esempio

ho appena preso una ethernet shield

che significa? quale? modello? link? foto?
Hai letto il regolamento no? lì c'è scritto che porre una domanda significa dettagliare tutto ai minimi termini.

Quali led ... io ne ho 4 di leds ... RX, TX, L, e Power .. tu quanti ne hai? lampeggiano a ritmo di musica?

spiegati meglio, più dettagli dai più l'aiuto sarà mirato, non esiste un solo ed unico modello di ethernet

tarata:
Non me lo fa cambiare,la scheda ha tutti i led accesi e l act che lampeggia.esiste un modo per capire se la scheda funziona?

Ma se inserisci il mac address che rileva il modem fastweb nello sketch?

Prova a caricare l'esempio DhcpAddressPrinter (sta negli esempi della libreria Ethernet) e vedi che succede.

niente mi assegna il primo IP disponibile

My IP address: 192.168.2.103.

perchè a te non va?

Se a te non funziona potrebbe essere perchè il servizio DHCP della tua rete è disabilitato, in questo caso assegnalo tu a mano stando attento a rientrare nei parametri

Pablos hai messo una risposta che spettava all'altro thread. Il mio post qui riguardava il problema di dell'utente tarata