Ethernet shield & arduino uno, ping une adresse internet

Bonjour, je cherche un bout de code pour arduino uno et pour sa carte ethernet.

J'aimerais pinger un site internet toutes les 20 secondes et voir si la requete marche, si elle ne marche pas je voudrais activer un relai pour redemarrer mon router.

J'ai cherché sur internet un exemple de ping d'un site web mais je n'est pas trouvé.

Tu pourrais peut-être trouver ton bonheur là-dedans
https://forum.arduino.cc/search?q=ping

Voila, pour ceux que sa interesse, j'ai modifié ce code trouvé ici:

https://zestedesavoir.com/tutoriels/686/arduino-premiers-pas-en-informatique-embarquee/1213_internet-of-things-arduino-sur-internet/4847_arduino-et-ethernet-client/

En bas de page, j'ai simplement ajouté les bonnes lignes aux bon endroits.
J'utilise le port D7 pour commander un relais qui lorsqu'il est alimenté coupe l'alimentation du router.
j'ai mis une tempo de 60secondes , le temps que le routeur redemarre.
Un test de la page free.fr est effectué toutes les 30 secondes.
Voici le code modifié:

// Ces deux bibliothèques sont indispensables pour le shield
#include <SPI.h>
#include <Ethernet.h>

// L'adresse MAC du shield
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x7E };
// L'adresse IP que prendra le shield
IPAddress ip(192,168,0,3);
// L'objet qui nous servira a la communication
EthernetClient client;
// Le serveur à interroger
char serveur[] = "free.fr";

// pour lire les caractères
char carlu = 0;
// moment de la dernière requête
long derniereRequete = 0;
// temps minimum entre deux requêtes
const long updateInterval = 30000;
// mémorise l'état de la connexion entre deux tours de loop
bool etaitConnecte = false;



void setup() {
  pinMode(7, OUTPUT);   //Broche 7 en sortie
  digitalWrite(7, HIGH); //couper le relais,routeur alimenté
  
  // On démarre la voie série pour déboguer
  Serial.begin(9600);

  char erreur = 0;
  // On démarre le shield Ethernet SANS adresse IP (donc donnée via DHCP)
  erreur = Ethernet.begin(mac);

  if (erreur == 0) {
    Serial.println("Parametrage avec ip fixe...");
    // si une erreur a eu lieu cela signifie que l'attribution DHCP
    // ne fonctionne pas. On initialise donc en forçant une IP
    Ethernet.begin(mac, ip);
  }
  Serial.println("Init...");
  // Donne une seconde au shield pour s'initialiser
  delay(1000);
  Serial.println("Pret !");
}

void loop()
{




  // on lit les caractères s'il y en a de disponibles
  if(client.available()) {
    carlu = client.read();
    Serial.print(carlu);
  }

  // SI on était connecté au tour précédent
  // ET que maintenant on est plus connecté
  // ALORS on ferme la connexion
  if (etaitConnecte && !client.connected()) {
    Serial.println();
    Serial.println("Deconnexion !");
    // On ferme le client
    client.stop();
  }

  // Si on est déconnecté
  // et que cela fait plus de xx secondes qu'on a pas fait de requête
  if(!client.connected() && ((millis() - derniereRequete) > updateInterval)) {
    requete();
  }

  // enregistre l'état de la connexion (ouvert ou fermé)
  etaitConnecte = client.connected();
}

void requete() {
  // On connecte notre Arduino sur "perdu.com" et le port 80 (defaut pour l'http)
  char erreur = client.connect(serveur, 80);

  if(erreur == 1) {
      // Pas d'erreur ? on continue !
      Serial.println("Connexion OK, envoi en cours...");

      // On construit l'en-tête de la requête
      client.println("GET / HTTP/1.1");
      client.println("Host: perdu.com");
      client.println("Connection: close");
      client.println();

      // On enregistre le moment d'envoi de la dernière requête
      derniereRequete = millis();
      digitalWrite(7, HIGH);  //relais non activé
      
  } else {
    
    // La connexion a échoué :(
    // On ferme notre client
    client.stop();
    // On avertit l'utilisateur
    Serial.println("Echec de la connexion");
  
    switch(erreur) {
      case(-1):
        Serial.println("Time out");
        break;
      case(-2):
        Serial.println("Serveur invalide");
        break;
      case(-3):
        Serial.println("Tronque");
        break;
      case(-4):
        Serial.println("Reponse invalide");
        break;
    }
    Serial.println("*********************Redemarrage du routeur************************");
    digitalWrite(7, LOW); //alimenter le relais pour redemarrer le routeur
    delay(1000);          //attendre 1 secondes
    digitalWrite(7, HIGH);//couper le relais pour alimenter le routeur
    delay(60000);         // attendre 60 secondes que le routeur demarre
  }
}

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.