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:
/**
* 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 . . .