#include <SoftwareSerial.h> SoftwareSerial mySerial(12, 13); // RX, TX #include <ESP8266WiFi.h> //https://github.com/esp8266/Arduino #include <DNSServer.h> #include <ESP8266WebServer.h> #include "WiFiManager.h" //https://github.com/tzapu/WiFiManager int count=0,i,m,j,k; int t,t1,t2,t3; int outputpin= A0;//ds18b20 #define switch1 D4 #define switch2 D7 const int trigPin = D5; const int echoPin = D6; long duration; int distance,d1; int openclose = 0; //////////////////////////////////////// ALL DECLARATIONS for CLOUD ////////////////////////////// const char* host = "api.thingsio.ai"; // OR host = devapi2.thethingscloud.com const char* post_url = "/devices/deviceData"; // OR /api/v2/thingscloud2/_table/data_ac const char* time_server = "baas.thethingscloud.com"; //this is to convert timestamp const int httpPort = 80; char timestamp[10]; WiFiClient client; ///////////////////////////////////////////////////////////////////////////////////////////////////////// void configModeCallback (WiFiManager *myWiFiManager) { Serial.println("Entered config mode"); //*-*-*-*-*-*-*-*-*-*-*-*-*-*if control enters this function then net is not connected Serial.println(WiFi.softAPIP()); // "WiFi.softAPIP() is for AP" , "WiFi.localIP() is for STA", Serial.println(myWiFiManager->getConfigPortalSSID()); //if you used auto generated SSID, print it } /////////////////////////////////////// TIMESTAMP CALCULATION function/////////////////////////////////////// int GiveMeTimestamp() { unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 50000) { client.stop(); return 0; } } while (client.available()) { String line = client.readStringUntil('\r'); //indexOf() is a funtion to search for smthng , it returns -1 if not found int pos = line.indexOf("\"timestamp\""); //search for "\"timestamp\"" from beginning of response got and copy all data after that , it'll be your timestamp if (pos >= 0) { int j = 0; for(j=0;j<10;j++) { timestamp[j] = line[pos + 12 + j]; } } } } //////////////////////////////////////////////////////////////////////////////////////////////////////// void setup() { pinMode(switch1,OUTPUT); pinMode(switch2,OUTPUT); pinMode(trigPin, OUTPUT); // Sets the trigPin as an Output pinMode(echoPin, INPUT); // Sets the echoPin as an Input Serial.begin(115200); //(19200,SERIAL_8E1) - data size = 8 bits , parity = Even , stop bit = 1bit mySerial.begin(115200); WiFiManager wifiManager; wifiManager.setAPCallback(configModeCallback); if(!wifiManager.autoConnect("DDIK Makadia","kidd123456789")) //wifiManager.autoConnect("AP-NAME", "AP-PASSWORD"); (OR) wifiManager.autoConnect("AP-NAME"); only ID no password (OR) wifiManager.autoConnect(); this will generate a ID by itself { Serial.println("failed to connect and hit timeout"); //control comes here after long time of creating Access point "NodeMCU" by NodeMCU and still it has not connected //reset and try again, or maybe put it to deep sleep ESP.reset(); delay(1000); } //if you come here you have connected to the WiFi Serial.println("connected..."); } void loop() { /////////////////////////////////////// SEND THE QUERY AND RECEIVE THE RESPONSE/////////////////////// digitalWrite(trigPin, LOW); delayMicroseconds(2); digitalWrite(trigPin, HIGH); delayMicroseconds(10); digitalWrite(trigPin, LOW); duration = pulseIn(echoPin, HIGH); distance = int(duration*0.034/2); Serial.print("Distance : "); Serial.println(distance); if(distance<200) //car is near to the gate //as per your wish { digitalWrite(switch1,HIGH); openclose = 0; Serial.println("Door Opening Soon"); } else if(distance>200) //car is far to the gate { digitalWrite(switch2,HIGH); openclose = 1; Serial.println("Door Closing Soon"); } Serial.println("connecting to "); Serial.println(host); //defined upside :- host = devapi2.thethingscloud.com or 139.59.26.117 ///////////////////////////////////// TIMESTAMP CODE SNIPPET ///////////////////////// Serial.println("inside get timestamp\n"); if (!client.connect(time_server, httpPort)) { return; //*-*-*-*-*-*-*-*-*-* } client.println("GET /api/timestamp HTTP/1.1"); //Whats this part doing, i didnt get client.println("Host: baas.thethingscloud.com"); client.println("Cache-Control: no-cache"); client.println("Postman-Token: ea3c18c6-09ba-d049-ccf3-369a22a284b8"); client.println(); GiveMeTimestamp(); //it'll call the function which will get the timestamp response from the server Serial.println("timestamp receieved"); Serial.println(timestamp); /////////////////////////////////////////////////////////////////////////////// // Use WiFiClient class to create TCP connections if (!client.connect(host, httpPort)) //host = devapi2.thethingscloud.com , port = 80 { Serial.println("connection failed"); // *-*-*-*-*-*--*-*-*-*-*-*-*-*-*-*-*-*- return; } client.print("Content-Length: "); client.println(); unsigned long timeout = millis(); while (client.available() == 0) { if (millis() - timeout > 50000) { Serial.println(">>> Client Timeout !"); client.stop(); return; } } Serial.println("***********************************************"); Serial.println(); Serial.println("closing connection"); Serial.println("inside ThingsCloudPost"); int timestamp1 =0; timestamp1 = 1542800778; String PostValue = "{\"device_id\": xxxxxx, \"slave_id\": 1"; PostValue = PostValue + ",\"dts\":" +timestamp; PostValue = PostValue +",\"data\":{\"Open=0/Close=1\":" + openclose +",\"Distance\":" + distance +"}"+"}"; Serial.println(PostValue); //////////////////////////////// try to connect to server again and POST the data on the cloud ////////////////////////// if (!client.connect(host, httpPort)) { return; } client.print("POST "); client.print(post_url); /// POST api/device-datas HTTP/1.1 Host: baas.thethingscloud.com Content-Type: application/json Cache-Control: no-cache client.println(" HTTP/1.1"); //Authorization: Content-Length: client.print("Host: "); client.println(host); client.println("Content-Type: application/json"); client.println("Cache-Control: no-cache"); client.print("Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.IjViZTc5ZjRiNDAyYjlkNGI5MDdiZGRmZCI.hBa2XTagbf56p_E83PeMZHaoJO4EUrbwGcmWTU0j0-w"); client.println(); client.print("Content-Length: "); client.println(PostValue.length()); client.println(); client.println(PostValue); //////////////////////////////////POSTING the data on to the cloud is done and now get the response form cloud server////////////////// while (client.available() == 0) { if (millis() - timeout > 50000) { Serial.println(">>> Client Timeout !"); client.stop(); return; } } Serial.println("Response From Server"); while(client.available()) { String line2 = client.readStringUntil('\r'); Serial.print(line2); } Serial.println("////////////////////// THE END /////////////////////"); delay(3000); }