Pages: 1 2 [3] 4   Go Down
Author Topic: Ethernet shield Question  (Read 2845 times)
0 Members and 1 Guest are viewing this topic.
Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao

veramente strano... ma se colleghi qualcos'altro al router funziona? Che so due PC connessi in rete locale?
Logged

lucadentella.it

(Italy)
Offline Offline
Full Member
***
Karma: 2
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Per adesso ho provato con dispositivi tipo convertitore USB/ETHERNET, oppure con un server video, sempre moduli configurabili, con indirizzi ip statici e vengono visti senza problemi; mi sono collegato anche con il portatile e anche in quel caso nessun problema.

Adesso ho riprovato con "arp -a" e funziona solo con switch collegato in cascata, visualizzandomi il mac della scheda, se poi collego lo shield al modem, l'arp è impossibile da trovare e la risposta del ping è "host non raggiungibile".

Se stacco lo switch, in cascata dopo che quest'ultimo è stato mappato dal modem e inserisco al suo posto lo shield, mi viene visto, ma  non devo spegnere niente, altrimenti è come se si smemorizzasse qualcosa nel modem e a quel punto dovrei "fregarlo", reinserendo lo switch, per poi toglierlo a "caldo" e così via...... da non credere eheh smiley-roll

Ciao
« Last Edit: February 05, 2012, 04:33:15 pm by matrix77 » Logged

Bergamo
Offline Offline
God Member
*****
Karma: 1
Posts: 663
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

sembra che per qualche motivo lo stack Ethernet non piaccia al tuo router... prova a cambiare il mac address che hai assegnato ad Arduino e vediamo...
Se metti una arp statica su PC digitando

arp -s <mac-address-arduino> <ip-arduino>

funziona?
Logged

lucadentella.it

Deep south of Italy
Offline Offline
Faraday Member
**
Karma: 7
Posts: 2961
The quieter you become, the more you can hear
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ma dai log del router non vedi nulla di strano?
Logged

(Italy)
Offline Offline
Full Member
***
Karma: 2
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

sembra che per qualche motivo lo stack Ethernet non piaccia al tuo router... prova a cambiare il mac address che hai assegnato ad Arduino e vediamo...
Se metti una arp statica su PC digitando

arp -s <mac-address-arduino> <ip-arduino>

funziona?
Ciao Luca, niente da fare:  "aggiunta alla voce arp non riuscita"

Questa cosa è un po' irritante, perchè significa che il chip d'interfacciamento ethernet dello shield, non garantisce il 100% di compatibilità coi

modem router, dal momento che svariati dispositivi connessi al mio modem, hanno funzionato, senza nessun problema.

Mi piacerebbe sapere a questo punto, quale alternativa si potrebbe scegliere, per avere un interfacciamento sicuro, allo stesso livello dei

prodotti venduti  "home consumer".

Ma dai log del router non vedi nulla di strano?
Salve Brain,

no, purtroppo è come se non esistesse lo shield collegato, ma ribadisco che la spia della LAN è accesa e lampeggia in concomitanza dello

shield stesso.

La cosa che non mi riesco a spiegare è del perchè, se inserisco in cascata lo switch, il mio modem lo "mappa", stacco lo

switch, collego lo shield al suo posto e da questo momento in poi, l'ip, risulta raggiungibile, salvo reset, di Arduino, o spegnimenti e

riaccensioni del modem, altrimenti si "smemorizza"questa ipotetica "mappatura" e addio indirizzo.... smiley-mad

Ciao
« Last Edit: February 06, 2012, 01:39:58 pm by matrix77 » Logged

(Italy)
Offline Offline
Full Member
***
Karma: 2
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao,
potresti fare questa prova?

Dovresti riabilitare il DHCP del router, compilare lo sketch qui sotto con l'IDE 1.0. Lanciandolo con l'Arduino collegato direttamente al router e aprendo il serial monitor dovresti vedere una serie di dati tra cui l'indirizzo ip, il gateway. (nella versione 1.0 dell'IDE è stato implementato il supporto del DHCP)
Lo sketch è quello riguardante il server NTP da me modificato per inviare altri dati sulla seriale. Una specie di piccolo debug.
Code:
#include <SPI.h>        
#include <Ethernet.h>
#include <EthernetUdp.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {  
  0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA };

unsigned int localPort = 8888;      // local port to listen for UDP packets

IPAddress timeServer(192, 43, 244, 18); // time.nist.gov NTP server

