Arduino+ethernet shield=Ping

azalot
Offline
Зарегистрирован: 25.03.2015

Добрый день. Помогите реализовать пинг нескольких устройств посредством ethernet shield w5100 и выводом их активности на светодиоды. На просторах интернета откапал код и чуток подправил(были ошибки при проверке). Все вроде заработало, только не могу понять как сделать на несколько светодиодов. 

#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 2 };
byte server[] = { 192, 168, 2, 1 };
int outputPin = 8;
EthernetClient client;
boolean send_request()
{
  if (client.connect(server, 445)) {
   digitalWrite(outputPin, 1);
   Serial.println("1");
  }else{
  digitalWrite(outputPin, 0); 
  Serial.println("0");
 }
}
void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  pinMode(outputPin, OUTPUT);
}
void loop()
{
  send_request();
  client.stop();
  delay(1000);
}

 

vitalikost
Offline
Зарегистрирован: 28.11.2014

//Нужно проверzть, это так примерно идея
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 2 };
byte server[] = { 192, 168, 2, 1 };
byte server1[] = { 192, 168, 2, 10};
byte server2[] = { 192, 168, 2, 1 1};

int outputPin = 8;//server
int outputPin1 = 9;//server1
int outputPin2 = 10;//serve2

EthernetClient client;
boolean send_request(serv,pin)
{
  if (client.connect(server, 445)) {
   digitalWrite(Pin, 1);
   Serial.println("1");
  }else{
  digitalWrite(Pin, 0); 
  Serial.println("0");
 }
}

void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  pinMode(outputPin, OUTPUT);
  pinMode(outputPin1, OUTPUT);
  pinMode(outputPin,2 OUTPUT);

}
void loop()
{
  send_request(server,outputPin);
  delay(1000);
  send_request(server1,outputPin1);
  delay(1000);
  send_request(server2,outputPin2);
  delay(1000);
  client.stop();
}
azalot
Offline
Зарегистрирован: 25.03.2015

vitalikost
Offline
Зарегистрирован: 28.11.2014
#include <Ethernet.h>
#include <SPI.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192, 168, 2, 2 };
byte server[] = { 192, 168, 2, 1 };
byte server1[] = { 192, 168, 2, 10 };
byte server2[] = { 192, 168, 2, 11 };
int outputPin = 8;
int outputPin1 = 9;
int outputPin2 = 10;
EthernetClient client;
boolean send_request()
{
  if (client.connect(server, 445)) {
   digitalWrite(outputPin, 1);
   Serial.println("1");
  }else{
  digitalWrite(outputPin, 0); 
  Serial.println("0");
 }
 delay(1000);
   if (client.connect(server1, 445)) {
   digitalWrite(outputPin1, 1);
   Serial.println("1");
  }else{
  digitalWrite(outputPin1, 0); 
  Serial.println("0");
 }
 delay(1000);
  if (client.connect(server2, 445)) {
   digitalWrite(outputPin2, 1);
   Serial.println("1");
  }else{
  digitalWrite(outputPin2, 0); 
  Serial.println("0");
 }
}
void setup()
{
  Ethernet.begin(mac, ip);
  Serial.begin(9600);
  pinMode(outputPin, OUTPUT);
  pinMode(outputPin1, OUTPUT);
  pinMode(outputPin2, OUTPUT);
}
void loop()
{
  send_request();
  client.stop();
  delay(1000);
}

 

azalot
Offline
Зарегистрирован: 25.03.2015

До чего-то похожего я доходил, но пинг проходит только по первому серверу, дальше не идет.

Где-то читал что можно посредством ICMPPing реализовать, но с ним совсем у меня не вышло.

А без порта можно как-то пинговать компьютеры в сети?

vitalikost
Offline
Зарегистрирован: 28.11.2014

Не готов сказать, так как ethernet shield w5100 уменя пока что нету.

Может client.stop(); 

После каждого  delay(1000); поставить?

azalot
Offline
Зарегистрирован: 25.03.2015

Не помогло :(

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Это не Пинг, это просто подключение к порту. Не вижу приема-передачи ни одного пакета. Ну и еще... Если коннект открыт и он не нужен его нужно закрыть. Только вот клиент стоп закрывает коннект который открыл внешний клиент, для которого мы сервер. А тут мы клиент :)

azalot
Offline
Зарегистрирован: 25.03.2015

Ну да, не пинг, но впринципе проверяет доступность.
Может есть идеи как реализовать ?