Go Down

Topic: Ethernet client/server Horodatage NTP  (Read 161 times) previous topic - next topic

logansquare

Bonjour,

je souhaiterai afficher l'heure ,que je récupère sur un serveur ntp ,sur le serveur arduino mais le problème est que je n'arrive pas à me connecter à l'adresse IP local d'arduino. L'explorer indique page web inaccessible. Puis-je être ainsi client, serveur ?

Voici le code :
Code: [Select]
//PIN 13,12,11,10, 4 utilisé par ethernet shield

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(10,10,129,52);
EthernetServer server(80);
EthernetClient client;

//capteur
 
 int relais = 7;
 String DATEETHEURE;
void setup() {


  pinMode(relais,OUTPUT);

  Ethernet.begin(mac, ip);
  server.begin();
  Serial.begin(9600);
 
}


void loop()
{  client = server.available();

  if (client)ethernet();
  else {Serial.println(DateHeure());DATEETHEURE = DateHeure();}
  Serial.println("Boucle ");
}

void ethernet()
{
  if (client) {
    boolean currentLineIsBlank = true;
    String buffer="";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        buffer+=c;
        Serial.write(c);
        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>");
          client.println("<h1>");
          client.println(DATEETHEURE);
          client.println("</h1>");
         
          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);
    client.stop();
  }
}


String DateHeure ()
 { char serve_r[] = "ntp.alapetite.fr";  // adresse du site qui fournit date/heure (utilise DNS)
   String BufReception;   
      if (Ethernet.begin(mac) == 0) {
      Serial.println("Failed to configure Ethernet using DHCP");
      Ethernet.begin(mac, ip);
  } 
     if(client.connect(serve_r, 80)){
     client.println("GET /date.txt.php HTTP/1.1"); // voir : ntp.alapetite.fr/date.txt.php
     client.println("Host : ntp.alapetite.fr"); // adresse du site qui fournit l'heure et la date
     client.println("Connection: close");
     client.println();
     delay(100);  // attendre la réponse
   } //end if
   else return "connection failed";  // Si aucune réponse du site
   while (client.available() ) {
    char c = client.read();
    if (BufReception.length() < 80) {  // veiller à ne pas dépasser la taille du buffer
      BufReception += c;
    }
    if (c == '\n') {               // Nouvelle ligne   
      BufReception="\0";           //  vider buffer Rec = fin de chaîne
    }
  } // fin du while
  client.stop();
  int Position = BufReception.indexOf("2");  // recherche position du 2 de 2014 (en principe le 1er octet, position = 0)
  String AA = BufReception.substring(Position+0,Position+4);   // année
  String MM = BufReception.substring(Position+5,Position+7);   // mois
  String  JJ = BufReception.substring(Position+8,Position+10); // jour
  String HH = BufReception.substring(Position+11,Position+13);  // heures
  String MN = BufReception.substring(Position+14,Position+16);  // minutes
  String  SS = BufReception.substring(Position+17,Position+19); // secondes
  return JJ+"/"+ MM+"/"+AA+" " +HH+":"+MN+":"+SS+ " ";
 }

infobarquee

bonjour,
tu ne déclare que la partie client, donc tu ne pourras pas afficher la page html sur le nono en tapant une ip

logansquare

Merci infobarquee

En ajoutant la passerelle et le masque sous réseau j'arrive a accéder à ma page HTML mais sans cette ligne qui se trouve dans le loop :

  else {Serial.println(DateHeure());DATEETHEURE = DateHeure();}

Lorsque je rajoute cette dernière, ma page web devient inaccessible.

Est-ce possible qu'arduino n'ai pas le temps ou qu'il n'arrive pas a se déconnecter ?

Code: [Select]
//PIN 13,12,11,10, 4 utilisé par ethernet shield

#include <SPI.h>
#include <Ethernet.h>

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[]= {10,10,129,52};
byte gateway[]= {10,10,255, 254};
byte subnet[] = {255, 255, 0, 0};
EthernetServer server(80);
EthernetClient client;

//capteur
 
 int relais = 7;
 String DATEETHEURE;
 
void setup() {


  pinMode(relais,OUTPUT);

  Ethernet.begin(mac, ip, gateway, subnet);
  server.begin();
  Serial.begin(9600);
 
}


void loop()
{  client = server.available();

  if (client)ethernet();
  //else {Serial.println(DateHeure());DATEETHEURE = DateHeure();}
}

void ethernet()
{
  if (client) {
    boolean currentLineIsBlank = true;
    String buffer="";
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        buffer+=c;
        Serial.write(c);
        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>");
          client.println("<h1>Voici l'heure : ");
          client.println(DATEETHEURE);
          client.println("</h1>");
         
          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);
    client.stop();
  }
}


String DateHeure ()
 { char serve_r[] = "ntp.alapetite.fr";  // adresse du site qui fournit date/heure (utilise DNS)
   String BufReception;   
      if (Ethernet.begin(mac) == 0) {
      Serial.println("Failed to configure Ethernet using DHCP");
      Ethernet.begin(mac, ip);
  } 
     if(client.connect(serve_r, 80)){
     client.println("GET /date.txt.php HTTP/1.1"); // voir : ntp.alapetite.fr/date.txt.php
     client.println("Host : ntp.alapetite.fr"); // adresse du site qui fournit l'heure et la date
     client.println("Connection: close");
     client.println();
     delay(100);  // attendre la réponse
   } //end if
   else return "connection failed";  // Si aucune réponse du site
   while (client.available() ) {
    char c = client.read();
    if (BufReception.length() < 80) {  // veiller à ne pas dépasser la taille du buffer
      BufReception += c;
    }
    if (c == '\n') {               // Nouvelle ligne   
      BufReception="\0";           //  vider buffer Rec = fin de chaîne
    }
  } // fin du while
  client.stop();
  int Position = BufReception.indexOf("2");  // recherche position du 2 de 2014 (en principe le 1er octet, position = 0)
  String AA = BufReception.substring(Position+0,Position+4);   // année
  String MM = BufReception.substring(Position+5,Position+7);   // mois
  String  JJ = BufReception.substring(Position+8,Position+10); // jour
  String HH = BufReception.substring(Position+11,Position+13);  // heures
  String MN = BufReception.substring(Position+14,Position+16);  // minutes
  String  SS = BufReception.substring(Position+17,Position+19); // secondes
  return JJ+"/"+ MM+"/"+AA+" " +HH+":"+MN+":"+SS+ " ";
 }
 

infobarquee

tu demande a te connecter au server arduino avant qu'il est pu récupérer l'heure

logansquare

Comment faire alors car même en lui mettant des delays il ne se connecte tjs pas

Go Up