Teilnehmer im Netzwerk anpingen mit Arduino

Hallo Zusammen, erstmal ein gutes Neues euch allen :slight_smile:

Eine scheinbar einfache Sache bereitet mir mal wieder Kopfzerbrechen…
Möchte 2 Teilnehmer im Netzwerk in regelmäßigen Zeitabständen anpingen, ob diese noch online sind.
Wenn beide über einen längeren Zeitraum (z.B. 10 Minuten) nicht mehr erreichbar sind, möchte ich eine
einfache Aktion ausführen.
Habe die Libary von “blake foster” ausprobiert, würd auch funktionieren aber frisst zuviel Speicher- weil zu aufgebläht.

Kennt jemand von euch vielleicht eine andere Libary, die ich hierfür verwenden kann? Umso einfacher desto besser.

Soll nur dazu dienen mit Zeitverzögerung, diverse Teilnehmer abzuschalten wenn das heimische WLAN mit beiden
mobilen Geräten verlassen wird.

Viele Grüße
Christoph

Weiß keiner was? :~

Naja, mit etwas mehr Infos würdest Du sicher auch etwas mehr Feedback bekommen. Welcehr Arduino mit welchem Ethernet-Shield. Was meinst Du mit "anpingen"? ICMP oder eine TCP-Verbindung auf einem spezifischen Port? Wie sieht der bisherige Code aus? Mario.

Habe einen Arduino UNO mit Ethernet Shield. Der Ping soll einfach erfolgen über TCP/IP auf 2 Geräte im selben Netzwerk mit festen IP- Adressen.

So würds prinzipiell funktionieren, wollte nur nachfragen ob es eine einfachere Möglichkeit gibt.
Außerdem möchte ich den Status von 2 Geräten im Netzwerk abfragen…
Frisst leider auch verhältnismäßig viel Speicher.

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

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; // max address for ethernet shield
byte ip[] = {192,168,178,40}; // ip address for ethernet shield
IPAddress pingAddr(192,168,178,20); // ip address to ping (Geraet 1)

SOCKET pingSocket = 0;

char buffer [256];
ICMPPing ping(pingSocket, (uint16_t)random(0, 255));

void setup() 
{
  // start Ethernet
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
}

void loop()
{
  ICMPEchoReply echoReply = ping(pingAddr, 4);
  if (echoReply.status == SUCCESS)
  {
    Serial.println("verbunden");
  }
  else
  {
    Serial.println("getrennt");
  }

  delay(1000);
}

Viel einfacher wird es nicht gehen, die Ethernet-Lib verschlingt nunmal recht viel Speicher. Viel kleiner wird es kaum gehen, denn der Chip auf dem Ethernet-Shield kann von Hause aus selbst ICMP, die Lib muss das also nicht selbst liefern. Lediglich die Funktionen um das bim WizNet5100 zu nutzn. Das Beispiel der ICMPPing Lib compiliert bei mir mit knapp 7k, was bei einem Uno durchaus vertretbar ist. Für das Anpingen selbst würde ich eine Funktion bauen, die eine IP übergeben bekommt. Damit wird es einfacher, wenn man mehr als eine IP anpingen möchte. TCP/IP wie Du es schreibst ist es allerdings ncht. Korrekterweise ist ICMP der richtige Name dafür. TCP ist ein eigenes Protokoll, das eine Schicht/Layer im OSI/ISO Modell drüber liegt. Siehe auch: http://de.wikipedia.org/wiki/OSI-Modell#Die_sieben_Schichten Mario.