Motion Detector Using Thingsai.io Iot Cloud Platform
by kavya_vaskoty in Circuits > Electronics
558 Views, 3 Favorites, 0 Comments
Motion Detector Using Thingsai.io Iot Cloud Platform

In this tutorial i am going to explain about motion detection by using a PIR sensor and Esp32 along with a IOT cloud platform Thingai.io
Components


HARDWARE COMPONENTS;
1.esp32 Development Board
2.PIR Sensor
3. Jumper Wires
SOFTWARE :
1.Arduino IDE
2. Thingsai.io account
CONNECTIONS

The connections are quiet simple.
PIR PINS------------ESP32 PINS
VCC-------------------3V3 on esp32
GND------------------GND on esp32
OUT-------------------D22 on esp32
CODING
Paste this code into your Arduino IDE with some updation, your Motion sensor will give the output flawlessly.
#include<WiFi.h>
#include<WiFiMulti.h>
#include<WiFiClientSecure,h>
int count=0,i,m,j,k;
int t,t1,t2,t3;
int pin = 22;
//////////////////////////////////////// ALL DECLARATIONS for CLOUD //////////////////////////////
const char* host = "api.thingsai.io"; // 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;
const int httpsPort = 443;
const char* server = "api.thingsai.io"; // Server URL
char timestamp[10];
WiFiMulti WiFiMulti;
// Use WiFiClient class to create TCP connections
WiFiClient client;
/////////////////////////////////////// TIMESTAMP CALCULATION function///////////////////////////////////////
int GiveMeTimestamp()
{
unsigned long timeout = millis();
// WiFiClient client;
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()
{
Serial.begin(115200);
delay(10);
pinMode(pin,INPUT);
// We start by connecting to a WiFi network
WiFiMulti.addAP("wifi_name", "Wifi_password");
Serial.println();
Serial.println();
Serial.print("Wait for WiFi... ");
while(WiFiMulti.run() != WL_CONNECTED) {
Serial.print(".");
delay(500);
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
delay(500);
}
void loop()
{
int analogValue = analogRead(outputpin);
{
/////////////////////////////////////// SEND THE QUERY AND RECEIVE THE RESPONSE///////////////////////
{
bool isDetected = digitalRead(pin);
if(isDetected){
Serial.println("Presence detected");
}
delay(500);
}
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 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);
Serial.println("inside ThingsCloudPost");
String PostValue = "{\"device_id\": 61121695839, \"slave_id\": 2";
PostValue = PostValue + ",\"dts\":" +timestamp;
PostValue = PostValue +",\"data\":{\"PIR\":" + pin +"}"+"}";
Serial.println(PostValue);
/* create an instance of WiFiClientSecure */
WiFiClientSecure client;
Serial.println("Connect to server via port 443");
if (!client.connect(server, 443)){
Serial.println("Connection failed!");
} else {
Serial.println("Connected to server!");
/* create HTTP request */
client.println("POST /devices/deviceData HTTP/1.1");
client.println("Host: api.thingsai.io");
//client.println("Connection: close");
client.println("Content-Type: application/json");
client.println("cache-control: no-cache");
client.println("Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.IjVhMzBkZDFkN2QwYjNhNGQzODkwYzQ4OSI.kaY6OMj5cYlWNqC2PNTkXs9PKy6_m9tdW5AG7ajfVlY");
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//////////////////
Serial.print("Waiting for response ");
while (!client.available()){
delay(50); //
Serial.print(".");
}
/* if data is available then receive and print to Terminal */
while (client.available()) {
char c = client.read();
Serial.write(c);
}
/* if the server disconnected, stop the client */
if (!client.connected()) {
Serial.println();
Serial.println("Server disconnected");javascript:;
client.stop();
}
}
Serial.println("////////////////////// THE END /////////////////////");
delay(3000);
}
}
OUTPUT

This is the bar graph representation of the values read from the sensor in the thingsai,io cloud platform,
Graph

This is the graphical representation of the values from the sensor. From the above graph we can analyze the application of the sensor. Thank You
Here's a Video of Breif Explanation
