Go Down

Topic: [SOLUCIONADO] Servicio de hosting no atiende petición GET desde arduino (Read 4607 times) previous topic - next topic

templaries

Prueba así, lo mismo el salto de línea entre el GET y HTTP/1.0 afecta. Así es como se hace en la documentación.

Code: [Select]

if (client.connect(server, 80)) {  // Se conecta al servidor
    sprintf(buffer,"GET /riego/index.php?action=1&papiros=%d&variados=%d&ornamental=%d&citricos=%d&temp=%d&lluvia=%d HTTP/1.0",hpapiros,hvariados,hornamental,hcitricos,htemperatura,hlluvia);
client.println(buffer);
        client.println();



noter

Bueno.
¿Damos por sentado que sí estás conectando al servidor, no? El programa debería devolverte algo por serial, aunque sea un error o bad request, o algo.
He estado haciendo unas pruebas con telnet, y creo que con el get y el Host es suficiente. Si hay conexión prueba a ver lo siguiente:

Code: [Select]

char *cadena = "GET /index.php?action=1&papiros=7&variados=8&ornamental=9&citricos=10&temp=11&lluvia=12\r\n";
char *server = "riego.net16.net"
if (client.connect(server, 80)) {  // Se conecta al servidor
  client.print(cadena);
  client.print("Host: ");
  client.print(server);
  client.print("\r\n\r\n");
}


Probado en telnet, creo que sí funciona.

chujalt

Amigo chujalt está muy buena esa idea, voy a probar y te cuento como me fue.

Edito: Analizando mejor la situación creo que no me va a servir, porque yo necesito que toda la información se guarde de manera automática, sin intervención del usuario y sin tener que usar ningún otro componente aparte de las dos placas de arduino (la que recoge la información de los sensores) y la que procesa la información y la envía a la página php. Si yo uso tu método tendría que tener un computador encendido todo el tiempo para que se ejecute el código html que genera el servidor de arduino. Si hubiera alguna forma de que arduino interpretara código html como si fuera un navegador sería excelente.

Sigo mirando la forma de hacerlo desde Webclient. Gracias.
Saludos...

Pero no hace falta que tengas un computador encendido todo el tiempo habiendo servicios de hosting que lo hagan por ti.... en http://www.hostinger.es/  te dan dos GB de espacio, soporte php y bases de datos MySql gratis y sin publicidad.
chujalt.com

chronos682

Bueno.
¿Damos por sentado que sí estás conectando al servidor, no? El programa debería devolverte algo por serial, aunque sea un error o bad request, o algo.
He estado haciendo unas pruebas con telnet, y creo que con el get y el Host es suficiente. Si hay conexión prueba a ver lo siguiente:

Code: [Select]

char *cadena = "GET /index.php?action=1&papiros=7&variados=8&ornamental=9&citricos=10&temp=11&lluvia=12\r\n";
char *server = "riego.net16.net"
if (client.connect(server, 80)) {  // Se conecta al servidor
  client.print(cadena);
  client.print("Host: ");
  client.print(server);
  client.print("\r\n\r\n");
}


Probado en telnet, creo que sí funciona.
Eres un completo genio, siempre tuviste toda la razón, era problema del protocolo de comunicación, específicamente en los retornos de carro, también me puse a hacer pruebas con Telnet y me dí cuenta que obligatoriamente deben haber 2 retornos de carro seguidos luego de enviar el header host. Muchísimas, muchísimas gracias. No sabes cuánto tiempo llevo dándole vueltas a esto y era "tan fácil".

noter

#19
Oct 11, 2015, 12:12 pm Last Edit: Oct 11, 2015, 12:13 pm by noter
Ha sido un placer haberte sido de ayuda, y creo que puede ser interesante para muchos otros; por ello, por favor, edita tu primer post de este hilo y modifica el asunto a algo más descriptivo (realmente el problema finalmente no era configuración de router) agregando [SOLUCIONADO].
Por ejemplo:

[SOLUCIONADO] Servicio de hosting no atiende petición GET.

Saludos.

BUSTAMANTEHB

hola, saludos amigo chronos682, al principio del foro leí que hiciste un proyecto de arduino enviando datos a una base de datos alojada en un servidor local y que utilizaste el Xamp, bueno hermano yo estoy haciendo casi lo mismo pero con el servidor local wampserver, te cuento que de tanto googlear conseguí muchos códigos y ejemplos y de todos los que probé uno me funciono, pero..... me funciono un día, al siguiente día cuando fui a dar una demostración note que no estaban llegando los datos o el dato a la base de datos, no toque el código en absoluto, solo revise y revise y sigo revisando y buscando información para ver si doy con el problema y nada hermano, a ver si tu me puedes echar una mano te voy a postar el código para que lo analices ya que dices que el tuyo en servidor local te funciono . gracias...

te aclaro que las lineas que están comentadas son del proyecto original que conseguí en internet y lo que hice fue modificar o comentar lo que no me importaba que hiciera porque lo que quería era saber si me funcionaba para colocar el sensor como tal.

Code: [Select]

#include <Ethernet.h>
#include <SPI.h>
 
// Configuracion del Ethernet Shield
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x9B, 0x00}; // Direccion MAC
byte ip[] = { 192,168,77,51 }; // Direccion IP del Arduino
byte server[] = { 192,168,77,99 }; // Direccion IP del servidor
EthernetClient client;
//float temperatura;
//int analog_pin = 0;
int valor = 0;
 
void setup(void) {
  Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield
  delay(1000); // Esperamos 1 segundo de cortesia
  Serial.begin(9600);
}
 
