Hola soy algo nuevo en estos temas, quisiera ver si alguno me ayudaba en mi problema, lo que pasa es que quiero enviar y recibir datos de un arduino ethernet shield a otro (CLIENTE-SERVIDOR). eh podido conseguir enviar un dato de mi Ethernet Shield cliente a mi Ethernet Shield Server y asi logro prender un led en mi server, pero mi problema radica en que quiero enviar una orden de prender un led de mi server a mi cliente pero no lo consigo.
Espero su ayuda con sus conocimientos, muchas gracias.
/////////////CODIGO 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, 100, 125); // DIRECCIÓN IP ASIGNADA AL SERVIDOR
byte gateway[] = { 192, 168, 100, 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
const int rele = 5 ;
int PR;
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
pinMode (rele, OUTPUT);
}
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.....
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
PR = client.write('F');
Serial.println(PR);
if(c =='E'){
// Serial.println(" EL SUELO ESTA SECO ");
Serial.println(c);
digitalWrite(rele, HIGH);
delay(1500);
}
}
}
}
//////////////********************//////////////////
CODIGO 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, 100, 178);
byte server[] = { 192, 168, 100, 125 }; // IP DEL ARDUINO SERVIDOR
int SW, SW2; // CREA LA VARIABLE DE TIPO ENTERO "SW"
EthernetClient client; // CREA UN CLIENTE, QUE EN ESTE CASO SE LLAMA "client"
const int rele = 4;
const int rele2 = 5, llave = 6;
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,LOW); // COLOCA EL PIN 4 DE LA ARDUINO EN UN NIVEL LÓGICO ALTO
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);
pinMode (rele, OUTPUT);
pinMode (rele2, OUTPUT);
}
void loop()
{
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
SW = client.write('E');
Serial.println(SW); // IMPRIME EL VALOR DE RETORNO DE LA FUNCIÓN WRITE() QUE ES EN BYTES
// EthernetClient client = server.available(); // COMIENZA A LEER LO QUE ESTA ENTRANDO EN EL BUFFER DEL SERVIDOR
if(client);
client.available();
if (client.connected())
{ // SI EL CLIENTE ESTA CONECTADO.... ENTONCES.....
Serial.println("CONECTADO"); // IMPRIME EN EL PUERTO SERIAL
int c = client.read();
Serial.println("LEO ESTO:");
Serial.print(c);
}
delay(1000);
}