const int NTP_PACKET_SIZE= 48; // NTP time stamp is in the first 48 bytes of the message

byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets

// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

void setup()
{
  Serial.begin(9600);
  Serial.println("Arduino start!");
  // start Ethernet
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }
  else
  {
    Serial.println("Ethernet configured using DHCP");
    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());
  }
  if (Udp.begin(localPort) == 0) {
    Serial.println("No UDP sockets available");
    // no point in carrying on, so do nothing forevermore:
    for(;;)
      ;
  }  
  else
  {
    Serial.println("UDP sockets ON");
  }
}

void loop()
{
  Serial.println("Send Packet");      
  sendNTPpacket(timeServer); // send an NTP packet to a time server

    // wait to see if a reply is available
  delay(1000);  
  if ( Udp.parsePacket() ) {  
    // We've received a packet, read the data from it
    Udp.read(packetBuffer,NTP_PACKET_SIZE);  // read the packet into the buffer

    //the timestamp starts at byte 40 of the received packet and is four bytes,
    // or two words, long. First, esxtract the two words:

    unsigned long highWord = word(packetBuffer[40], packetBuffer[41]);
    unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);  
    // combine the four bytes (two words) into a long integer
    // this is NTP time (seconds since Jan 1 1900):
    unsigned long secsSince1900 = highWord << 16 | lowWord;  
    Serial.print("Seconds since Jan 1 1900 = " );
    Serial.println(secsSince1900);              

    // now convert NTP time into everyday time:
    Serial.print("Unix time = ");
    // Unix time starts on Jan 1 1970. In seconds, that's 2208988800:
    const unsigned long seventyYears = 2208988800UL;    
    // subtract seventy years:
    unsigned long epoch = secsSince1900 - seventyYears;  
    // print Unix time:
    Serial.println(epoch);                              


    // print the hour, minute and second:
    Serial.print("The UTC time is ");       // UTC is the time at Greenwich Meridian (GMT)
    Serial.print((epoch  % 86400L) / 3600); // print the hour (86400 equals secs per day)
    Serial.print(':');  
    if ( ((epoch % 3600) / 60) < 10 ) {
      // In the first 10 minutes of each hour, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.print((epoch  % 3600) / 60); // print the minute (3600 equals secs per minute)
    Serial.print(':');
    if ( (epoch % 60) < 10 ) {
      // In the first 10 seconds of each minute, we'll want a leading '0'
      Serial.print('0');
    }
    Serial.println(epoch %60); // print the second
  }
  // wait ten seconds before asking for the time again
  delay(10000);
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress& address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:  
  Udp.beginPacket(address, 123); //NTP requests are to port 123
  Udp.write(packetBuffer,NTP_PACKET_SIZE);
  Udp.endPacket();
}

Se funziona, prova poi a scollegare Arduino, ad inserire l'altro switch in cascata e riprovare... e poi anche con i PowerLan.
Ho anche io una Ethernet Shield e ogni tanto fa i capricci.

Paolo.
p.s. ho la UNO R3 e la Ethernet Shield R3 uso l'IDE 1.0
Salve Paolo e grazie per il tuo intervento...

Ho collegato direttamente lo shield al modem router e una volta caricato il tuo sketch in Arduino, ho potuto constatare che tramite serial monitor, si visualizza l'ip assegnato e una serie di send a ciclo infinito; ogni pacchetto trasmesso, viene evidenziato dal lampeggio dello shield e dalle spie di stato LAN del modem.Poi ho anche riprovato con lo switch in cascata collegandoci lo shield, ma sembra non funzionare.
A questo punto, il cerchio si stringe un po', o almeno credo, ma non riesco personalmente, a circoscrivere il problema.

Ciao e grazie ancora
« Last Edit: February 06, 2012, 03:58:22 pm by matrix77 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6573
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho collegato direttamente lo shield al modem router e una volta caricato il tuo sketch in Arduino, ho potuto constatare che tramite serial monitor, si visualizza l'ip assegnato e una serie di send a ciclo infinito; ogni pacchetto trasmesso, viene evidenziato dal lampeggio dello shield e dalle spie di stato LAN del modem.Poi ho anche riprovato con lo switch in cascata collegandoci lo shield, ma sembra non funzionare.
A questo punto, il cerchio si stringe un po', o almeno credo, ma non riesco personalmente, a circoscrivere il problema.

