Go Down

Topic: Controlar un arduino desde otro conectados por ethernet (Read 1 time) previous topic - next topic

mjnavapo

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.

Cheyenne

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.

tikissmikiss

#2
Jan 19, 2013, 12:53 pm Last Edit: Jan 19, 2013, 03:07 pm by tikissmikiss Reason: 1

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 . . .

tikissmikiss

#3
Jan 19, 2013, 12:55 pm Last Edit: Jan 19, 2013, 03:06 pm by tikissmikiss Reason: 1
. . . 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);
   }
}


Go Up