Pages: [1] 2   Go Down
Author Topic: Ethernet shield + Dyndns, non sempre funzionante  (Read 1061 times)
0 Members and 1 Guest are viewing this topic.
provincia di Forlì
Offline Offline
Full Member
***
Karma: 0
Posts: 119
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salve, quel progetto che stavo realizzando teoricamente funziona.
Ha solo un grosso problema.
Il bello del sistema che ho realizzato è che da casa puoi collegarti ad arduino tramite dyndns e vedere in tempo reale alcuni parametri rilevati da arduino.
Il brutto è che non va, cioè non sempre va e io non reisco a capire che cosa ci sia di sbagliato.

Ho un profilo su dyndns.org attualmente in funzione
Ho sul router la possibilità di gestire alcuni servizi DNS e quindi ho inserito servizio, account e indirizzo, ho aperto la porta 4040 su IP 192.168.0.1 che è IP di arduino sulla rete e digitanto miodns.dyndns.org:4040 a volte va e a volte non va.
Nel codice c'è EthernetServer porta(4040); ma a sto punto mi chiedo se ha attinenza, sinceramente la parte di connessione è un po' causale.. senza troppi controlli, ed è

Code:
static uint8_t mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x1D, 0x97 };
static uint8_t ip[] = { 192, 168, 0, 101 };
EthernetServer door(4040);
//Dentro il void setup() invece:
Ethernet.begin(mac,ip);
door.begin();

Ma non c'è mai stabilità, non capisco se sia un problema del DNS, del router, del codice..

Che cosa mi consigliereste di controllare ?
« Last Edit: May 10, 2013, 03:50:53 am by Federico0 » Logged

0
Offline Offline
Edison Member
*
Karma: 20
Posts: 2227
Have you mooed today?
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Quote
Il brutto è che non va, cioè non sempre va e io non reisco a capire che cosa ci sia di sbagliato

non ti funziona in particolari situazioni o in modalità random?
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2746
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Potresti postare l'intero sketch che hai usato?
La fonte dalla quale hai preso ispirazione smiley ?

Bisogna tener conto che l'ip va spedito al servizio dyndns solo quando cambia e non 50 volte al minuto altrimenti ti giochi l'account e i tuoi ip.
Se hai fatto quello free http://dyndns.it/solutions/ hai solo 5 aggiornamenti al giorno in seguito a cambi ip
Quel codice che hai postato non evidenzia i problemi da te descritti, vorrei vedere come fai la richiesta all'  HOST: www.dyndns.com, come hai impostato alcuni pin nel setup, i vari delay di attesa risposta ....

ciao
« Last Edit: May 11, 2013, 04:48:40 am by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

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

Ogni quanto trasmetti a DynDns il tuo IP?
Non è che cambia e non aggiorni il loro database?

Ti conviene inoltre specificare tutti i parametri di rete
Invece di
Code:
Ethernet.begin(mac,ip);
usa
Code:
Ethernet.begin(mac,ip, Dns, gateway, subnet);
se il dns è uguale al gateway, sulle reti casalinghe è cosi nel 98% dei casi.
usa
Code:
Ethernet.begin(mac,ip, gateway, gateway, subnet);
« Last Edit: May 11, 2013, 07:54:28 am by PaoloP » Logged

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

0
Offline Offline
Sr. Member
****
Karma: 2
Posts: 376
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Da quello che hai scritto ho capito che il router ha indirizzo 192.168.0.1 mentre lo shield 192.168.0.101.

Quando dici che hai aperto una porta intendi forse il port forwarding? Cioè ciò che entra in porta 4040 del router viene instradato sulla porta 4040 dello shield?

