Les pongo el código usado: (está un poco revuelto ya que estoy en pruebas)
// Script que obtiene el estado de un puerto
// y lo envia a un servidor web
#include <SPI.h>
#include <Ethernet.h>
// Mac EthernetShield
byte mac[] = { 0x06, 0xCC, 0x9C, 0x80, 0xDE, 0x94 };
// IP fijo, si se comenta el router le asignará la IP
//IPAddress ip(192,168,1,220);
// Descomentar esta linea para asignar un DNS fijo
//IPAddress myDns(172,17,17,1);
// Inicializa la instancia client
EthernetClient client;
// Direccion del servidor
char server[] = "www.midominio.es";
// Variable de tiempo de la ultima conexion en milisegundos
unsigned long ultimaConexion = 0;
// Estado de la ultima conexion
boolean ultimoEstado = false;
// Intervalo en milisegundos entre conexiones
const unsigned long intervaloConexion = 30000;
// Datos del puerto de entrada
int ValorActual = 0;
void setup() {
// Configura el pin que se va a usar como entrada
pinMode(7,INPUT);
// Inicializa puerto serial
Serial.begin(9600);
Serial.println("########");
Serial.println("Prueba lectura pin");
// Espera 1 segundo para que se inicie la tarjeta Ethernet
delay(1000);
// Si deseas usar un ip fijo y un DNS fijo descomentar esta linea y comentar la linea 39
// Ethernet.begin(mac, ip, myDns);
// Inicializa la tarjeta ethernet mediante DHCP
Ethernet.begin(mac);
// Imprime la direccion IP de la tarjeta
Serial.print("Direccion IP: ");
Serial.println(Ethernet.localIP());
ValorActual = digitalRead(7);
Serial.print("ValorPuerto_7: ");
Serial.println(ValorActual);
}
// Loop principal
void loop()
{
/*
// Espera 30sg
delay(30000);
// Lee el pin de entrada
ValorActual = digitalRead(7);
Serial.print("ValorPuerto_7: ");
Serial.println(ValorActual);
*/
// Si hay datos que llegan por la conexion los envia a la puerta serial
if (client.available()) {
char c = client.read();
Serial.print(c);
}
// Si no hay conexion de red y se conecto correctamente la ultima vez
// detiene el cliente Ehternet
if (!client.connected() && ultimoEstado) {
Serial.println();
Serial.println("Desconectando...");
client.stop();
}
// Si no esta conectado y han pasado X segundos (intervaloConexion)
// despues de la ultima conexion envia datos al servidor
if(!client.connected() && (millis() - ultimaConexion > intervaloConexion)) {
ValorActual = digitalRead(7);
httpRequest();
}
// Actualiza la variable ultimoEstado
ultimoEstado = client.connected();
}
// Fin del loop principal
// Realiza la conexion http al servidor
void httpRequest() {
// Se conecta al servidor en el puerto 80 (web)
if (client.connect(server, 80)) {
// Envia el dato al puerto serial
Serial.print("ValorPuerto 7: ");
Serial.println(ValorActual);
//Inserta Valor
// Envia el requerimiento al servidor via GET
Serial.println("Iniciando conexion...");
client.print("GET /index.php?valor=");
client.print(ValorActual);
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.println("User-Agent: Arduino-Ethernet");
client.println("Connection: close");
client.println();
// Actualiza el tiempo en milisegundos de la ultima conexion
ultimaConexion = millis();
}
else {
// Si la conexion fallo se desconecta
Serial.println("Error al conectarse al servidor");
Serial.println("Desconectando...");
client.stop();
}
}
Una vez ejecutado esto en el monitor serial me aparece:
########
Prueba lectura pin
Direccion IP: 192.168.1.39
ValorPuerto_7: 1
ValorPuerto 7: 1
Iniciando conexion...
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 03 Sep 2014 19:58:13 GMT
Content-Type: text/html
Transfer-Encoding: chunked
Connection: close
Vary: Accept-Encoding
X-Powered-By: PHP/5.3.29
1b
Se ha insertado el valor: 1
0
Desconectando...