Ya logré conectar 2 arduinos via ethernet.. creo que se puede mejorar la programación dado que soy novato en el tema. les subo las programaciones de servidor y cliente. Basicamente logré encender un led dado un pulsador en otro arduino. ambas placas son arduino uno con el shield ethernet con el wiznet 5100.
aca la prog del servidor
#include <SPI.h>
#include <Ethernet.h>
/*CONFIGURACION DE LOS PARAMETROS ETHERNET SERVIDOR*/
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
// byte ip[] = { 192, 168, 1, 123 }; OTRA FORMA DE ESCRIBIR LA DIRECCIÓN IP
IPAddress ip(192, 168, 1, 125); // DIRECCIÓN IP ASIGNADA AL SERVIDOR
byte gateway[] = { 192, 168, 1, 1 }; // LA DIRECCIÓN DE PUERTA DE ENLACE AL ROUTER
byte subnet[] = { 255, 255, 255, 0 }; // LA MÁSCARA SUBNET DEL ROUTER
EthernetServer server = EthernetServer(12535); // CREA UN SERVIDOR QUE ESTA ATENTO A CONEXIONES ENTRANTES POR UN PUERTO DADO
void setup()
{
Ethernet.begin(mac, ip, gateway, subnet); // INICIA LA LIBRERÍA ETHERNET Y LA CONFIGURACIÓN DE LA RED
server.begin(); // INDICA AL SERVIDOR QUE COMIENCE A RECIBIR CONEXIONES ENTRANTES
pinMode(4,OUTPUT); // CONFIGURA EL PIN 4 DE ARDUINO COMO SALIDA
pinMode(3,OUTPUT); // CONFIGURA EL PIN 3 DE ARDUINO COMO SALIDA
digitalWrite(4,HIGH); // DESHABILITA LA MEMORIA SD
Serial.begin(9600); // COMIENZA LA COMUNICACIÓN SERIAL A 9600 BAUDIOS
Serial.print("server is at "); // IMPRIME EN EL MONITOR SERIAL
Serial.println(Ethernet.localIP()); // IMPRIME LA IP LOCAL EN EL MONITOR SERIAL
}
void loop()
{
EthernetClient client = server.available(); // COMIENZA A LEER LO QUE ESTA ENTRANDO EN EL BUFFER DEL SERVIDOR
if (client)
{ // SI EL CLIENTE ESTA CONECTADO.... ENTONCES.....
Serial.println("client connected"); // IMPRIME EN EL PUERTO SERIAL
while (client.connected()) // MIENTRAS EL CLIENTE ESTÉ CONECTADO..... HACE.....
{
int c = client.read(); // CREA LA VARIALBE DE TIPO ENTERO "C" EN DONDE SE ALMACENA LO LEIDO EN EL BUFFER
if (c == 'P') // SI EL ENTERO "C" ES IGUAL AL VALOR ASCII 80 QUE EQUIVALE AL VALOR 'P'
{
Serial.println(c); // IMPRIME EN EL MONITOR SERIAL EL VALOR DE LA VARIABLE "C"
digitalWrite(3,HIGH); // ENTONCES ASIGNA EL VALOR "HIGH" O 5 VOLTS AL PIN 3 DE ARDUINO
delay(2000); // DEMORA 2 SEGUNDOS
digitalWrite(3,LOW); // ASIGNA EL VALOR "LOW" O 0 VOTLS AL PIN 3 DE ARDUINO (ENCIENDE Y APAGA EL LED)
}
}
delay(500);
}
}
y aca la prog del cliente
#include <Ethernet.h>
#include <SPI.h>
/*CONFIGURACION DE LOS PARAMETROS ETHERNET CLIENTE*/
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x2F, 0xE4 };
// byte ip[] = { 192, 168, 1, 178 }; OTRA FORMA DE COLOCAR LA DIRECCION IP
IPAddress ip(192, 168, 1, 178);
byte server[] = { 192, 168, 1, 125 }; // IP DEL ARDUINO SERVIDOR
int SW; // CREA LA VARIABLE DE TIPO ENTERO "SW"
EthernetClient client; // CREA UN CLIENTE, QUE EN ESTE CASO SE LLAMA "client"
void setup()
{
Ethernet.begin(mac, ip, server); // INICIA LA LIBRERÍA ETHERNET Y LA CONFIGURACIÓN DE LA RED
pinMode(3, INPUT); // CONFIGURA EL PIN 3 DE ARDUINO COMO UNA ENTRADA DIGITAL
pinMode(4,OUTPUT); // CONFIGURA EL PIN 4 COMO SALIDA DIGITAL (sd)
digitalWrite(4,HIGH); // COLOCA EL PIN 4 DE LA ARDUINO EN UN NIVEL LÓGICO ALTO
delay(100);
Serial.begin(9600); // COMIANZA LA COMUNICACIÓN SERIAL A 9600 BAUDIOS DE VELOCIDAD
client.flush(); // DESCARTA TODOS LOS DATOS ALMACENADOS EN EL BUFFER
delay(500);
}
void loop()
{
if(digitalRead(3)== LOW) // SI EL PIN DIGITAL 3 ESTA EN BAJO....... ENTONCES.....
{
Serial.flush(); // LIMPIA EL BUFFER DEL MONITOR SERIAL
Serial.print("Esperando el boton"); // IMPRIME EN EL MONITOR SERIAL
}
else // CASO CONTRARIO A LA CONDICIÓN INICIAL
{
Serial.println("Entrada 3 en alto"); // IMPRIME EN EL MONITOR SERIAL
client.flush(); // NUEVAMENTE LIMPIA LOS DATOS DEL BUFFER DE DATOS DE LA CONEXIÓN ETHERNET
client.connect(server, 12535); // CONECTA EL CLIENTE AL SERVIDOR POR SU IP Y POR EL PUERTO ESPECIFICADO
Serial.println("connected"); // IMPRIME EN MONITO SERIAL
delay(100);
SW = client.write('P'); // LE ASIGNA LA VARIABLE "SW" EL VALOR QUE SE ESCRIBIRÁ EN EL SERVIDOR
Serial.println(SW); // IMPRIME EL VALOR DE RETORNO DE LA FUNCIÓN WRITE() QUE ES EN BYTES
delay(1000);
}
}