Credo che l'unico modo per capire se non sia un problema tra il PC esterno e il tuo router sia di abilitare un altro server, che so un web server su un pc, e di scrivere l'apposita regola sul router del tipo ciò che mi entra su porta 8080 me la instradi sul pc sulla porta 80 (non è necessario usare le stesse porte su router e PC).
Quindi ti colleghi da fuori e, se trovi difficoltà con lo shield, provi se invece l'altro server rimane raggiungibile.
Controlla anche che non ci siano conflitti fra regole sul router.
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2746
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Inutile giocare alle scommesse... finchè non posta uno sketch qualsiasi cosa diciamo è scritta in modo random.

saluti
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

provincia di Forlì
Offline Offline
Full Member
***
Karma: 0
Posts: 119
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusate, ero fuori casa per cui non ho potuto rispondere prima di ora..
Vi ringrazio per le risposte, ora vi risponderò per gradi.

Ho un account a pagamento su Dyndns, non vorrei che comunque in fase di debug a forza di spegnere e accendere il router (essendo di quelli con scheda 3G prende ogni volta IP) abbia superato una qualche soglia di refresh ?
Tuttavia, avviene in situazioni piuttosto random.. magari mentre sta andando e aggiorno la pagina smette di andare, a volte se scrivo IP:PORTA riesco a raggiungere la pagina,altre no.

Proverò ad aggiungere:
Code:
Ethernet.begin(mac,ip, gateway, gateway, subnet);

Comunque il codice non è poi tanto elaborato.. purtroppo devo ancora farne di strada smiley comunque è questo qui:

Code:
//Librerie
#include <SPI.h>
#include <Ethernet.h>
#include <ICMPPing.h>

static uint8_t mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0x1D, 0x97 };
static uint8_t ip[] = { 192, 168, 0, 101 };
static uint8_t pingAddr[] = {Indirizzo del server da pingare};

EthernetServer door(8080);
//Direttive della libreria ICMPPing
SOCKET pingSocket = 0;
char buffer [256];

//Variabili
static int errori ;    //Contatore di ping falliti
static int pm ;        //Contatore ping effettuati
static int lpm;        //Contatore in cui salvo il n. di ping effettuati..
static int res;        //Contatore di reset effettuati
byte vin = 7;          //Pin di alimentazione router
unsigned long time;               //Varabile che contiene i millis
unsigned long tempoIniziale = 0;  //variabile "di passaggio" per contare l'intervallo
long intervallo;

void setup()
{
 
  digitalWrite(vin,LOW); //low perchè ho messo il relè alla rovescia
  Ethernet.begin(mac,ip);
  door.begin();
//2 secondi prima di rientrare
  delay(2000);

}

void loop()
{
  unsigned long tempoAttuale = millis();

  if (tempoAttuale - tempoIniziale > intervallo)
  {
    tempoIniziale = tempoAttuale;

    bool pingReturn; //Qua ci va il risultato del ping (Vero o Falso)

    ICMPPing ping(pingSocket);

    pingReturn = ping(4, pingAddr, buffer); //Mando il ping

    if (pingReturn) { //ping VERO, allora..
      intervallo = 120000; // Pingo ogni 2 minuti (120000 ms)
      pm++; //Aumento il contatore dei ping ricevuti correttamente
      errori=0;  //tenendo a zero quello degli erori
    }

    else {      //altrimente - se pingo FALSO - aumento la velocità
      intervallo = 5000; //
      errori++; //aumento un counter di errori
      if(errori==4) //al 4 errore:
      {
        digitalWrite(vin,HIGH); //stacco l'alimentazione al router per 5secondi
        delay(5000);
        digitalWrite(vin,LOW); // rialimento il router
        res++; //Aumento il numero di reset
        lpm=pm;   
        pm=0;      //Rinizio a contare
        delay(120000); //aspetto 2 minuti e questo perchè se aspetto meno ho visto che ci sono problemi
      }
    }
  }

    //Parte Ethernet + creazione pagina html
  EthernetClient client = door.available();  // Provo a raggiungere il client

  if (client) {

    while (client.connected()){

      if (client.available()) {

        char c = client.read();

        Serial.print(c);

        if (c == '\n') {
          //Creazione pagina internet//
          client.println(F("HTTP/1.1 200 OK"));

          client.println(F("Content-Type: text/html"));

          client.println();
         
//Pagina HTML che non fa niente se non client.print le varie variabili
     
          delay(1);
          client.flush();
          client.stop();
        }
      }
    }
  }
}



