LDR Using Thingsai Cloud
HEY.....today we are gonna learn about measuring the intensity of light and posting the values into the THINGSAI IOT cloud platform by using ESP32 .
The requirements to do this project are
1. ESP32 Development Board ( I've used ESP32 DEVKIT V1)
2. LDR sensor
3. Jumper Wires
4. Account in THINGSAI IOT PLATFORM
Creating and Logging in to the THINGSIO Platform
Login to the THINGS AI account. If you are new then register to the account by pressing the register button and fill all the credentials. Your account will be created and from then you will be able to work on the cloud platform and create your custom project
Creating New Project
After logging in to the account , to create a project just click on the new project and then give the project name.
Creating a New Device
after creating the project the next thing you have to do is create a new device.Give the device name and enter the device ID either manually or system generated.
Defining Device Parameter
Give the device parameter and then select the type of parameter
Updating the Device
Select the parameter and then update the device
Coding
From the sample codes select the code of esp32 copy it and then paste it in the arduino IDE and make the necessary changes according to the requirement. I've given the code below
#include <Wifi.h>
#include<WifiMulti.h>
#include<WifiClientSecure.h>
int count=0,i,m,j,k;
int t ; int outputpin= A0;//ds18b20
int sensorvalue;
//////////////////////////////////////// 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);
// We start by connecting to a WiFi network
WiFiMulti.addAP("wifi", "pswrd");
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///////////////////////
sensorvalue = analogRead(A0); // read analog input pin 0
sensorvalue=sensorvalue/100;
Serial.print(sensorvalue, DEC); // prints the value read
Serial.print(" \n"); // prints a space between the numbers
delay(1000); // wait 100ms for next reading
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\": 61121695844, \"slave_id\": 2";
PostValue = PostValue + ",\"dts\":" +timestamp;
PostValue = PostValue +",\"data\":{\"INTENSITY\":" + \sensorvalue +"}"+"}";
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"); cl
ient.println("Content-Type: application/json");
client.println("cache-control: no-cache");
client.println("Authorization: BearereyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.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");
client.stop();
}
} Serial.println("////////////////////// THE END /////////////////////");
delay(3000); } }
Selection of Board and Com Port
From tools select the board and then select the com port
Circuit Connections
Coding is done then make the following connections as mentioned below
CONNECTIONS:
GND of esp32 to GND of the LDR sensor
3V3 0f esp32 to the Vcc of the LDR
VP of esp32 to the A0 of the LDR
Compile and Upload
compile and upload the code into the esp32 and then read the readings from the serial monitor. That would show a result something like this
Serial Monitor
The values are obtained on the serial monitor and then they are sent into the THINGSAI IOT Cloud platform.
Readings
This shows the values obtained from the esp32 board.
Graphical Representation
This is the graphical representation of the obtained values . That's the end of the tutorial. Hope you've understood. Thank You