Arduino Shield Ethernet ping ping ping la prise
L'idée est d'utiliser un arduino UNO avec un shield ethernet afin de la connecter sur le réseau local et pouvoir envoyer un ping sur une adresse IP.
Pouvoir tester le ping d'un raspberry par exemple.
J'ai un système domotique, JEEDOM, sous PI3, et parfois il plante. 3x par an mais c'est déjà trop ! ;-)
Le but est de demander à l'arduino d'envoyer un ping à l'adresse IP de Jeedom, si pas de ping, couper l'alimentation du PI3 et la relancer... bref un bon gros reboot by power!
Voici le code actuel:
/*
Ping Example
This example sends an ICMP pings every 500 milliseconds, sends the human-readable
result over the serial port.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
created 30 Sep 2010
by Blake Foster
*/
#include <SPI.h>
#include <Ethernet.h>
#include <ICMPPing.h>
int resultat = 0;
int TRY1 = 0;
int TRY2 = 0;
int TRY3 = 0;
int TRY4 = 0;
int TRYAll = 0;
int Cpt = 0;
int ACTIVE_RESET = 12;
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; // max address for ethernet shield
byte ip[] = {192,168,0,80}; // ip address for ethernet shield
IPAddress pingAddr(192,168,0,19); // ip address to ping
SOCKET pingSocket = 0;
char buffer [256];
ICMPPing ping(pingSocket, (uint16_t)random(0, 255));
void setup()
{
// start Ethernet
Ethernet.begin(mac, ip);
Serial.begin(115200);
pinMode(ACTIVE_RESET, OUTPUT);
digitalWrite(ACTIVE_RESET, HIGH);
}
void loop()
{
IPAddress pingAddr(192,168,0,19);
ICMPEchoReply echoReply = ping(pingAddr, 4);
sprintf(buffer,"%ld",millis() - echoReply.data.time);
Serial.println("192,168,0,19");
Serial.println(buffer);
resultat = millis() - echoReply.data.time;
Serial.println(resultat);
TRY1 = resultat;
Serial.println(TRY1);
delay(1000);
// IPAddress pingAddr(192,168,0,19);
echoReply = ping(pingAddr, 4);
sprintf(buffer,"%ld",millis() - echoReply.data.time);
Serial.println(buffer);
resultat = millis() - echoReply.data.time;
TRY2 = resultat;
Serial.println(TRY2);
delay(1000);
// IPAddress pingAddr(192,168,0,19);
echoReply = ping(pingAddr, 4);
sprintf(buffer,"%ld",millis() - echoReply.data.time);
Serial.println(buffer);
resultat = millis() - echoReply.data.time;
TRY3 = resultat;
Serial.println(TRY3);
delay(1000);
// IPAddress pingAddr(192,168,0,19);
echoReply = ping(pingAddr, 4);
sprintf(buffer,"%ld",millis() - echoReply.data.time);
Serial.println(buffer);
resultat = millis() - echoReply.data.time;
TRY4 = resultat;
Serial.println(TRY4);
TRYAll = TRY1 + TRY2 + TRY3 + TRY4;
Serial.print("TRYAll: ");
Serial.println(TRYAll);
if (( TRYAll > 10000 ) || ( TRYAll < 0 ))
{
Serial.println("BAD PING");
Cpt = 1;
digitalWrite(ACTIVE_RESET, LOW);
delay(10000);
digitalWrite(ACTIVE_RESET, HIGH);
}
else
{
Serial.println("GOOG PING");
}
Serial.print("Cpt: ");
Serial.println(Cpt);
delay(15000);
}
Commentaires
Enregistrer un commentaire