Go Down

Topic: Controllare connessione ethernet (Read 866 times) previous topic - next topic

LukDog

Buongiorno a tutti,
premetto che ho da poco ricevuto in regalo la nuova ethernet shield, ora vorrei implementare un piccolo progetto in cui arduino (UNO) è configurato come server, e svolge un evento quando manca la connessione alla LAN. Ad esempio se si spegne il router, o si taglia il cavo di rete, arduino fa accendere un LED, e quando viene riconnesso aggiorna se è il caso l'ip pubblico su no-ip.  :D

Non riesco a capire però come controllare se Arduino è connesso o no alla rete. Qualcuno potrebbe gentilmente darmi uno spunto?  :smiley-red:

Grazie! :D

cece99

Io pingherei google periodicamente se hai esito negativo accendi il LED.
Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

nid69ita

Indirizzo 8.8.8.8 è dns google e puoi pingarlo
my name is IGOR, not AIGOR

LukDog

Giusto, non mi era venuto in mente,  :P
Quindi a questo punto, visto che mi interessa che sia collegato in particolare alla LAN, anche se manca internet, posso fare un ping anche verso un server locale o addirittura verso il router? ;)

Non pensavo che si potessero effettuare ping, c'è qualche libreria? Riuscireste a chiarirmi le idee al riguardo? io intanto Provo a documentarmi!

Grazie,

cece99

Io sto usando il cellulare, quandi non posso cercare in lungo e in largo.

Il Vero Programmatore non ha bisogno di manuali sull'assembler, sono
  sufficienti i data sheet dei microprocessori.

gpb01

Prova a dare un occhiata qui : http://forum.arduino.cc/index.php/topic,8701.0.html ... magari ti può essere utile.

Guglielmo
Search is Your friend ... or I am Your enemy !

Federico0

#6
Aug 26, 2013, 05:53 pm Last Edit: Aug 26, 2013, 05:59 pm by Federico0 Reason: 1
Ciao ho fatto una cosa analoga la tua..

Con la libreria che ti hanno postato qui sopra (recentemente è uscita una versione aggiornata ma per il nostro scopo va più che bene la prima) io pingavo un server remoto e nel caso la risposta fosse negativa, riavviavo il router!

Sono a disposizione !

LukDog


Ciao ho fatto una cosa analoga la tua..

Con la libreria che ti hanno postato qui sopra (recentemente è uscita una versione aggiornata ma per il nostro scopo va più che bene la prima) io pingavo un server remoto e nel caso la risposta fosse negativa, riavviavo il router!

Sono a disposizione !



Si quello che voglio fare è una cosa simile, grazie Mille a tutti, mi metto al lavoro, e vi faccio sapere se ho problemi, grazie Ancora, gentilissimi! :D

LukDog

Eccomi qua, mi sono messo al lavoro,  :smiley-surprise:
sono riuscito a far si che Arduino accenda un LED se c'è mancanza di rete, e lo spenga quando ritorna!

Ora però mi trovo di fronte a questo problema, se io volessi anche far ospitare ad arduino una piccola pagina web, ad esempio quella che c'è tra gli esempi  :~ è possibile?
io ho provato diverse soluzioni, ma non riesco proprio. Provo anche a far dei ping da Pc verso arduino, e solo qualcuno mi torna indietro, come se la scheda fosse sempre occupata per fare i ping di controllo,
Qualcuno ha qualche idea? :) ve ne sarei molto grato,  :smiley-red:

vi posto il mio codice, anche se niente di particolare..

Code: [Select]


#include <SPI.h>
#include <Ethernet.h>
#include <ICMPPing.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,150);

/***************************************************
  PER IL PING
**************************************************/
byte pingAddr[] = {192,168,1,4}; // ip address to PING
SOCKET pingSocket = 0;
char buffer [256];
ICMPPing ping(pingSocket);

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

void setup() {
// Open serial communications and wait for port to open:
  Serial.begin(9600);
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }

  //led
  pinMode(3, OUTPUT);
  digitalWrite(3, LOW);
 
  // start the Ethernet connection and the server:
  Ethernet.begin(mac, ip);
  server.begin();
  Serial.print("server is at ");
  Serial.println(Ethernet.localIP());
}


void loop() {
 
  boolean InternetCtrl = false;

  InternetCtrl = ping(4, pingAddr, buffer);
    if(!InternetCtrl)
    {
      digitalWrite(3, HIGH);
      Serial.println('\n entro nel ciclo non internet');
    }
    else if(InternetCtrl)
    {
      digitalWrite(3, LOW);
      Serial.println('\n entro nel ciclo internet ok');
      page();
    }
       
    delay(1);
}


void page()
{
   // 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("Connection: close");  // the connection will be closed after completion of the response
  client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
          for (int analogChannel = 0; analogChannel < 6; analogChannel++) {
            int sensorReading = analogRead(analogChannel);
            client.print("analog input ");
            client.print(analogChannel);
            client.print(" is ");
            client.print(sensorReading);
            client.println("<br />");       
          }
          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");
  }
 
}

m_ri

ke router hai?magari puoi farlo direttamente da lì..

LukDog


ke router hai?magari puoi farlo direttamente da lì..


ho un router alice, ma di che parli? :) il fatto dell'ip sono riuscito,  ;)

ora non mi riesce ad ospitare una semplice pagina web, :(

m_ri

l'aggiornamento del dynamicDNS puoi benissimo farlo fare a molti modem,compresi molti di alice(tipo il mio gate plus wifi lo fa tranquillamente senza nessuna modifica)

Go Up
 


Please enter a valid email to subscribe

Confirm your email address

We need to confirm your email address.
To complete the subscription, please click the link in the email we just sent you.

Thank you for subscribing!

Arduino
via Egeo 16
Torino, 10131
Italy