Motion Detector Using Thingsai.io Iot Cloud Platform

by kavya_vaskoty in Circuits > Electronics

515 Views, 3 Favorites, 0 Comments

Motion Detector Using Thingsai.io Iot Cloud Platform

1.jpg

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

28747595-19a41090-7471-11e7-826c-42c28ea7ae6e.jpeg
hc-sr501-pir-passive-infrared-sensor-motion-sensor-arduino-arelectronics-1709-23-F528300_1.jpg

HARDWARE COMPONENTS;

1.esp32 Development Board

2.PIR Sensor

3. Jumper Wires

SOFTWARE :

1.Arduino IDE

2. Thingsai.io account

CONNECTIONS

kit10.jpg

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

2a.png

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

Graph

2b.png

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

Motion Detector Using esp32 and Thingsai.io cloud platform