Pasar datos de Arduino a PHP

Hola,

Estoy trabajando con Arduino Ethernet.

Me gustaría pasar una variable detectada por Arduino al servidor Amazon ec2 con el que trabajo en PHP. El problema es que no se conecta.
He instalado Wireshark y no se ha detectado nada.

He escrito el siguiente código:

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

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xD0, 0x6A };
byte server[] = { 54, XXX, XXX, XXX }; //IP Servidor Amazon ec2
byte ip[]={195, 235, 111, 220}; //IP local
EthernetClient client;

void setup()
{

Serial.begin(9600);
delay(3000);
Ethernet.begin(mac, ip);

String location="http://54.XXX.XXX.XXX/ip2.php?ip=variablepasada HTTP/1.0";
//mando un parámetro a la variable ip del archivo ip2.php
Serial.println("connecting...");

if (client.connect(server, 80)) {
Serial.println("connected");

delay(3000);
client.print("GET ");
client.println(location);

Serial.println(location);

} else {
Serial.println("connection failed");
}
}

void loop()
{
if (client.available()) {
char c = client.read();
}

if (!client.connected()) {
client.println("ip="+Ethernet.localIP());
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;);

}
}

Gracias. Un saludo

Hola.
Para poder acceder fuera de tu red, arduino necesita la máscara de IP (habitualmente 255.255.255.0) y puerta de enlace (dirección ip de tu router). Con esto podrías acceder a una IP externa.
Si además necesitaras traducir nombres a IP, que de momento parece que no, ya que usas la dirección y no el nombre del server, necesitas una dirección DNS.
Agrega esas configuraciones a ver si mejora la cosa.
Saludos.

Lo he probado como me dijiste y sigue sin dar resultados.

Copio lo que he puesto:

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

byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xD0, 0x6A };
byte server[] = { 54, 229, 138, 105 }; // Servidor Amazon ec2
byte ip[]={195, 235, 111, 220};
byte gateway[]={195, 235, 111, 3};
byte subnet[]={255, 255, 255, 0};

EthernetClient client;

void setup()
{

// start the serial library:
Serial.begin(9600);
// start the Ethernet connection:
delay(3000);
Ethernet.begin(mac, ip, gateway, subnet);
// print your local IP address:
//Serial.println(Ethernet.localIP());
// String miIP=""+Ethernet.localIP();

String location="http://54.229.138.105/ip2.php?ip=RRA HTTP/1.0";

Serial.println("connecting...");

if (client.connect(server, 80)) {
Serial.println("connected");

//String nombre="tt";
delay(3000);
// String location="http://54.229.138.105/ip2.php?ip=RRA HTTP/1.0";
client.print("GET ");///ip2.php?ip=RR");//"+nombre);
client.println(location);
// client.println("HTTP/1.0");

Serial.println(location);
//client.println("ip="+Ethernet.localIP());

} else {
Serial.println("connection failed");
}
}

void loop()
{
if (client.available()) {
char c = client.read();
}

if (!client.connected()) {
client.println("ip="+Ethernet.localIP());
Serial.println();
Serial.println("disconnecting.");
client.stop();
for(;;);

}
}

has probado a acceder por ejemplo a google ???¿, creo que tu arduino se queda en la puerta de enlace, y no puede salir a internet. prueba primero a ver si llega al router o a otra maquina de tu LAN

Echa un vistazo a tu ethernet.h. Lo acabo de mirar y al menos en la librería que yo tengo no existe constructor con puerta de enlace sin DNS (aunque no resulte necesario si no vas a usar nombres, debes proporcionarlo, así que perdona porque te he inducido a error):
int begin(uint8_t *mac_address);
void begin(uint8_t *mac_address, IPAddress local_ip);
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server);
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway);
void begin(uint8_t *mac_address, IPAddress local_ip, IPAddress dns_server, IPAddress gateway, IPAddress subnet);
Utiliza uno de los dos últimos constructores; ya puestos y para estar seguro, el último. A buen seguro que el constructor tomado ha sido el penúltimo, pero ha tomado como dns el gateway y como gateway la máscara de red.
Pd. Seguro que la dirección de tu router acaba en 3, ¿no? Lo digo porque no suele ser habitual, aunque es perfectamente posible.