I'm trying to send a set of data in Json format to a server I have set up which has a specific URL and an access token. The server requires a POST command. So my final URL is: http://myurl.com/myaccesstoken
The idea is that the Arduino UNO acquires some data from a sensor it then uses the ESP8266 to connect to wifi and send the acquired data to my server.
I do not understand why my server does not receive data
Thank you a lot in advance for your help.
I have used the following code:
#include "Arduino.h"
#include "ESP8266.h"
#include "SoftwareSerial.h"
#include "ArduinoJson.h"
#define ssid "mySSID"
#define pw "myPW"
#define IP "xxx.xxx.xxx.xxx"
#define URL "http://myurl.com/myaccesstoken"
int incomingByte;
void setup() {//I connect to wifi
Serial.begin(115200);
Serial.println("AT");
delay(5000);
analogReference(INTERNAL);
if(Serial.find("OK")){
Serial.println("AT+CWMODE=3");
delay(1000);
String WF=String("AT+CWJAP=\"")+ssid+"\",\""+pw+"\"";
Serial.println(WF);
delay(5000);}
}
void loop() {
//JSON data creation
StaticJsonBuffer<200> jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["flow"] = 2.54;
root["measured"] = "2017-08-14T06:16:03.418Z";
root.printTo(Serial);
delay(5000);
// I start communication with server
Serial.println(String("AT+CIPSTART=\"TCP\",\"") + IP + "\",80");
delay(5000);
Serial.println("AT+CPSTATUS");
// I use HTTP protocol to POST the data
Serial.println("AT+HTTPINIT");
delay(2000);
Serial.println("AT+HTTPPARA=\"CID\",\"1");
delay(2000);
Serial.println("AT+HTTPPARA=\"URL\",\"http://myurl.com/myaccesstoken\"");
delay(2000);
Serial.println(String("AT+HTTPPARA=\"CONTENT\",\"application/json"));
delay(2000);
Serial.println("AT+HTTPDATA=\" + 81 + \",1000"); //81 is the computed length of my JSON
delay(2000);
Serial.println("AT+HTTPACTION=1");
delay(2000);
Serial.println("AT+HTTPREAD");
delay(2000);
if(Serial.available() > 0)
{
// read the incoming byte:
incomingByte = Serial.read();
// say what you got:
Serial.print("I received: ");
Serial.println(incomingByte);
}
Serial.println();
Serial.println("AT+HTTPTERM");
delay(5000);
}