Pages: [1]   Go Down
Author Topic: Controlar un arduino desde otro conectados por ethernet  (Read 927 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Newbie
*
Karma: 0
Posts: 14
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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

Offline Offline
God Member
*****
Karma: 6
Posts: 632
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 . . .
« Last Edit: January 19, 2013, 09:07:13 am by tikissmikiss » Logged

Offline Offline
Newbie
*
Karma: 0
Posts: 3
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

. . . 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);
    }
}

« Last Edit: January 19, 2013, 09:06:30 am by tikissmikiss » Logged

Pages: [1]   Go Up
Jump to: