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.
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.
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.
#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();
}
}
}
}
}