Go Down

Topic: como servidor y como cliente, es posible?? [SOLUCIONADO] (Read 1 time) previous topic - next topic

Jossema106

Mar 24, 2013, 05:53 pm Last Edit: Mar 25, 2013, 06:39 pm by Jossema106 Reason: 1
Hola!

Vamos a ver si me se explicar, necesito que arduino se conecte a una web para hacer una inserción en vdd, todo correcto.
Tambien que una web se conecte a arduino para sacar datos en dicha web, todo correcto.

Pero el problema viene cuando necesito ambas cosas en el mismo sketch, es decir, que cuando riegue se conecte al servidor y haga la insercion y por otro lado que desde una web pueda acceder a arduino, y esto es lo que no consigo. O va una cosa o va la otra!

y creo que el problema está en el ethernet.begin(mac) -> funciona la insercion pero no el acceso desde la web.
                                             ethernet.begin(mac, ip) -> viceversa.


Alguna idea?
Proyecto:
http://duinoblog.blogspot.com.es/

maxid

no el problema no es eso. Con esos comandos le dices a que ip/mascara le asignas a tu arduino.
Pimero debes revisar si tu router o red no tiene algun filtro/firewall. Despues desde tu web debes acceder a tu arduino no por ip (salvo que le puedas asignar una ip publica), ya que la que le pones es de tu subred privada.
Debes usar un cliente dyndns y redireccionar del exterior a la ip/puerto privado.
Por otro lado utiliza el ejemplo del ethernet server, ya que tu arduino en realidad siempre va a ser un server y por un instante un cliente, que solo envia una peticion, como si fuera una contestacion a un cliente.
El que pregunta aprende, el que responde aprende a responder.

Jossema106

Problema del firewal y demas lo descarto ya que si lo hago por separado, es decir, dos programas distintos va sin problema
Proyecto:
http://duinoblog.blogspot.com.es/

noter

Tanto el server como el cliente deben enviar y recibir datos, así que si el problema no está en el acceso al arduino, ya que ambos te funcionan por separado, claramente el problema está en la gestión de los datos que llegan; en gestionar el tráfico distinguiendo cuándo proviene de un cliente o de un servidor. Vamos; que el problema casi seguro que está en la mezcla de los datos transmitidos y recibidos.

Jossema106

#4
Mar 25, 2013, 05:47 pm Last Edit: Mar 25, 2013, 05:50 pm by Jossema106 Reason: 1
Os pongo el codigo a ver si aclaramos algo:
Code: [Select]

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

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //physical mac address
     
         
char serverName[] = "google.es";

// 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):
EthernetClient client;
EthernetServer server(5675);                                      //server port
String readString = String(30); //string for fetching data from address
char url[100];      
char meta[200];
void setup() {
// Open serial communications and wait for port to open:
 Serial.begin(9600);

 // start the Ethernet connection:

      Ethernet.begin(mac);


}

void loop()
{
   Serial.println("conectando...");


  // if you get a connection, report back via serial:
 if (client.connect(serverName, 80)) {
   Serial.println("conectado");
   
   // Make a HTTP request:
     char url[100];      
     char meta[200];
     char location[1000] = "http://google.es";
   
     sprintf(url, "tiempo=%d&litros=%d&zona=%d");
     sprintf(location, "http://google.es?regando&%s'>", url);
     
   
     client.print("GET ");
     client.println(location);
     client.println();
 }
 else {
   // kf you didn't get a connection to the server:
   Serial.println("connection failed");
 }
 // if there are incoming bytes available
 // from the server, read them and print them:

EthernetClient client = server.available();

         
         if (client ) {
             while (client.connected()) {
               
                  if (client.available()) {
             
             
                  char c = client.read();
                  //read char by char HTTP request
                  if (readString.length() < 30)
                  {
                  //store characters to string
                  readString += c;
                  }  
                  //output chars to serial port
                 
                  //if HTTP request has ended
                  if (c == '\n') {
                 
                  readString.trim();
                 
               
                 Serial.println(readString);

                 
             
                if(readString == ("GET /?terraza HTTP/1.1") ) //MODIFICAR TIEMPO
                 {
                    sprintf(url, "http://google.es?temperaturaExt=%d&humedadRel=%d&h1=%d&h2=%d");
                    sprintf(meta, "<meta http-equiv='Refresh' content='0;url=%s'>", url);
                   
                   
                    client.println("HTTP/1.1 200 OK");
                    client.println("<body><html>");
                    client.println("Content-Type: text/html");
                    client.println();
                    Serial.println(meta);
                    client.println(meta);      
                    client.println("</body></html>");
                  }
              else  if(readString == ("GET /?deposito HTTP/1.1") ) //MODIFICAR TIEMPO
                 {
                   
                   
                    client.println("HTTP/1.1 200 OK");
                    client.println("<body><html>");
                    client.println("Content-Type: text/html");
                    client.println();
                    Serial.println(meta);
                    client.println(meta);      
                    client.println("</body></html>");
                  }
             
               
              else{
                   sprintf(url, "http://google.es");
                    sprintf(meta, "<meta http-equiv='Refresh' content='0;url=%s'>", url);
                   
                   
                    client.println("HTTP/1.1 200 OK");
                    client.println("<body><html>");
                    client.println("Content-Type: text/html");
                    client.println();
                    Serial.println(meta);
                    client.println(meta);      
                    client.println("</body></html>");
                 }
               
         
                  //clearing string for next read
                  readString="";
                  //stopping client
                  client.stop();
                  }
               }
             }
           

          }
}
Proyecto:
http://duinoblog.blogspot.com.es/

fersandie

Hola:

Yo tengo el mismo problema. En el asunto dice solucionado pero en el texto no se especifica cómo. ¿Está solucionado? ¿Cual era el problema?

Jossema106

El unico problema era que el puerto lo tenia abierto hacia una ip y tenia asignada otra sin darme cuenta.


Espero que te sirva
Proyecto:
http://duinoblog.blogspot.com.es/

Go Up