Hola
I’m trying to post data to Ubidots Cloud service (1 variable)
I’m using NucleoL476 and X-Nucleo-IDW01M1 wifi shield and nothing is udpated to Ubidots. When I try same command API with hurl.it, It working. Socket.recv() return -3001 ?
Here my terminal results:
IDW01M1 NetworkSocketAPI TCP Client Ubidots Example
Connecting to AP
Now connected
IP address is: 192.168.0.17
MAC address is: 00:80:E1:B7:C5:D8
things.ubidots.com resolved to: 50.23.124.68
Socket connected
{“value”: 2114}
POST /api/v1.6/variables/5997efbdc03f971ca757920a/values HTTP/1.1
Content-Type: application/json
Content-Length: 15
X-Auth-Token: A1E-B0I6Hzcqxxtl0ecHPOrApvvkoABQE8
Host: things.ubidots.com
{“value”: 2114}
Send data to Ubidots
Received -3001
Code is attached
Does my command API is correct ?
Thanks
Here my code:
#include "mbed.h"
#include "SpwfInterface.h"
#include "TCPSocket.h"
#define AP_SSID "XXXX"
#define AP_PASSWORD "XXXX"
#define AP_SECURITY NSAPI_SECURITY_WPA2
#define TOKEN "A1E-B0I6Hzcqxxtl0ecHPOrApvvkoABQE8"
#define LABEL_DEVICE "my-test-device"
#define VARID_LUX "5997efbdc03f971ca757920a" // Variables temperature id
// NUCLEO: D8->UART1_TX (PA_9), D2->UART1_RX (PA_10)
SpwfSAInterface spwf(D8, D2, false);
Serial pc(USBTX, USBRX);
AnalogIn myLux(PC_3);
DigitalOut myled(LED1);
int main()
{
int errConnect, errRcv = 0;
char str[50] = "";
char http_cmd[1000] = "";
char buffer[2048] = "";
pc.baud(115200);
pc.printf("IDW01M1 NetworkSocketAPI TCP Client Ubidots Example\r\n");
pc.printf("Connecting to AP\r\n");
/* Connect to wifi acces point */
if(spwf.connect(AP_SSID, AP_PASSWORD, NSAPI_SECURITY_WPA2)) {
pc.printf("Now connected\r\n");
} else {
pc.printf("Error connecting to AP.\r\n");
return -1;
}
/* Get and print network connection parameters ip and mac adress */
const char *ip = spwf.get_ip_address();
const char *mac = spwf.get_mac_address();
pc.printf("IP address is: %s\r\n", ip ? ip : "No IP");
pc.printf("MAC address is: %s\r\n", mac ? mac : "No MAC");
/* Create a SocketAdress from Ubidots Hostname and port TCP 80 */
SocketAddress addr(&spwf, "things.ubidots.com", 80);
pc.printf("things.ubidots.com resolved to: %s\r\n", addr.get_ip_address());
/* Create, Open a socket on specified stack */
TCPSocket socket(&spwf);
socket.set_timeout(1000); // Set Block Mode.
errConnect = socket.connect("things.ubidots.com", 80);
/* Check connection status */
while (true) {
if(errConnect != 0) {
pc.printf("Could not connect to socket : error = %d\r\n", errConnect);
errConnect = socket.connect("things.ubidots.com", 80);
// TODO Manage connection issues here !!!!
} else {
pc.printf("Socket connected\r\n");
break;
}
}
sprintf((char *)str, "{\"value\": %d}", (int)(myLux.read()*10000));
printf("%s\r\n", str);
int len = strlen((char *)str);
sprintf((char *)http_cmd,"POST /api/v1.6/variables/%s/values HTTP/1.1\r\nContent-Type: application/json\r\nContent-Length: %d\r\nX-Auth-Token: %s\r\nHost: things.ubidots.com\r\n\r\n%s\r\n\r\n",
VARID_LUX,len, TOKEN, str);
pc.printf("Send data to Ubidots\r\n");
socket.send((char *)http_cmd, sizeof((char *)http_cmd));
errRcv = socket.recv(buffer, sizeof(buffer));
pc.printf("Received %d\r\n", errRcv);
pc.printf("%s",buffer);
wait(5);
socket.close();
spwf.disconnect();
pc.printf("Done\r\n");
}