Il punto è che per le mie conoscenze il codice è il massimo che saprei fare
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2746
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

infatti come sospettavo nel reply 2 non hai impostato nel setup i pin 4 e 10 in output/high.

ciao
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

provincia di Forlì
Offline Offline
Full Member
***
Karma: 0
Posts: 119
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ciao pablos e grazie per la risposta ma purtroppo per me non è chiara, potresti spiegarmela meglio ?
Intendi dire che oltre riavviare il router tramite relè, devo anche riavviare ethernet shield ? il pin 10 vedo che è relativo a Ethernet shield.
Ma riavviando ethernet shield, la parte superiore (   Ethernet.begin(mac,ip); door.begin(); ) in quel punto del programma, che fine fa ?
« Last Edit: May 13, 2013, 03:19:26 am by Federico0 » Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2746
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

non modifichi niente per ora, aggiungi solo nel tuo setup le istruzioni necessarie per settare i pin che usi, nemmeno il tuo vin avevi impostato, quando utilizzi un pin qualsiasi devi dire se è un input o un output, il 4 (per SD) e il 10 (per la ethernet) vengono impegnati dallo shield e vanno comunque impostati.

che diventerà così
Code:
void setup()
{
  pinMode(4, OUTPUT);
  pinMode(10, OUTPUT);
  pinMode(vin, OUTPUT);
  digitalWrite(4,1);
  digitalWrite(10,1);
  digitalWrite(vin,LOW); //low perchè ho messo il relè alla rovescia
  Ethernet.begin(mac,ip);
  door.begin();
//2 secondi prima di rientrare
  delay(2000);

}

Quote
Intendi dire che oltre riavviare il router tramite relè
Perchè riavvii il router con relè?
« Last Edit: May 13, 2013, 03:41:21 am by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

provincia di Forlì
Offline Offline
Full Member
***
Karma: 0
Posts: 119
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Scusa la risposta in velocità.

Sto provando le varie cose che mi avete consigliato, ho aggiunto ethernet.begin(ip,mac,gateway,gateway,subnet); e il pinning.. ora proviamo.

Per quanto riguarda il relè, posso darti maggiori informazioni ma in linea di massima è perchè ho necessità di riavviare fisicamente il router
« Last Edit: May 13, 2013, 03:42:46 am by Federico0 » Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2746
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Sono quasi sicuro che il tuo mal funzionamento random è causato dal pin 4 non impostato, sostituisci il setup() provalo e fammi sapere
altrimenti se pensi di usare il pin 4 e non sfruttare la SD devi piegare leggermente il piedino verso l'esterno e reinserire lo shield lasciando libero il 4 su arduino
ciao
« Last Edit: May 13, 2013, 03:46:25 am by pablos » Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

provincia di Forlì
Offline Offline
Full Member
***
Karma: 0
Posts: 119
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ho appena finito di aggiungere i vari consigli che mi avete dato, adesso lo lascio attivo per un po' e ti so dire!
Ma che cosa sarebbe questo pin 4 ? Pensavo fosse relativo alla SDcard
Logged

Genova
Offline Offline
Faraday Member
**
Karma: 17
Posts: 2746
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Si il pin 4 è l'enable della SD, se non lo imposti viene abilitata in modo random causando problemi
Logged

Meglio imparare dalle cose inutili piuttosto che non imparare niente.   [Arduino Mega R3 + Ethernet shield W5100 + SD card 8Gb FAT32]

provincia di Forlì
Offline Offline
Full Member
***
Karma: 0
Posts: 119
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Ah, ottimo consiglio.. Grazie!

Ora comunque sto provando, se mi imbatto in comportamenti strani o anomali magari riporto qua  smiley
Logged

Pages: [1] 2   Go Up
Jump to: