Ligação Ethernet Arduino to Arduino - Help?

Boas,

Gostaria de fazer um projecto em que necessitaria de uma ligaçao ethernet entre dois arduinos mas estive a pesquisar e nao vejo nada que me possa ajudar nessa materia.

Será que alguem me pode ajudar? É possivel a ligação via ethernet entre dois arduinos em que um por exemplo tem um sensor(detecção) e do outro lado acende um led cada vez que for detectada a passagem.

Já verifiquei ligações com ethernet shield mas é tudo atraves de aplicacoes android ou web server e queria algo mais fisico e directo...é possivel?

Cumps

Claro que e...

Se meteres o exemplo Webserver que vem no Arduino num deles e o exemplo "WebClient" que tambem vem de base no Arduino e colocares os enderecos de IP um do outro, ficas com uma ligacao entre dois arduinos.

Depois tens de definir o protocolo de comunicacao entre eles... ai sim esta o problema... mas se pesquisares neste forum por protocolo vais encontrar varios posts sobre isso com exemplos desde o mais simples ao mais complexo.

Boas,

eu entretanto vi esses exemplos mas tenho um arduino YUN e acho que as libraries sao diferentes das do UNO certo?

Fazendo a ligação atraves de um router para efeitos de teste será mais simples certo?

Sim... um Yun e um bicho diferente... Em principio a interface ao utilizador sera semelhante, mas nao te posso garantir porque nunca usei um Yun.

Acho que vais ter de procurar ajuda em especifico para isso. Com Unos seria mais simples.

pois porque o Server penso que ja consegui fazer mas o problema esta em tentar adaptar o code do Client para YUN.

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

YunServer server;

void setup() {
Serial.begin(9600);
Bridge.begin();

server.listenOnLocalhost();
server.begin();

}