Ciao e grazie ancora
Lo sketch permette ad Arduino di richiedere al router un indirizzo IP tramite DHCP. Se lo hai ottenuto allora il router ha reagito ad una richiesta della scheda assegnando al'indirizzo MAC il primo indirizzo IP disponibile. Inoltre gli passa anche altri parametri come il gateway predefinito, in questo caso lo stesso indirizzo del router e la maschera di sottorete.
Inoltre se hai potuto visualizzare il tempo ricevuto del server NTP funziona anche il routing dei pacchetti trasmessi e ricevuti. Quindi il tuo router fa il router.
Collegando direttamente l'Arduino al router, nelle pagine web interne del router dovresti vedere elencato il MAC e l'IP dato all'Arduino.
Hai provato a richiamare le pagine del router dopo aver lanciato lo sketch?
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

(Italy)
Offline Offline
Full Member
***
Karma: 2
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho collegato direttamente lo shield al modem router e una volta caricato il tuo sketch in Arduino, ho potuto constatare che tramite serial monitor, si visualizza l'ip assegnato e una serie di send a ciclo infinito; ogni pacchetto trasmesso, viene evidenziato dal lampeggio dello shield e dalle spie di stato LAN del modem.Poi ho anche riprovato con lo switch in cascata collegandoci lo shield, ma sembra non funzionare.
A questo punto, il cerchio si stringe un po', o almeno credo, ma non riesco personalmente, a circoscrivere il problema.

Ciao e grazie ancora
Lo sketch permette ad Arduino di richiedere al router un indirizzo IP tramite DHCP. Se lo hai ottenuto allora il router ha reagito ad una richiesta della scheda assegnando al'indirizzo MAC il primo indirizzo IP disponibile. Inoltre gli passa anche altri parametri come il gateway predefinito, in questo caso lo stesso indirizzo del router e la maschera di sottorete.
Inoltre se hai potuto visualizzare il tempo ricevuto del server NTP funziona anche il routing dei pacchetti trasmessi e ricevuti. Quindi il tuo router fa il router.
Collegando direttamente l'Arduino al router, nelle pagine web interne del router dovresti vedere elencato il MAC e l'IP dato all'Arduino.
Hai provato a richiamare le pagine del router dopo aver lanciato lo sketch?

Salve Paolo,


Per adesso ti posso solo dire che ho visto l'assegnazione dell'indirizzo ip, con i dati relativi al gateway e all 'indirizzo ip del modem, per il resto, solo una serie infinita di trasmissioni (send packet) e basta.

Ciao
« Last Edit: February 08, 2012, 02:08:39 pm by matrix77 » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6573
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Strano, dopo gli indirizzi dovresti vedere la stampa dell'orario prelevato dal server NTP.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

(Italy)
Offline Offline
Full Member
***
Karma: 2
Posts: 171
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Strano, dopo gli indirizzi dovresti vedere la stampa dell'orario prelevato dal server NTP.
No purtroppo, magari riproverò, per avere una riconferma e posso fare anche uno screenshot, della videata.
Io ricordo solo il riepilogo dei dati relativi al modem e una serie di trasmissioni, senza nessun altro valore.

« Last Edit: February 08, 2012, 02:20:34 pm by matrix77 » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve a tutti.
Ho letto tutto il thread e non sono ancora riuscito a far dialogare in UDP lo shield collegandolo direttamente al PC con un cavo incrociato.

Cosa ho e come deve funzionare:
1) Arduino+Shield Ethernet (ufficiale) invia in UDP al mio PC sulla porta 4445 il pacchetto NTP
2) Sul PC ho creato un'applicazione con protocollo UDP in ascolto sulla porta 4445 che visualizza il pacchetto ricevuto.
3) Per testarne l'effettivo funzionamento ho creato un'altra piccola applicazione che invia in UDP da un PC ad un altro.

Le applicazioni UDP funzionano correttamente.


Lo sketch è UdpNtpClient modificato
Code:
#include <SPI.h>        
#include <Ethernet.h>
#include <EthernetUdp.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x58, 0x0B};
byte ip[] = { 192, 168, 0, 5 };
byte gateway[] = { 192, 168, 0, 1 };
byte subnet[] = { 255, 255, 255, 0 };

unsigned int localPort = 8888;      // local port to listen for UDP packets

IPAddress timeServer(192, 168, 0, 9); // destinatario: il mio PC

const int NTP_PACKET_SIZE= 48; // NTP time stamp is in the first 48 bytes of the message

byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packets

// A UDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

