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.