Conexión ethernet entre 2 arduinos

Hola quisiera conectar 2 arduinos a través de una intranet. Lo que preciso hacer es que al accionar un pulsador del lado del cliente en el servidor se encienda un rele, y al mismo tiempo que cuando en el servidor se accione un pulsador se encienda un Led del lado cliente. La primer parte ya logre hacerla funcionar. Pero no puedo hacer la parte de leer el estado del pin en el servidor. Podrían ayudarme?

Presenta el código que tienes y lo vemos.

Por favor lee en las Normas del foro la forma correcta de adjuntar el código.

Saludos

Gracias por responder, acá pego el código de lo que ya tengo
Configuración en el servidor:

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

/*CONFIGURACION DE LOS PARAMETROS ETHERNET SERVIDOR*/

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };  
                                                    
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
 digitalWrite(3,HIGH);                              // CONFIGURA EL PIN 3 EN ALTO PARA ENCENDER EL RELAY
 
}

void loop()
{
  int c;  
 EthernetClient client = server.available();
 if (client)
 {                                                  // SI EL CLIENTE ESTA CONECTADO.... ENTONCES.....
      while (client.connected())                    // MIENTRAS EL CLIENTE ESTÉ CONECTADO..... HACE.....
     { 
       c = client.read();                           // 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'
       {
       digitalWrite(3,LOW);                        // ENTONCES ASIGNA EL VALOR "LOW" AL PIN 3 DE ARDUINO
       }
       if (c== 'O'){
        digitalWrite(3,HIGH);                      // SI "C" ES IGUAL A "O" ENTONCES VUELVE ASIGNA EL VALOR HIGH AL PIN 3
       }
     }
     
 delay(500);  
 }
}

Acá debajo la configuración en el 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;

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
 digitalWrite(3,LOW);
 delay(100);
 client.flush();                                     // DESCARTA TODOS LOS DATOS ALMACENADOS EN EL BUFFER
 delay(500);
}

void loop()
{
 if(digitalRead(3)== HIGH)                            // SI EL PIN DIGITAL 3 ESTA EN ALTO....... ENTONCES.....
    {
   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
   delay(100);                
   SW =  client.write('P');                          // LE ASIGNA LA VARIABLE "SW" EL VALOR QUE SE ESCRIBIRÁ EN EL SERVIDOR
   delay(1000);
   }
  else{
    client.flush();                                  // SI EL PIN DIGITAL 3 ESTA EN BAJO
    client.connect(server, 12535);
    delay(100);
    SW = client.write('O');                         // ASIGNA A LA VARIABLE SW EL VALOR 'O'
    delay(1000);
  }
 }

Espero puedan ayudarme. El proyecto se trata de abrir y cerrar una barrera, en este código lo que hace es mantener siempre encendido el relay a no ser que se active un pulsador en el pin 3 del cliente. Lo que quiero hacer ahora es que cuando se cierra la barrera active un pulsador en algún pin del servidor y poder leer esto desde lado del cliente para encender un led que me indique que la barrera ya bajó. Espero que me entiendan. Gracias

La verdad tengo 0 experiencia con Ethernet pero por lo que estuve viendo tendrías que usar server.write() que manda un byte o un array a todos los clientes.

Saludos

Inicializa el EthernetClient.
Envía desde el cliente datos al servidor comandos con carro de linea. Ejemplo client.println (" activarpin3")
Compara la lectura en el servidor Ejemploif (c == '\n')
Realiza el código en el servidor para que cuando llegue " activarpin3" se active el pin 3.
Éxitos.

This topic was automatically closed 120 days after the last reply. New replies are no longer allowed.