#include <SoftwareSerial.h>
SoftwareSerial mySerial(12, 13); // RX, TX
#include //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;
const int trigPin1 = D7;
const int echoPin1 = D6;
const int trigPin2 = D5;
const int echoPin2 = D4;
long duration1,duration2;
int distance1,distance2;
int in=0;
int out=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 = "www.convert-unix-time.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(trigPin1, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin1, INPUT); // Sets the echoPin as an Input
pinMode(trigPin2, OUTPUT); // Sets the trigPin as an Output
pinMode(echoPin2, 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("xxxxxxxxxx","xxxxxxxxxxx")) //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(trigPin1, LOW);
delayMicroseconds(2);
digitalWrite(trigPin1, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin1, LOW);
duration1 = pulseIn(echoPin1, HIGH);
distance1 = int(duration1*0.034/2);
if(distance1<100)
{
in=in+1;
}
else if(distance1>=100)
{
in=in;
}
digitalWrite(trigPin2, LOW);
delayMicroseconds(2);
digitalWrite(trigPin2, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin2, LOW);
duration2 = pulseIn(echoPin2, HIGH);
distance2 = int(duration2*0.034/2);
if(distance2<100)
{
out=out+1;
}
else if(distance1>=100)
{
out=out;
}
Serial.print("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=now HTTP/1.1"); //Whats this part doing, i didnt get
client.println("Host: www.convert-unix-time.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");
String PostValue = "{\"device_id\": xxxxxx, \"slave_id\": x";
PostValue = PostValue + ",\"dts\":" +timestamp;
PostValue = PostValue +",\"data\":{\"In\":" + in +",\"Out\":" + out +"}"+"}";
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();
Serial.println("////////////////////// THE END /////////////////////");
delay(3000);
}