Actualización.
Plataforma: Arduino Uno con Ethernet Shield W5100
Buenas tardes
Después de varias pruebas. Para encontrar el error. Configuré manualmente el dispositivo asignándole IP, GateWay, DNS, y subnet. Ejecutando nuevamente el código se muestra en el monitor el Bad Request 400 pero de una manera poco usual. Al parecer cada que se llama a la funcion Save_value() el dsipositivo intenta conectarse, se conecta y se desnocneta de inmediato causando el conection failed e inprimiendo por cada ciclo los caracteres que responde el servidor de Ubidots.
Adjunto una imagen que muestra la respuesta.
Muchas gracias por su atención.
PD1: No he podido hacer que me Imprima el request en el monitor de una sola ocación.
PD2: No he podido enviar el valor de mi variable por POST.
PD3: Adjunto codigo de muestra con las modificaciones realizadas.
/*
Web client
This sketch connects to a website using an Arduino Wiznet Ethernet shield.
Circuit:
* Ethernet shield attached to pins 10, 11, 12, 13
created 18 Dec 2009
modified 9 Apr 2012
by David A. Mellis
modified 15 Jan 2015
by Mateo Velez for Ubidots, Inc.
*/
#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 };
byte ip[]={192, 168, 1, 2};
byte gw [] = {192, 168, 1, 254};
byte dns_[] = {200, 13, 249, 101};
byte subnet_[] = {255, 255, 255, 0};
// 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;
String idvariable = "55565d0d7625423f7d3b7d5a";
String token = "D7wHWtSAwAi3cSp5RVoFecZXAZzm7ylO7ytx1YqOHWeTzgEpwWofMVlmd3uy";
void setup() {
// Open serial communications and wait for port to open:
Serial.begin(9600);
while (!Serial) {
; // wait for serial port to connect. Needed for Leonardo only
}
// start the Ethernet connection:
if (Ethernet.begin(mac)==0) {
Serial.println("Failed to configure Ethernet using DHCP");
// Configuarion de red manual.
Serial.println("Configuring with static IP:"+String(ip[0])+" and GateWay:"+String(gw[1])+"\n");
Ethernet.begin(mac, ip, dns_, gw, subnet_);
}
// give the Ethernet shield a second to initialize:
delay(2000);
Serial.println("connecting...");
}
void loop()
{
int value = analogRead(A0);
save_value(String(value));
}
void save_value(String value)
{
// if you get a connection, report back via serial:
int num=0;
String var = "{\"value\":"+ String(value) + "}";
num = var.length();
delay(2000);
if(client.connect("things.ubidots.com", 80))
{
Serial.println("connected");
//Linea de codigo oroginal.
/*client.println("POST api/v1.6/variables/"+idvariable+"/values HTTPS/1.1\nContent-Type: application/json\nContent-Length: "+String(num)+"\nX-Auth-Token: "+token+"\nHost: things.ubidots.com\n");
// En el codigo original fala agregar el valor de la variable.
client.println("\n"+var+"\n");*/
// Lineas modificadas de acuerdo a varios post de soporte en ubidots.
client.println("POST/api/v1.6/variables/"+idvariable+"/values HTTP/1.1");
Serial.println("POST/api/v1.6/variables/"+idvariable+"/values HTTP/1.1");
client.println("Content-Type: application/json");
Serial.println("Content-Type: application/json");
client.println("Content-Length: "+String(num));
Serial.println("Content-Length: "+String(num));
client.println("X-Auth-Token: "+token);
Serial.println("X-Auth-Token: "+token);
client.println("Host: things.ubidots.com\n");
Serial.println("Host: things.ubidots.com\n");
client.print(var);
Serial.print(var+"\n");
}
else
{
// if you didn't get a connection to the server:
Serial.println("connection failed");
}
if (!client.connected())
{
Serial.println();
Serial.println("disconnecting.");
client.stop();
// do nothing forevermore:
for(;;);
}
if (client.available())
{
char c = client.read();
Serial.print(c);
}
}