Arduino Forum

International => Español => Software => Topic started by: mjnavapo on Jan 05, 2013, 11:16 pm

Title: Controlar un arduino desde otro conectados por ethernet
Post by: mjnavapo on Jan 05, 2013, 11:16 pm
Hola, alguien sabe como controlar un arduino desde otro arduino que se encuentren conectados por red?

Lo que quiero es que desde unos botones conectados al arduino 1, poder activar y desactivar unos reles conectados al arduino 2.

Gracias.
Title: Re: Controlar un arduino desde otro conectados por ethernet
Post by: Cheyenne on Jan 09, 2013, 05:18 pm
No estoy seguro si te interferirá con algo que puedas tener programado pero en principio algo así sencillo lo puedes hacer con el envío y recepción de comandos por UDP. En el IDE tienes el ejemplo Ejemplos -> Ethernet -> UDPSendReceiveString.
Title: Re: Controlar un arduino desde otro conectados por ethernet
Post by: tikissmikiss on Jan 19, 2013, 12:53 pm

Hola, alguien sabe como controlar un arduino desde otro arduino que se encuentren conectados por red?

Lo que quiero es que desde unos botones conectados al arduino 1, poder activar y desactivar unos reles conectados al arduino 2.

Gracias.

Algo relativamente sencillo podría ser así:

Tarjeta Arduino 1 (Cliente), será la que recoja el estado de los botones:
Quote

/**
* ardu2ardu.ino - Transmision de entradas digitales via Ethernet.
* Creado por Jose Herce, alias Tikissmikiss el 19, Enero de 2013.
* No publicado bajo ninguna licencia. Para uso publico.
*
* En este ejemplo activaremos 3 salidas asignadas a los pines 11, 12 y 13
* de una tarjeta Arduino. En consecuencia del estado de estas entradas
* en otra tarjeta Arduino activaremos o desactivaremos tres salidas
* asignadas a las entradas 1, 2, 3. Las tarjetas se comunicaran por
* Ethernet requiriendo ambas tarjetas de disponer del shield Ethernet.
* La tarjeta de los botones trabajara en modo cliente mientras que la de
* los reles trabajara en modo servidor.
*
* Version de codigo para la tarjeta Cliente
**/

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

// Declaramos constantes para envio de estados de pines de entrada
const byte IN_1_ON = 0x41;
const byte IN_1_OFF = 0x61;
const byte IN_2_ON = 0x42;
const byte IN_2_OFF = 0x62;
const byte IN_3_ON = 0x43;
const byte IN_3_OFF = 0x63;

// Declaracion de Senales Hardware
int inPin_1 = 1, inPin_2 = 2, inPin_3 = 3;

// Declaracion de Parametros de red
byte mac[] = {
   0xDE, 0xFD, 0xE5, 0xD3, 0x0C, 0x9A};
IPAddress ipLocal(192,168,2,177);
IPAddress puertaEnlace (192,168,2,1);
IPAddress mascaraSubRed (255,255,255,0);
// IP de la otra tarjeta
IPAddress ipArduServ(192,168,2,55);

// Crearmos un cliente
EthernetClient cliente;

void setup() {
   // Configuracion de Senales Hardware
   pinMode(inPin_1, INPUT); //Al activarse se activara la salida 11 de la otra tarjeta
   pinMode(inPin_2, INPUT); //Al activarse se activara la salida 12 de la otra tarjeta
   pinMode(inPin_3, INPUT); //Al activarse se activara la salida 13 de la otra tarjeta

   // Configuracion de la red del dispositivo
   Ethernet.begin(mac, ipLocal, puertaEnlace, mascaraSubRed);
}

