Pages: [1]   Go Down
Author Topic: como servidor y como cliente, es posible?? [SOLUCIONADO]  (Read 1017 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Full Member
***
Karma: 1
Posts: 208
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
« Last Edit: March 25, 2013, 12:39:40 pm by Jossema106 » Logged


Cordoba
Offline Offline
God Member
*****
Karma: 40
Posts: 686
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

El que pregunta aprende, el que responde aprende a responder.

Offline Offline
Full Member
***
Karma: 1
Posts: 208
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Problema del firewal y demas lo descarto ya que si lo hago por separado, es decir, dos programas distintos va sin problema
Logged


Palencia, Spain
Offline Offline
God Member
*****
Karma: 25
Posts: 502
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 208
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Os pongo el codigo a ver si aclaramos algo:
Code:
#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();
                   }
                }
              }
            

           }
}
« Last Edit: March 25, 2013, 11:50:31 am by Jossema106 » Logged


Offline Offline
Newbie
*
Karma: 0
Posts: 1
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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?
Logged

Offline Offline
Full Member
***
Karma: 1
Posts: 208
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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


Espero que te sirva
Logged


Pages: [1]   Go Up
Jump to: