Go Down

Topic: Arduino Web Server con Arduino Web Client (SOLUCIONADO) (Read 1 time) previous topic - next topic

cezosu

Nov 03, 2011, 05:11 pm Last Edit: Nov 04, 2011, 10:56 am by cezosu Reason: 1
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("<html><body>");
 if (estBoya1 == HIGH) {
   client.println("-B1ON-\n");
 } else {
   client.println("-B1OF-\n");
 }
 client.println("</body></html>");
}

void web_estado(Client client, int estBoya1){
 client.println("HTTP/1.1 200 OK");
 client.println("Content-Type: text/html");
 client.println();
 client.println("<html><head><meta http-equiv=refresh content=3;url=/><title>Estado Castiello</title></head><body>");
 client.println("<h1>Estado Boyas Castiello</h1>");
                 
 client.println("<br />");
 client.println("<br />");

 client.print("La boya 1 est&aacute;: ");
         
 if (estBoya1 == HIGH) {
   client.println("<img src=data:image/gif;base64,R0lGODlhEAAQAKIAAAD/AACGAISGhMbHxv///wAAAAAAAAAAACwAAAAAEAAQAAADUEiq1b6QNEHFGC2W6srFyyY0QAk0V8GM5WJ6qlgA7ptuc20GME4TplKAJ/EBg4BhDIYUKosp5JAokWB2U6LKiilkM1XGpxPSeAYQcKRIhiQAADs= alt=Encendido >");
   client.print("<font color=green>ENCENDIDA</font>");
 } else if (estBoya1 == LOW) {
   client.println("<img src=data:image/gif;base64,R0lGODlhEAAQAKIAAP////f398DAwICAgAAAAAAAAAAAAAAAACwAAAAAEAAQAAADTRiq1L4wtEGHEC2S6sjFyzY0H+aB0ngB7OcRqcoC5Tl5cymot9CWFAKgR9MFhy/dhYO8nD7MoQQDrYykU5O1wYIxXI6ZN3SaISPkTiQBADs= alt=Apagado >");
   client.print("<font color=red>APAGADA</font>");
 } else {
   client.print("<font color=yellow>DESCONOCIDO</font>");
 }  
         
 client.println("<br />");
 client.println("<br />");
 //client.println("<form method=get><input type=submit name=do value=ENCENDER><input type=submit name=do value=APAGAR><input type=submit name=do value=REFRESCAR></form>");        
 client.println("</body></html>");
}


cezosu

Este es el código del web client.

#include <SPI.h>
#include <Ethernet.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,0,21 };
byte server[] = { 192,168,0,20 }; // Google

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
Client client(server, 80);

void setup() {
  // start the Ethernet connection:
  Ethernet.begin(mac, ip);
  // start the serial library:
  Serial.begin(9600);
  // give the Ethernet shield a second to initialize:
  delay(1000);
  Serial.println("connecting...");

  // if you get a connection, report back via serial:
  if (client.connect()) {
    Serial.println("connected");
    // Make a HTTP request:
    client.println("GET /?do=B1 HTTP/1.1 \n");
    client.println("Host: 192.168.0.21 \n");
    client.println("Content-Type: text/html \n");
    client.println("Connection: close \n");
    client.println("\n\n");
    client.println();
  }
  else {
    // kf you didn't get a connection to the server:
    Serial.println("connection failed");
  }
}

void loop()
{
  // if there are incoming bytes available
  // from the server, read them and print them:
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }

  // if the server's disconnected, stop the client:
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();

    // do nothing forevermore:
    for(;;)
      ;
  }
}

cezosu

Ya lo he solucionado el problema es que tenía puesta la misma mac al cliente que al servidor.

Go Up