void loop() {
   // Esperamos a obtener conexion con la IP de la otra tarjeta por el puerto 23
   while (!cliente.connect(ipArduServ, 23)) {
       // Una vez conectados enviamos el estado de las entradas.
       // si se desea se pueden omitir los delay()
       if (digitalRead(inPin_1)==HIGH) cliente.write(IN_1_ON);
       delay(200);
       if (digitalRead(inPin_1)==LOW) cliente.write(IN_1_OFF);
       delay(200);
       if (digitalRead(inPin_2)==HIGH) cliente.write(IN_2_ON);
       delay(200);
       if (digitalRead(inPin_2)==LOW) cliente.write(IN_2_OFF);
       delay(200);
       if (digitalRead(inPin_3)==HIGH) cliente.write(IN_3_ON);
       delay(200);
       if (digitalRead(inPin_3)==LOW) cliente.write(IN_3_OFF);
       delay(200);
   }
}



Continua . . .
Title: Re: Controlar un arduino desde otro conectados por ethernet
Post by: tikissmikiss on Jan 19, 2013, 12:55 pm
. . . Continuación

Tarjeta Arduino 2 (Servidor), será la que active los reles:
Quote

/**
* ardu2ardu.ino - Transmision de entradas digitales via Ethernet.
* Creado por Jose Herce, alias Tikissmikiss el 19, Enero de 2013.
* No publicado bajo ninguna licencia. Para uso publico.
*
* En este ejemplo activaremos 3 salidas asignadas a los pines 11, 12 y 13
* de una tarjeta Arduino. En consecuencia del estado de estas entradas
* en otra tarjeta Arduino activaremos o desactivaremos tres salidas
* asignadas a las entradas 1, 2, 3. Las tarjetas se comunicaran por
* Ethernet requiriendo ambas tarjetas de disponer del shield Ethernet.
* La tarjeta de los botones trabajara en modo cliente mientras que la de
* los reles trabajara en modo servidor.
*
* Version de codigo para la tarjeta Servidor
**/

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

// Declaramos constantes para la recepcion de estados de pines de entrada.
// deben de ser las mismas que en la otra tarjeta
const byte IN_1_ON = 0x41;
const byte IN_1_OFF = 0x61;
const byte IN_2_ON = 0x42;
const byte IN_2_OFF = 0x62;
const byte IN_3_ON = 0x43;
const byte IN_3_OFF = 0x63;

// Declaracion de Senales Hardware
int outPin_11 = 11, outPin_12 = 12, outPin_13 = 13;

// Declaracion de Parametros de red
byte mac[] = {
   0x6E, 0xFD, 0xE5, 0x23, 0x0C, 0x9F};
IPAddress ipLocal(192,168,2,55);
IPAddress puertaEnlace (192,168,2,1);
IPAddress mascaraSubRed (255,255,255,0);

// Creamos un servidor y le asignamos el puerto de escucha 23
EthernetServer servidor = EthernetServer(23);

void setup() {
   // Configuracion de Senales Hardware
   pinMode(outPin_11, OUTPUT); //Se activara si se activa la entrada 1 de la otra tarjeta
   pinMode(outPin_12, OUTPUT); //Se activara si se activa la entrada 2 de la otra tarjeta
   pinMode(outPin_13, OUTPUT); //Se activara si se activa la entrada 3 de la otra tarjeta

   // Configuracion de la red del dispositivo
   Ethernet.begin(mac, ipLocal, puertaEnlace, mascaraSubRed);

   // Inicializamos el servidor
   servidor.begin();
}

void loop() {
   if (servidor.available()) {
       // si hay datos disponibles los asignamos a un cliente
       EthernetClient cliente = servidor.available();
       // y leemos los datoss
       byte dato = cliente.read();
       // dependiendo del dato recibido actuamos las salidas
       if (dato == IN_1_ON) digitalWrite(outPin_11,HIGH);
       if (dato == IN_1_OFF) digitalWrite(outPin_11,LOW);
       if (dato == IN_2_ON) digitalWrite(outPin_12,HIGH);
       if (dato == IN_2_OFF) digitalWrite(outPin_12,LOW);
       if (dato == IN_3_ON) digitalWrite(outPin_13,HIGH);
       if (dato == IN_3_OFF) digitalWrite(outPin_13,LOW);
       // devolvemos un eco al cliente para vaciar el bufer
       cliente.write(dato);
   }
}