void loop(void) {
  valor=55;
  //temperatura = analogRead(analog_pin);
  //temperatura = 5.0*temperatura*100.0/1024.0;
  //Display in Serial Monitor
  Serial.println(valor); //Return temperature to Monitor
  //Serial.println(" oC");
  // Proceso de envio de muestras al servidor
 
  Serial.println("Connecting...");
  if (client.connect(server, 80)>0) { // Conexion con el servidor
    client.print("GET /proyectos/ar_mysqli.php?valor="); // Enviamos los datos por GET
    client.println();
    client.print(valor);
    client.println();
    client.println();
    client.println(" HTTP/1.0");
    client.println("User-Agent: Arduino 1.0");
    client.println();
    client.println();
    Serial.println("Conectado");
  } else {
    Serial.println("Fallo en la conexion");
  }
  if (!client.connected()) {
    Serial.println("Disconnected!");
  }
  client.stop();
  client.flush();
  delay(9000); // Espero un minuto antes de tomar otra muestra
}

chronos682

Estás pasando mal las peticiones al servidor, le estás poniendo un avance de línea  (println) entre la cadena get y el valor. Si quieres hacerlo de esa forma debes poner client.print no client.println o hacerlo como hago yo que primero defino la cadena de conexión previamente y luego se la paso al objeto client. Mira el último código que hay en la respuesta de noter ese es el que yo utilizo.

BUSTAMANTEHB

amigo, esos avances de linea se los coloque porque el amigo noter me comento que probara con avance de lineas pero anteriormente lo tenia sin avances de lineas pero tampoco .
 ahora pregunto yo.... porque me funciono un día y al siguiente dia no quiso funcionar ....


BUSTAMANTEHB

si hermano ya lo modifique y tampoco. aqui el codigo.

Code: [Select]




#include <Ethernet.h>
#include <SPI.h>
 
// Configuracion del Ethernet Shield
byte mac[] = {0x90, 0xA2, 0xDA, 0x00, 0x9B, 0x00}; // Direccion MAC
byte ip[] = { 192,168,77,51 }; // Direccion IP del Arduino
byte server[] = { 192,168,77,99 }; // Direccion IP del servidor
EthernetClient client;
//float temperatura;
//int analog_pin = 0;
int valor = 0;
 
void setup(void) {
  Ethernet.begin(mac, ip); // Inicializamos el Ethernet Shield
  delay(1000); // Esperamos 1 segundo de cortesia
  Serial.begin(9600);
}
 
void loop(void) {
  valor=55;
  //temperatura = analogRead(analog_pin);
  //temperatura = 5.0*temperatura*100.0/1024.0;
  //Display in Serial Monitor
  Serial.println(valor); //Return temperature to Monitor
  //Serial.println(" oC");
  // Proceso de envio de muestras al servidor
 
  Serial.println("Connecting...");
  if (client.connect(server, 80)>0) { // Conexion con el servidor
    client.print("GET /proyectos/ar_mysqli.php?valor="); // Enviamos los datos por GET
    client.println(valor);
    client.print(" HTTP/1.0");
    client.println("User-Agent: Arduino 1.0");
    client.println();
    client.println();
    Serial.println("Conectado");
  } else {
    Serial.println("Fallo en la conexion");
  }
  if (!client.connected()) {
    Serial.println("Disconnected!");
  }
  client.stop();
  client.flush();
  delay(9000); // Espero un minuto antes de tomar otra muestra
}




aqui lo que me imprime el terminal serial con la shield conectada a internet
Code: [Select]


55
Connecting...
Conectado



aqui el mensaje del terminal serial con la shield deconectada al internet o al switch

Code: [Select]


55
Connecting...
Conectado
55
Connecting...
Fallo en la conexion
Disconnected!


BUSTAMANTEHB

amigo si me puedes pasar tu código el que te funciono con el servidor local porfa :

chronos682

Este es el código con el que pude recibir la petición, el que usé al comienzo con el servidor local no lo tengo pq trabajé sobre ese archivo hasta solucionar el problema, pero si este sirvio en un servidor web estoy seguro que en uno local también va a funcionar:

Code: [Select]

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

byte mac[] = {  0x90, 0xA2, 0xDA, 0x0D, 0x4E, 0xD9 }; // MAC de la tarjeta ethernet shield
byte ip[] = { 192,168,1,15 }; // Direccion ip local
byte server[] = {192, 168, 1, 90};
EthernetClient client;
//char buffer[200];
int hpapiros=1;
int hvariados=2;
int hornamental=3;
int hcitricos=4;
int htemperatura=5;
int hlluvia=6;

void GuardarDatos(int ihpapiros, int ihvariados, int ihornamental, int ihcitricos, int ihtemperatura, int ihlluvia)
{
  char cadena[200];
  Ethernet.begin(mac, ip); // inicializa ethernet shield
  delay(1000); // espera 1 segundo despues de inicializar
  Serial.println("Conectando..");
  if (client.connect(server, 80)) {  // Se conecta al servidor
    sprintf(cadena,"GET /index.php?action=1&papiros=%d&variados=%d&ornamental=%d&citricos=%d&temp=%d&lluvia=%d HTTP/1.1\r\n",ihpapiros,ihvariados,ihornamental,ihcitricos,ihtemperatura,ihlluvia);
    client.print(cadena);
    client.print("Host: riego.net16.net\r\n\r\n");
    Serial.println("Conexion exitosa");
  }
  else
  {
    Serial.println("Falla en la conexion");
  }
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
  }
}

void setup()
{
  Serial.begin(9600);
}

void loop()
{
  GuardarDatos(hpapiros, hvariados, hornamental, hcitricos, htemperatura, hlluvia);
  delay(5000);
}

Go Up