Go Down

Topic: Ethernet shield non viene vista all'interno del router (Read 588 times) previous topic - next topic

Enzo--

Dec 21, 2013, 01:40 am Last Edit: Dec 21, 2013, 09:10 am by UweFederer Reason: 1
Salve a tutti.
Sono in possesso della scheda arduino uno r3 con assemblata la scheda ethernet shield.
Il mio problema è che entrando nella configurazione interna del router  192.168.1.1, il dispositivo arduino non viene visto in nessuna porta lan.
Il router è un Thomson tg 585 . Con linea telefonica Telecom.
Però caricando lo schema che ora vi allego, posso comunque accedere ad un indirizzo web per poter far accendere 2 led e funziona tutto bene. Però se volessi usare questo sketch con ip pubblico per controllo remoto,non lo posso fare perchè non mi vede nulla collegato sulle lan apparte il pc che uso.
Allego lo sketch:
Code: [Select]
#include <SPI.h>
#include <Client.h>
#include <Ethernet.h>
#include <Server.h>

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

//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></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<br>");
         }
         else {

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

         //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("<br>______________________________<br>");

         //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<br>");
         }
         else {

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

         //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();
       }
     }
   }
 }
}


Questo è lo sketch che ho attualmente caricato sull'arduino.
Spero nei vostri utili aiuti ringraziando anticipatamente.
Saluti.
Enzo.

killrob

prova a cambiare le prime tre coppie del MAC con queste 04:18:D6 e dimmi se ti funziona

nid69ita

In teoria il MAC è inventato, l'importante è che non corrisponda ad una scheda che già c'e' nella LAN privata.

Non sò se questo risolve, ma io preferisco passare tutti i parametri di rete, anche gateway e subnet mask:
http://arduino.cc/en/Reference/ServerBegin
vedi l'esempio del sito Arduino.


my name is IGOR, not AIGOR

killrob

è vero che il MAC è inventato ma io mi sono imbattuto in alcuni apparati di rete che, se non comunicano con un apparato con un MAC "riconosciuto", non lo prendono in considerazione.
In questo caso il MAC per lo shield deve avere le prime tre coppie di un costruttore certificato e riconoscibile

nid69ita


In questo caso il MAC per lo shield deve avere le prime tre coppie di un costruttore certificato e riconoscibile

Grazie per la info.
Cosa si intende per riconoscibile? C'e' una regola da seguire?
my name is IGOR, not AIGOR

killrob

per riconoscibile intendo che deve essere riconducibile ad un costrututtore, se vai su questo link http://www.coffer.com/mac_find/ e digiti per esempio asus o acer o nvidia o chi preferisci, ti da le prime 3 coppie dell'indirizzo MAC utilizzato da loro, prime tre coppie che puoi utilizzare per arduino shield

Enzo--

Ciao a tutti.
Volevo informarvi che ho risolto semplicemente modificando l'indirizzo Mac .

killrob

hai messo le prime tre coppie che ti avevo indicato?

Enzo--

Ciao , si ho sostituito le prime lettere.
Grazie mille.

Go Up