[Risolto] Arduino UNO e Ethernet Shield W5100: non funziona

Salve a tutti, sono nuovo nel forum Arduino.

Ho attacato un Ethernet Shield non originale ad Arduino UNO (originale).

Lo sketch che ho caricato è questo:

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

//DETERMINA IL MAC E L'IP DELLA PAGINA WEB
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; 
byte ip[] = {
  192, 168, 1, 75};

//PORTA DI COMUNICAZIONE 
EthernetServer server(272);

//SCRIVE IL NUMERO DI PIN CORRISPONDENTE AI LED
int ledPin1 = 9; 
int ledPin2 = 8;

//LUNGHEZZA DELLA STRINGA INVIATA
String readString = String(30);

//IMPOSTA ALL'AVVIO I LED SPENTI
boolean LEDON1 = false; 
boolean LEDON2 = false; 

void setup(){
  Ethernet.begin(mac, ip);
  pinMode(ledPin1, OUTPUT);  
  pinMode(ledPin2, OUTPUT); 
  Serial.begin(9600);
}

void loop(){
  EthernetClient client = server.available();
  if (client) //SE ESISTE UN CLIENTE
  {
    while (client.connected()) // SE IL CLIENTE E' CONNESSO
    {
      if (client.available()) //SE E' TUTTO OK PER INIZIARE
      {
        char c = client.read(); //LEGGI I SINGOLI CARATTERI INVIATI
        if (readString.length() < 100) 
        {
          readString += c; //CONCATENA I CARATTERI
        }  
        if (c == '\n') //VEDE SE C'E' IL CARATTERE DI FINE STRINGA, PER INDIVIDUARE CHE E' FINITA
        {
          if(readString.indexOf("L1=1") > 0) //IMPOSTA UNA VARIABILE DI TIPO BOLEANA (VERO-FALSO) PER GLI STATI DEL LED
          {
            LEDON1 = true;
          } 
          else if (readString.indexOf("L2=1") > 0) 
          {
            LEDON2 = true;             
          }
          else if(readString.indexOf("L1=0") > 0)
          {
            LEDON1 = false;
          } 
          else if (readString.indexOf("L2=0") > 0) 
          {
            LEDON2 = false;             
          }

          //CREA LA PAGINA HTML (VERRA' AGGIORNATA AD OGNI ISTRUZIONE NUOVA)
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
          client.println("<html><head><link rel='icon' href='/favicon.png' type='image/png' /><title>Arduino UNO WebServer</head><body>");
          //TITOLO LED 1
          client.println("<h1>Led 1</h1>");

          //OPERAZIONI DA FARE QUANDO SI CLICCA PER ATTIVARE LEDON1:  
          if (LEDON1) { 
            digitalWrite(ledPin1, HIGH);   
            client.println("Stato: ON
");
          } 
          else {

            //OPERAZIONI DA FARE QUANDO SI CLICCA PER SPEGNERE LEDON1:  
            digitalWrite(ledPin1, LOW ); 
            client.println("Stato: OFF
"); 
          }

          //CREA I PULSANTI RELATIVI A LED1    
          client.println("<a href='?L1=0'>SPEGNI</a>");
          client.println("<a href='?L1=1'>ACCENDI</a>");

          //INSERISCE IL DIVISORE
          client.println("
______________________________
");

          //TTOLO LED2
          client.println("<h1>Led 2</h1>");

          //OPERAZIONI DA FARE QUANDO SI CLICCA PER ATTIVARE LEDON2:  
          if (LEDON2) { 
            digitalWrite(ledPin2, HIGH);  
            client.println("Stato: ON
"); 
          } 
          else { 

            //OPERAZIONI DA FARE QUANDO SI CLICCA PER SPEGNERE LEDON2:    
            digitalWrite(ledPin2, LOW); 
            client.println("Stato: OFF
"); 
          } 

          //CREA I PULSANTI RELATIVI A LED2
          client.println("<a href='?L2=0'>SPEGNI</a>");
          client.println("<a href='?L2=1'>ACCENDI</a>");

          //CHIUDE I TAG HTML PER LA PAGINA
          client.println("</body></html>");

          //SI PREPARA PER UNA NUOVA ISTRUZIONE
          readString="";

          //TERMINA LE OPERAZIONI CLIENTE
          client.stop();
        }
      }
    }
  }
}

Provando a digitare l'IP nel browser mi dice che la pagina web non è disponibile, mentre facendo un ping dell'indirizzo esce scritto:

Esecuzione di Ping 192.168.1.75 con 32 byte di dati:
Risposta da 192.168.1.8: Host di destinazione non raggiungibile.
Risposta da 192.168.1.8: Host di destinazione non raggiungibile.
Risposta da 192.168.1.8: Host di destinazione non raggiungibile.
Risposta da 192.168.1.8: Host di destinazione non raggiungibile.

Statistiche Ping per 192.168.1.75:
    Pacchetti: Trasmessi = 4, Ricevuti = 4,
    Persi = 0 (0% persi)

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:

Sei sicuro che il 192.168.1.75 è libero ? Il 192.168.1.8 è per caso il router ?
Prova a scaricarti NetScan per Windows, è free e dagli dal PC 192.168.1.1 fino a 192.168.1.255
ti da un elenco di tutto quello che trova
Indirizzo: SoftPerfect Network Scanner : fast, flexible, advanced

L'indirizzo del router è 192.168.1.1 e il software che mi hai consigliato mi dice che gli unici indirizzi occupati
sono:
192.168.1.2
192.168.1.7
192.168.1.8

Quando mi connetto dal browser all'indirizzo di arduino i led RX e TX lampeggiano ma il browser dice che la pagina web non è disponibile

Strano che pingando il .75 risponde il .8
Ma quelli .2 .7 e .8 chi sono ?

Allora il .2 dovrebbe essere il mio computer desktop, .7 il mio iPod e .8 è il notebook con cui di solito faccio i progetti arduino.

Ho provato anche con il codice che c'è di esempio nell'IDE ma ottengo lo stesso risultato

Ma la subnet? Si può impostare anche lei tramite sketch?

Perchè, la subnet si può impostare anche tramite sketch?

SI, puoi scrivere, per configurare completamente la scheda, così:

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

IPAddress ip(192, 168, 1, 75);
IPAddress gateway(192, 168, 1, 1);
IPAddress subnet(255, 255, 255, 0);
...

Guglielmo

Ho provato con la configurazione che mi ha detto Guglielmo e aggiungendo all'Ethernet.begin il gateway e la subnet quindi ottendo questa struttura

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

Però il risultato è lo stesso

... non ho affermato che fosse la soluzione :smiley:

Avete chiesto se il subnet si poteva configurare e ho spiegato come configurare le varie voci ... :wink:

Guglielmo

... una domanda banale, ma lo shield ethernet a cosa lo hai connesso? Ad una porta del router spero ... ::slight_smile:

Guglielmo

Sì l'ho collegato al router, non sono mica stupido!
La luce del router corrispondente alla porta di Arduino è accesa

LoadDuinoUNO:
Sì l'ho collegato al router, non sono mica stupido!

Supposizione del tutto arbitraria, nessuno lo pensa ...

... è che varie volte ci sono stati utenti che collegavano la scheda direttamente ad una porta Ethernet del PC, senza cavo crossed e ... non credo che lo shield sia autosense ::slight_smile:

Guglielmo

Toccando il chip W5100 dello shield Ethernet vedo che è molto caldo, è un segno negativo?

LoadDuinoUNO:
Ho provato con la configurazione che mi ha detto Guglielmo e aggiungendo all'Ethernet.begin il gateway e la subnet quindi ottendo questa struttura

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

Però il risultato è lo stesso

Inizializzazione errata.
I paramtetri sono: mac, ip, dns, gateway.
Se vuoi passare la subnet devi inizializzare con 5 parametri.
--> mac, ip, dns, gateway, subnet
puoi mettere dns e gateway uguali
--> mac, ip, gateway, gateway, subnet

-> Ethernet - Arduino Reference

Ho provato a dargli 5 parametri come mi ha detto Paolo ma il risultato è lo stesso...
Poco fa ho provato con la parte SD dello shield e funzionava tutto corretamente!

Ora ho caricato temporaneamente il codice per il DHCP e l'indirizzo che risulta da questa configurazione è 0.0.0.0, potrebbe essere lo shield che sia rotto?

Controlla il cavo Ethernet.
E' collegato al Router o lo colleghi al PC?

L'ho collegato al router

Che versione dell'IDE stai usando?