Arduino uno rev3 + Ethernet shield v2.0 w5200 (seeedsstudio)

Buonasera a tutti.
Ho un problema con l'hardware in oggetto.. Non riesco a collegare Arduino in rete.
Ho comperato di recente la Ethernet Shied (....purtroppo mi è arrivata non quella ufficiale Arduino ma quella SeeedStudio che mi pare non sia w5100 come quella Arduino ma W5200) e vorrei inserirla su arduino uno
Ho cercato info in rete ma niente.. ho provato mille sketch ma niente..
mi sapreste aiutare? il mio intento è che collegandomi all'IP dell'arduino riesca a vedere alcuni ingressi analogici e poter comandare 4 uscite ma , come dicevo, non riesco nemmeno a collegarlo in rete.. sulla shield non è presente nessun adesivo che mi indichi il mac address della scheda ethernet..
Mi sapreste indicare se serve caricare qualche libreria in particolare per questa shiled o va bene la <Ethernet.h> ?
Grazie in anticipo per l'aiuto.

Il mio Gateway è 192.168.1.1
Subnet 255.255.255.0

Longiarduino

basta andare sul sito seed studio e trovare il prodotto
http://www.seeedstudio.com/depot/w5200-ethernet-shield-p-1577.html?cPath=19_17

scoprire che c'è una pagina wiki dedicata con spiegato l'utilizzo della shield

e cosi si trova la libreria dedicata a questa shield
http://www.seeedstudio.com/wiki/images/d/d3/W5200_Ethernet_Shield_Library.zip

.. perfetto.... ora funziona... ho caricato un esempio di quelli proposti e funziona...
ed il bello è che ero andato a cercare sul sito del produttore della scheda..
ma d'altronde lo avevo detto... "di Inglese ci capisco poco o niente..e questo mi penalizza".. :smiley: :smiley:
Un altro aiutino.. ora non ho capito bene ma non ho capito se questa scheda "mi occupa alcuni Pin I/O dell'Arduino che quindi non posso utilizzare .. o ho capito male?
Se io poi volessi modificare la pagina internet che mi appare è possibile farlo?
ora vedo se riesco ad integrare il comando di alcune uscite..

Grazie dell'aiuto e confido ancora in voi per le altre integrazioni..
bye

LongiarDuino:
Un altro aiutino.. ora non ho capito bene ma non ho capito se questa scheda "mi occupa alcuni Pin I/O dell'Arduino che quindi non posso utilizzare .. o ho capito male?

Esatto, hai capito bene ... come descritto nella pagina wiki dedicata, la scheda usa i seguenti pin :

4 : SD card chip select
10: W5200 Chip Select
11: SPI MOSI
12: SPI MISO
13: SPI SCK

... che quindi tu NON puoi usare per altre cose :wink:

Guglielmo

Perfetto... grazie per la conferma... da gnorry pensavo si collegava tramite il protocollo ICSP.. :grin:

Stavo già per cantar vittoria troppo presto..
ho trovato un problemino..
Dunque.. tutto funziona se nel IDE Arduino (anche con sketch vuoto) apro il monitor seriale.. altrimenti niente..
Riassumendo:
Ho caricato su Arduino questo Sketc :

#include <SPI.h>
#include <EthernetV2_0.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);
#define W5200_CS  10
#define SDCARD_CS 4