void setup()
{
  Serial.begin(9600);
  Serial.println("Inizializzo il protocollo seriale...OK.");
  // start Ethernet and UDP
  Serial.print("Inizializzo l'ethernet...");
  Ethernet.begin(mac, ip, gateway, subnet);
  Serial.println("OK.");
  Serial.print("Inizializzo il protocollo UDP...");
  Udp.begin(localPort);
  Serial.println("OK.");
  Serial.println("Tutti i protocolli di comunicazione sono pronti.");
}

void loop()
{
  Serial.print(millis());
  Serial.print(": send UDP packet to ");
  Serial.print(timeServer);
  sendNTPpacket(timeServer); // invia un pacchetto NTP
  // Aspetta 1 secondo prima di inviare un nuovo pacchetto
  delay(1000);
}

// send an NTP request to the time server at the given address
unsigned long sendNTPpacket(IPAddress& address)
{
  // set all bytes in the buffer to 0
  memset(packetBuffer, 0, NTP_PACKET_SIZE);
  // Initialize values needed to form NTP request
  // (see URL above for details on the packets)
  packetBuffer[0] = 0b11100011;   // LI, Version, Mode
  packetBuffer[1] = 0;     // Stratum, or type of clock
  packetBuffer[2] = 6;     // Polling Interval
  packetBuffer[3] = 0xEC;  // Peer Clock Precision
  // 8 bytes of zero for Root Delay & Root Dispersion
  packetBuffer[12]  = 49;
  packetBuffer[13]  = 0x4E;
  packetBuffer[14]  = 49;
  packetBuffer[15]  = 52;

  // all NTP fields have been given values, now
  // you can send a packet requesting a timestamp:  
  unsigned int porta = 4445; // porta del ricevente
  Serial.print(":");
  Serial.print(porta);
  Serial.println(".");
  Serial.print("Beginning packet...");
  Udp.beginPacket(address, porta); //NTP requests are to port 4445
  Serial.println("OK");
  Serial.print("Write packet to destination host...");
  Udp.write(packetBuffer,NTP_PACKET_SIZE);
  Serial.println("OK");
  Serial.print("Ending packet...");
  Udp.endPacket();
  Serial.println("OK");
}

Avvio l'applicazione sul PC per mettermi in ascolto ed avvio lo sketch Arduino.
L'output dello sketch è questo
Code:
Inizializzo il protocollo seriale...OK.
Inizializzo l'ethernet...OK.
Inizializzo il protocollo UDP...OK.
Tutti i protocolli di comunicazione sono pronti.
329: send UDP packet to 192.168.0.9:4445.
Beginning packet...OK
Write packet to destination host...OK
Ending packet...

In teoria dovrei inviare un pacchetto al secondo e riceverne altrettanti dal PC.
Sul PC non ricevo niente
e da Arduino non va più avanti del primo ciclo.
Si ferma al comando Udp.endPacket(); e devo riavviare lo sketch. Ma ho sempre lo stesso risultato.
Non riesco nemmeno a pingare.
P.S.
Il cavo funziona e i led sulla shield lampeggiano.
« Last Edit: March 30, 2012, 06:28:09 am by tonywhite » Logged

Cagliari, Italy
Offline Offline
Tesla Member
***
Karma: 103
Posts: 6573
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Devi controllare cosa c'è dentro la funzione Udp.endPacket();.
Logged

Code fast. Code easy. Codebender --> http://codebender.cc/?referrer=PaoloP

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Devo entrare nei sorgente della libreria Ethernet?

Code: (arduino-1.0/libraries/Ethernet/EthernetUdp.cpp)
[...]
int EthernetUDP::endPacket()
{
  return sendUDP(_sock);
}
[...]
Logged

0
Offline Offline
Faraday Member
**
Karma: 39
Posts: 5609
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non centra nulla ma ti puo' far comodo in futuro, non servono piu' i cavi cross, tutte le schede di rete integrate nei pc, ormai da anni, sono autocross
Logged

- [GUIDA] IDE1.x - Nuove Funzioni - Sketch Standalone - Bootloader - VirtualBoard
http://arduino.cc/forum/index.php/topic,88546.0.html
- [LIBRERIA] ST7032i LCD I2C Controller Library
http://arduino.cc/forum/index.php/topic,96163.0.html

Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, perfetto... mi hai già evitato un bel po' di rogne! smiley-grin
Logged

Pages: 1 2 [3] 4   Go Up
Jump to: