ETHERNET CLIENT a direccion URL

Hola a todos!

Estoy intentando grabar los valores de temperatura que recibo con un DHT11 en una BD mysql que está levantada en un host de "miarroba".

El caso es que no es capaz de conectar porque me pide una IP del servidor, y yo no tengo la IP (porque es la general de miarroba, no de mi partición en concreto) entonces intento conectar a mi url directamente de la siguiente manera:

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

#define DHTPIN 2
#define DHTTYPE DHT11

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFD, 0xEG };
byte ip[] = { 192,168,1,135 };
DHT dht(DHTPIN, DHTTYPE);

EthernetClient client;

void setup()
{
Serial.begin(9600);
Ethernet.begin(mac, ip);
dht.begin();
delay(1000);
}

void loop()
{

int t = dht.readTemperature();

Serial.print(t);

client.connect("josehervas.webcindario.com",80);
client.print("GET /arduino.php?temp=");
client.print(t);
client.print(" HTTP/1.0");
client.println();

client.stop();
client.flush();
delay(5000);
}

Alguien sabe porque no consigo conectar correctamente con mi servidor?

(he probado hacer el GET manualmente y la fila se inserta de maravilla en la BD)

Muchas gracias, un abrazo!

Hola. si no vasa usar ip directamente, es muy importante que definas un DNS. Puedes usar la dirección de tu router si este conecta en modo automático o bien usar alguna conocida como la 8
8.8.8 (google). Un servidor DNS se ocupa precisamente de eso: devolverte la IP correspondiente a una determinada dirección.

Buenas noches, muchas gracias por tu comentario, he añadido una DNS en le codigo de arduino pero así tampoco consigue conectar.
Por lo que he detectado no es problema del GET, si no que es problema de que no consigue hacer de cliente...no se que puede pasar, dejo aqui el código nuevo:

#include <SPI.h>
#include <Ethernet.h>
#include <DHT.h> //Añadimos la libreria con la cual trabaja nuestro sensor

#define DHTPIN 2 // Indicamos el pin donde conectaremos la patilla data de nuestro sensor
#define DHTTYPE DHT11 // DHT 11

byte mac[] = { 0xDE, 0xUG, 0xPE, 0xEF, 0xFE, 0xGD };

IPAddress ip(192,168,1,135); //aqui he metido la IP local de mi arduino

IPAddress myDns(87,216,1,65); // DNS de mi router

char serverName[] = "www.josehervas.webcindario.com"; //direccion a la que debe conectar

DHT dht(DHTPIN, DHTTYPE); //Indica el pin con el que trabajamos y el tipo de sensor

EthernetClient client;

void setup()
{
Serial.begin(9600);
Ethernet.begin(mac,ip,myDns);
dht.begin();
delay(1000);

client.connect(serverName,80);

}

void loop()
{

int h = dht.readHumidity(); //Guarda la lectura de la humedad en la variable float h
int t = dht.readTemperature(); //Guarda la lectura de la temperatura en la variable float t

Serial.print(t);

client.print("GET /arduino.php?temp=");
client.print(t);
client.print(" HTTP/1.0");
client.println();

client.stop();
client.flush();
delay(5000);

}

MUCHAS GRACIAS!!

Para conectar a una red externa con arduino, deberás proporcionarle una aire de datos para que " conozca " cómo salir fuera del router. Si miras un poco por el foro veras bastante información al respecto. En resumen, lo que cité en este post con la añadidura de la DNS. Pero antes que nada debes estar seguro de si tienes dhcp activo en tu router o bien asignas tus ip a mano. Es decir, tu ordenador tuviste que definir la red a mano o pusiste conectar automáticamente.

Este código envia 3 valores para um script php que corre numa Raspberry Pi e utiliza o server name em vez do endereço IP.

#include <SPI.h>
#include <Ethernet.h>
#include "DHT.h"
#define DHTPIN 2
#define DHTTYPE DHT22
#define SENSORID 1
EthernetClient client;
DHT dht(DHTPIN, DHTTYPE);
byte mac[] = {  
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
char serverName[] = "<endereço web do servidor>"; //xyz.no-ip.org, por exemplo

long previousMillis = 0;
long interval = 5000;

double dewPointFast(double celsius, double humidity)
{
  double a = 17.271;
  double b = 237.7;
  double temp = (a * celsius) / (b + celsius) + log(humidity/100);
  double Td = (b * temp) / (a - temp);
  return Td;
}

void setup() {
  Serial.begin(9600); 
  if (Ethernet.begin(mac) != 1)
  {
    Serial.println("Erro no DHCP");
    while(true);
  }
  else
  {
    Serial.println("DHCP OK");
    dht.begin();
  }
}

void loop()
{
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval)
  {
    previousMillis = currentMillis;   
    float h = dht.readHumidity();
    float t = dht.readTemperature();
    double d=dewPointFast(t,h);
    if (isnan(t) || isnan(h))
    {
      Serial.println("Failed to read from DHT");
    }
    else
    {
      Serial.println("Connecting");
      if (client.connect(serverName, 80))
      {
        client.print("GET /registar.php?temp=");
        client.print(t,DEC);
        client.print("&hum=");
        client.print(h,DEC);
        client.print("&dew=");
        client.print(d,DEC);
        client.print("&sensor=");
        client.print(SENSORID);
        client.println(" HTTP/1.0");
        client.print(" Host: ");
        client.println(SENSORID);
        client.println();
      }
    } 
  }
}

Efectivamente, si la configuración de tu router está en modo automático (dhcp) el código que expone el amigo poliveira1978 es el válido. En algunos casos es preferible la configuración manual de red, pero si quieres evitar complicaciones, tratándose de un cliente web, activa dhcp, automático y listo.

Muchas gracias por vuestra aportación, efectivamente tengo el DHCP activado pero sigo sin poder ni tan siguiera realizar un GET desde arduino, he implementado el código más sencillo que he podido y tampoco me deja, lo dejo a continuación por si me podeis dar alguna idea de que es lo que está padando, muchisimas gracias!

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

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
char serverName[] = "hervas.webcindario.com";
EthernetClient client;

void setup() 
{
  Serial.begin(9600); 
  Ethernet.begin(mac);  
  delay(1000);
}

void loop() 
{
      client.connect(serverName, 80);

    client.print("GET /arduino.php?temp=50 HTTP/1.0");                
    client.println();

  client.stop();
  client.flush();
  delay(1000);

  }