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é.
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
}
}