void setup() {
 // Open serial communications and wait for port to open:
Serial.begin(9600);
 pinMode(SDCARD_CS,OUTPUT);
 digitalWrite(SDCARD_CS,HIGH);//Deselect the SD card
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
 Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          

          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          client.println("<body bgcolor='gray'>");
         client.println ("<div class='dim'><h1>- LongiArduino - </h1>");
         client.println("
");
          client.println("  Prova di visione sensori a distanza");
          client.println("
"); 
          client.println("- - - - - - - - - - - - - - - - - - - - - -");
          client.println("
"); 
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("  Canale analogico ");
            client.print(analogChannel);
            client.print(" Misura ");
            client.print(sensorReading);
            client.println("
");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
   Serial.println("client disonnected");
  }
}

se poi apro Monitor seriale, lasciando quindi collegato il cavo USB, e successivamente su Internet Explorer vado all'indirizzo 192.168.1.177 mi trovo questa pagina che si aggiorna dopo 5 sec. (vedere allegato "WEB").

Poi ho provato a disconnettere Arduino, lo collego ad un altra alimentazione 12V DC, vado su un PC e ridigito lo stesso indirizzo web..non va..
Allora ho provato a ricollegare Arduino allo stesso PC su dal quale l'ho programmato senza però aprire il Software di programmazione, vado all'indirizzo Web.. ma niente..
Allora ho provato ad aprire il software..ma ancora niente..
Apro allora il Monitor seriale...e... funziona..anche interrogandolo da altri PC o cellulari..mi compaiono le misure..
Ho riprovato per conferma ristaccandolo dall'USB, chiudo il software, lo ricolllego all' USB, lo interrogo da cellulare ma niente, apro il software ma niente, apro il monitor seriale e mi compare sulla seriale " server is at 192.168.1.177" e da lì in avanti funziona..
Sembra quasi che per connettersi aspetti qualcosa sulla sua seriale..
dove potrebbe essere il problema..
Se poi esco da Monitor seriale e chiudo il software..continua a funzionare.. logicamente non posso togliere il cavo USB altrimenti si spegne essendo alimentato da lì.. ogni tanto "va in palla" se lo interrogo contemporaneamente da più PC ma questo è il "male minore"..
Ah dimenticavo.. nella scheda SD non ho inserito nessuna SD per ora..

Ciao

WEB.JPG

Dal sito dicono di collegarla la SD, visto che anche nello sketc la inizializzi.

  1. Mount Ethernet Shield v2.0 to your Arduino;
  2. Connect the shield to your computer or a network hub or a router with a standard Ethernet cable;
  3. Connect Arduino to PC via USB cable;
  4. Insert an SD card to the SD card slot.

In fondo alla pagina wiki parlano di un Bug nelle tracce, e dicono di interrompere quella che fanno vedere, magari è quella che crea delle anomalie.

Mmmm ... hai molte chiamate Serial.xxxxx() che, appunto, si aspettano un collegamento seriale funzionante (il tuo monitor seriale aperto) ... non vorrei che qualcuna, non trovando con chi parlare ... creasse il problema ... :roll_eyes:

Fai una rapida prova, commenta le righe in cui trovi Serial.xxxxx() e riprova (... tanto, se non hai il monitor seriale aperto ... il debug via seriale non serve a nulla) :wink:

Guglielmo

P.S. : Cortesemente, edita il tuo post ... il codice NON si racchiude tra i tag QUOTE, ma tra i tag CODE (è il bottone # a fianco di quello che hai usato per mettere il tag QUOTE). Grazie.

Ok grazie, provo a modificare il Post. Avevo usato direttamente la funzione del software di programmazione "Copia per il forum".
Per ora non riesco a recuperare una SD (più avanti la prenderò perché poi implementerei una funzione tipo DataLogger se riesco a capire come farla.. :P), magari per ora provo a "commentare" come suggeritomi..magari direttamente anche il Serial Begin provo a commentare .
Se non va magari interrompo quella pista. .... aia aia aia... filo e saldatore alla mano...
Grazie ancora

LongiarDuino:
Per ora non riesco a recuperare una SD (più avanti la prenderò perché poi implementerei una funzione tipo DataLogger se riesco a capire come farla..

Non credo che con il problema che stai incontrando la SD o le piste da tagliare c'entrino qualche cosa ... :wink:

LongiarDuino:
magari per ora provo a "commentare" come suggeritomi..magari direttamente anche il Serial Begin provo a commentare .

NON solo il Serial.begin(), ma TUTTE le chiamate a Serial ( Serial.print(), Serial.println(), Serial.write() ) ... ne hai un bel po' nel codice !

Guglielmo

Ciao Guglielmo, si intendevo tutte quelle che fanno riferimento al Serial, ma nulla da fare ugualmente.
La pista indicata nel Wiki era già stata tagliata (probabilmente il rivenditore), ora prova con un'altra shield identica (anche lei tagliata).. poi se no va..bho.. strano che nessun'altro ha mai riscontrato il mio stesso problema.. sarà qualcosa che mi sfugge..

Ciao

LongiArduino

Potresti pubblicare il codice in cui hai eliminato la Serial (copia e incolla ... così siamo sicuri) ... così cerchiamo di ricontrollarlo assieme ... perché è veramente strano come comportamento ...

Guglielmo

Ciao, ho provato a cambiare shield ma ho avuto lo stesso risultato.. da un lato mi tranquillizza ..2 schede su 2 guaste mi pare strano..più probabile sia un altro il problema..si però quale..? :~

#include <SPI.h>
#include <EthernetV2_0.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);
#define W5200_CS  10
#define SDCARD_CS 4

void setup() {
 // Open serial communications and wait for port to open:
 // Serial.begin(9600);
// Serial.read();
 pinMode(SDCARD_CS,OUTPUT);
 digitalWrite(SDCARD_CS,HIGH);//Deselect the SD card
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
//  Serial.print("server is at ");
//  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  EthernetClient client = server.available();
  if (client) {
  //  Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
    //    Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          

          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          client.println("<body bgcolor='gray'>");
         client.println ("<div class='dim'><h1>- LongiArduino - </h1>");
         client.println("
");
          client.println("  Prova di visione sensori a distanza");
          client.println("
"); 
          client.println("- - - - - - - - - - - - - - - - - - - - - -");
          client.println("
"); 
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("  Canale analogico ");
            client.print(analogChannel);
            client.print(" Misura ");
            client.print(sensorReading);
            client.println("
");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
 //   Serial.println("client disonnected");
  }
}

.. ho un amico con Arduino2... quasi quasi me lo faccio portare e potrei provare anche con quello...

EDIT : il 2 non "digerisce" la libreria Ethernet di questo modello di shield... bho.. devo risolver con il mio.. come non so..

:~ :~ :~

Allora, mi sembra di capre che stai usando il loro esempio "WebServer", giusto ?

Mi confermi che, anche alimentato in tutto tramite USB, non funziona nulla se non apri il monitor seriale ?

Se SI, puoi fare una prova ? Alimenta tramite USB, poi, senza scollegarla, pigia il tasto di "reset" di Arduino, aspetta qualche secondo e prova ...

L'apertura del monitor seriale effettua un reset ... visto mai c'entri qualche cosa ... :roll_eyes:

Certo che è uno strano comportamento ...

Guglielmo

Ho provato a cercare informazioni sul forum Seedsstudio..

http://www.seeedstudio.com/forum/viewtopic.php?f=23&t=4978
..bho... non ho capito più di tanto.. :~

ma poi ho trovato (sempre nel forum) anche questa frase "seeedstudios products sucks!!!i will never buy seeedstudios products in my life!"

questa l'ho capita.. :stuck_out_tongue:
Non vorrei che il problema sia proprio il modello di scheda..

Non sono d'accordo, SeedStudio ha sicuramente tutta una serie di ottimi prodotti ... questo personalmente non l'ho mai provato, ma ne ho usati con soddisfazione molti altri :wink:

Hai provato la cosa che ti ho detto al post precedente ? Risultati ?

Guglielmo

Allora, mi sembra di capre che stai usando il loro esempio "WebServer", giusto ?

Mi confermi che, anche alimentato in tutto tramite USB, non funziona nulla se non apri il monitor seriale ?

Se SI, puoi fare una prova ? Alimenta tramite USB, poi, senza scollegarla, pigia il tasto di "reset" di Arduino, aspetta qualche secondo e prova ...

L'apertura del monitor seriale effettua un reset ... visto mai c'entri qualche cosa ... smiley-roll

Certo che è uno strano comportamento ...

Guglielmo

:slight_smile: :slight_smile: siiiiiiiii…Grazie grazie grazie... ho provato a fare il reset e funziona... ho provato 4 o 5 volte per sicurezza.. farlo solo una pensavo potesse essere un caso che andasse.. :slight_smile: :).. allora a sto punto mi servirebbe inserire un reset automatico al momento in cui riceve alimentazione ..sempre che sia fattibile.. magari nel codice..se entro tot secondi non si connette deve resettarsi....

Mmm, allora è probabilmente un problema di tempi ...
... prova un po' a rallentare la fase iniziale ...

Ethernet.begin(mac, ip);
delay(1000);
server.begin();
delay(1000);

... se va prova, uno alla volta, a calarli fino a quando non trovi il valore minimo che non ti da problemi ... :wink:

Guglielmo

Ti ringrazio, ora sono fuori casa e anche domani.
Appena possibile provo e vi faccio sapere.
Ciao, grazie

LongiArduino

Buonasera a tutti, ho provato con il seguente codice .

#include <SPI.h>
#include <EthernetV2_0.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = { 
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,177);

// Initialize the Ethernet server library
// with the IP address and port you want to use 
// (port 80 is default for HTTP):
EthernetServer server(80);
#define W5200_CS  10
#define SDCARD_CS 4

void setup() {
 // Open serial communications and wait for port to open:
 // Serial.begin(9600);
// Serial.read();
 pinMode(SDCARD_CS,OUTPUT);
 digitalWrite(SDCARD_CS,HIGH);//Deselect the SD card
  // start the Ethernet connection and the server:
  delay(1000);
  Ethernet.begin(mac, ip);
  delay(2000);
  server.begin();
  delay(2000);
//  Serial.print("server is at ");
//  Serial.println(Ethernet.localIP());
}


void loop() {
  // listen for incoming clients
  delay(500);
  EthernetClient client = server.available();
  delay(500);
  if (client) {
  //  Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
    //    Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          

          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connnection: close");
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
                    // add a meta refresh tag, so the browser pulls again every 5 seconds:
          client.println("<meta http-equiv=\"refresh\" content=\"5\">");
          // output the value of each analog input pin
          client.println("<body bgcolor='gray'>");
         client.println ("<div class='dim'><h1>- LongiArduino - </h1>");
         client.println("
");
          client.println("  Prova di visione sensori a distanza");
          client.println("
"); 
          client.println("- - - - - - - - - - - - - - - - - - - - - -");
          client.println("
"); 
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("  Canale analogico ");
            client.print(analogChannel);
            client.print(" Misura ");
            client.print(sensorReading);
            client.println("
");       
          }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        } 
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
 //   Serial.println("client disonnected");
  }
}

ma niente da fare.. :drooling_face:

Ciao,
dato che, una volta alimentato, se fai reset a mano funziona, è probabilmente un problema di tempi che occorrono a quello shield per andare "up" ...

Dato che il colloquio con la shield inizia qui :

delay(1000);
Ethernet.begin(mac, ip);

... io farei una veloce prova ad aumentare quel delay, a 3, 4 secondi ... anche 5 e vedere come si comporta. Se anche così non va ... è un bel problema ... :roll_eyes:

Guglielmo