void loop() {
YunClient client = server.accept();

if (client) {
Serial.println("Client Connected");

Agora no WEBClient como faço para defenir a ligação a este server?

Qual e o endereco do Yun?

O que e que este Yun envia para o cliente quando ele conectar?

Sabes o que fazer com um Arduino Yun ou foi prenda de aniversario?

Neste momento queria apenas estabelecer uma ligaçao e posteriormente enviar uma string ou input para que no outro yun ao receber esse input acendesse um LED.

por exemplo se colocar 2 yun em dois locais diferentes com um motion sensor ao detectarem movimento enviavam o sinal atraves da ethernet para um yun principal em k acendia um LED correspondente ao local.... algo deste genero

neste momento tenho o codigo assim mas nao tenho ligaçao:

server

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

YunServer Server;

void setup() {
Serial.begin(9600);
Bridge.begin();
Server.listenOnLocalhost();
Server.begin();

}

void loop() {
YunClient client = Server.accept();

if (client) {
Serial.println("Client Connected");

//Console.println(request);
//process(client);
client.stop();
}

delay(50);

IPAddress server(192,168,1,2); // adresse IP de la YUN1
if(client.connect(server,5555)){ // si on est connecté au serveur
Serial.println("connected");
}
client.stop();
delay(500);
}


client

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 1, 2);

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
YunClient client;

void setup() {
Serial.begin(9600);
Bridge.begin();
}

void loop()
{

// if you get a connection, report back via serial:
if (client.connect(server, 5555)) {
Serial.println("connected");
}
else {
// kf you didn't get a connection to the server:
Serial.println("connection failed");
}
client.stop();
delay(500);
}

O que está a funcionar e o que é que não está?

Em relação ao projecto, principalmente, penso que é muito caro. Cada Yún é caro e são necessários 3 para esse projecto. Por isso, não gosto muito da ideia. Se o central fosse um Yún e cada um dos clientes fosse um UNO não funcionava também?

Se a ideia é usar Linux (tal como o bubulindo, também nunca mexi em nenhum Yún, mas penso que trabalha com Linux) também existem alternativas mais económicas.

se utilizasse os UNO teria que completar com o ethernet shield visto a ligacao ser por ethernet(dai a escolha dos YUN), o preço seria aproximado no final

Acho que nao estas a contabilizar tudo... se olhares ao custo das pecas por si so (YUN versus Arduino + ethernet), provavelmente tens o mesmo custo ou muito parecido... no entanto isto assume algumas coisas que nao sao verdade.

A mais importante e o teu tempo. Nao contabilizas em lado algum o teu tempo...

Depois tens o estado de desenvolvimento do produto. A Yun foi lancada o ano passado, o Arduino ja existe ha muitos mais...

Outro factor extremamente importante e o apoio da comunidade, o arduino Yun tem cerca de 10.000 posts no forum. Os outros Arduinos tem certamente mais de um milhao. Ou seja, o que tu pretendes fazer e trivial com dois unos e Ethernet shields, mas nao e tao trivial com o Yun. Basta este exemplo onde ninguem aqui no forum Portugues parece ter como te ajudar.

Depois tens a confiabilidade do sistema... as bibliotecas do Uno estao testadas e refinadas por imensas pessoas durante muito tempo. Isto significa que se fizeres o codigo como deve ser e tiveres uma boa fonte de alimentacao o teu projecto vai funcionar sem grandes problemas. O mesmo nao pode ser dito da Yun.

Nao estou a deitar abaixo o Yun, tanto quanto sei e um producto interessante e certamente tera bastantes usos, mas nao e de todo algo indicado para alguem que se esta a iniciar em microcontroladores.

Segundo a informacao que existe na internet, a Yun tem uma especie de consola de configuracao... que endereco colocaste la?

pois eu sei mas foi o material com que me deparei.... a consola nao utilizei porque o objectivo nao seria utilizar o serial monitor mas sim ser td directo

mas percebo o que queres dizer, para efeitos de teste pode ajudar

mas achas que ressalta algum erro no codigo ou aparentemente parece estar correcto?

Nao ressalta erro porque nem prestei atencao a ele... a partir do momento que nao sabes qual e o endereco IP do Yun que esta a correr um servidor Web, e-te impossivel de conectares a ele.

Isto e o mesmo que eu te dizer para ires ter comigo a minha casa e nao te dar a morada... como e que la chegas? Se nao sabes a morada IP da Yun, como podes programar outra para aceder a ela? Estas a perceber onde quero chegar?

De resto o codigo e apenas um esqueleto... ha muito pouco para estar errado ali.

O IP dos dois YUN eu sei... basta ligar ao wifi do YUN e aceder no browser a arduino.local e da-me logo o IP de cada um.

No codigo esta indicado o IP do server e do client

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

IPAddress server(192,168,1,1);
IPAddress ip(192, 168, 1, 2);

YunClient client;

A definicao dos enderecos nao deveria estar no setup em vez de colocado de forma avulsa no loop()?

Porque e que tu defines uma variavel ip para definir uma morada, mas depois usas uma variavel server na funcao de ligacao?

O Yun nao traz exemplos?

http://scuola.arduino.cc/lesson/b4EoRkV/Arduino_Yn_Intro_to_web_server

avulsa no loop? no server?

"Porque e que tu defines uma variavel ip para definir uma morada, mas depois usas uma variavel server na funcao de ligacao?"
Não estou a ver aonde te referes?? :confused:

Server

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>


YunServer Server;


void setup() {
  Serial.begin(9600);
  Bridge.begin();
  Server.listenOnLocalhost();
  Server.begin();

}

void loop() {
  YunClient client = Server.accept();

  if (client) {
    Serial.println("Client Connected");
    
    //Console.println(request);
    //process(client);
    client.stop();
  }

  delay(50);
  
  IPAddress server(192,168,1,2);   // ESTA LINHA ESTA AQUI NO MEIO DO LOOP...      
  if(client.connect(server,5555)){        
  Serial.println("connected");
  }
  client.stop();
  delay(500);     
}

Client

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>


IPAddress ip(192, 168, 1, 2);//MORADA IP DEFINIDA AQUI.....

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
YunClient client;

void setup() {
   Serial.begin(9600);
   Bridge.begin();
  }
  
  void loop()
  {
  
  // if you get a connection, report back via serial:
  if (client.connect(server, 5555)) {      //VARIAVEL server USADA AQUI... VARIAVEL ip NUNCA E USADA. 
    Serial.println("connected");
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
  client.stop();
  delay(500);
}

Ve os comentarios em CAPS no codigo em cima.

#include <Bridge.h>
#include <YunServer.h>
#include <YunClient.h>

IPAddress server(192,168,1,1);
IPAddress ip(192, 168, 1, 2);

YunClient client;

void setup() {
Serial.begin(9600);
Bridge.begin();
}

void loop()
{
if (client.connect(server, 5555))
{
Serial.println("connected");
}
else {
Serial.println("connection failed");
}
client.stop();
delay(500);
}

Neste caso a variavel IP define o IP do YUN que estou a utilizar e no IP do server identifico o outro.
Na linha " if (client.connect(server, 5555))" ele liga ao server definido em cima com o ip e a porta pre-defenida é 5555.

Estou a perceber isto correctamente?

No caso do server se retirar a linha do IPadress o programa da-me erro... supostamente nao deveria definir o ip do server e do client no inicio do programa?

Ok... este codigo e diferente do que colocaste la em cima.

IPAddress server(192,168,1,1);
IPAddress ip(192, 168, 1, 2);

Estas linhas definem variaveis... Se nao as usares, sao inuteis.
Se tentares usar uma variavel e nao a teres definido antes, o programa da erro... e por isso que nao podes apagar esta linha.