Hola a todos,
mi problema está en que tengo dos arduino ethernet. Uno lo uso de cliente y otro de servidor. El servidor con un navegador me funciona perfectamente, pero en el momento que intento conectarme con el otro arduino (Web Client) el web client no funciona.
Uso el ejemplo de web cliente que viene con arduino y lo probé con google y otras páginas y me funciona pero con mi arduino servidor no llega a funcionar.
SOLUCION EL CLIENTE Y EL SERVIDOR TENIAN LA MISMA MAC.
////////////////////////////////////
#include <Ethernet.h>
#include <SPI.h>
#define maxLength 25
////////////////////////////////////
// Constantes Boya:
const int pinBoya1 = 7; // el número del pin de la boya
// Variables Boya:
int estBoya1 = 0; // variable para leer el estado de la boya
// Variables Servidor:
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //MAC del Arduino
byte ip[] = { 192, 168, 0, 20 }; //IP del Arduino
byte gateway[] = { 192, 168, 0, 1 };
byte subnet[] = { 255, 255, 255, 0 };
String inString = String(maxLength); //Cadena con parámetros del servidor HTTP ?do=DO ?do=B1
String accion; //Acción extraida de inString
Server server(80);
////////////////////////////////////
//Inicio
void setup() {
// se inicializa el pin boya1 de entrada:
pinMode(pinBoya1, INPUT);
// se inicializa ethernet, el servidor y el puerto serie
Ethernet.begin(mac, ip, gateway, subnet);
server.begin();
Serial.begin(9600);
}
////////////////////////////////////
//Cuerpo
void loop(){
// capturamos el estado de la boya
estBoya1 = digitalRead(pinBoya1);
///// SERVIDOR /////////
Client client = server.available();
// Si tenemos cliente
if (client) {
boolean current_line_is_blank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
if (inString.length() < maxLength) {
inString.concat(c);
}
if (c == '\n' && current_line_is_blank) {
Serial.println(inString);
if (inString.indexOf("?")>0) {
int Pos_d = inString.indexOf("d");
accion = inString.substring((Pos_d+3), (Pos_d+5));
Serial.println(accion);
if (accion.equals("B1")) {
Serial.println("Ver estado boya 1");
web_B1(client, estBoya1);
} else { // Mostramos el estado
Serial.println("Mostrar estado del sistema parámetro");
web_estado(client, estBoya1);
} // Fin acción
//No hay parámetros
} else { // Mostramos el estado
Serial.println("Mostrar estado del sistema");
web_estado(client, estBoya1);
} //fin (inString.indexOf("?")!=-1) parámetros http
break;
} // fin (c == '\n' && current_line_is_blank)
if (c == '\n') {
current_line_is_blank = true;
} else if (c != '\r') {
current_line_is_blank = false;
} // fin página
}
} //fin While
delay(1);
inString = "";
client.stop();
}
}// FIN CUERPO
void web_B1(Client client, int estBoya1){
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("");
if (estBoya1 == HIGH) {
client.println("-B1ON-\n");
} else {
client.println("-B1OF-\n");
}
client.println("");
}
void web_estado(Client client, int estBoya1){
client.println("HTTP/1.1 200 OK");
client.println("Content-Type: text/html");
client.println();
client.println("<meta http-equiv=refresh content=3;url=/>Estado Castiello");
client.println("
Estado Boyas Castiello
");client.println("
");
client.println("
");
client.print("La boya 1 está: ");
if (estBoya1 == HIGH) {
client.println("<img src=data:image/gif;base64,R0lGODlhEAAQAKIAAAD/AACGAISGhMbHxv///wAAAAAAAAAAACwAAAAAEAAQAAADUEiq1b6QNEHFGC2W6srFyyY0QAk0V8GM5WJ6qlgA7ptuc20GME4TplKAJ/EBg4BhDIYUKosp5JAokWB2U6LKiilkM1XGpxPSeAYQcKRIhiQAADs= alt=Encendido >");
client.print("ENCENDIDA");
} else if (estBoya1 == LOW) {
client.println("<img src=data:image/gif;base64,R0lGODlhEAAQAKIAAP////f398DAwICAgAAAAAAAAAAAAAAAACwAAAAAEAAQAAADTRiq1L4wtEGHEC2S6sjFyzY0H+aB0ngB7OcRqcoC5Tl5cymot9CWFAKgR9MFhy/dhYO8nD7MoQQDrYykU5O1wYIxXI6ZN3SaISPkTiQBADs= alt=Apagado >");
client.print("APAGADA");
} else {
client.print("DESCONOCIDO");
}
client.println("
");
client.println("
");
//client.println("");
client.println("");
}