0% found this document useful (0 votes)
129 views10 pages

Smart Garbage Collection Using Node Mcu

Download as rtf, pdf, or txt
0% found this document useful (0 votes)
129 views10 pages

Smart Garbage Collection Using Node Mcu

Download as rtf, pdf, or txt
Download as rtf, pdf, or txt
You are on page 1/ 10

/*

* Ultrasonic Sensor HC-SR04 to NodeMCU using Arduino

* HC-SR04--> NodeMCU (connections)

* trig --> d5 of NodeMCU

* echo --> d6 of NodeMCU

* vcc --> vin of NodeMCU (remember NOT 3v3)

* gnd --> gnd of NodeMCU

* measured distance from the sensor gives output in cm unit

* 0.034 is the cm per uS

*pulsein : Reads a pulse (either HIGH or LOW) on a pin.

* For example, if value is HIGH, pulseIn() waits for the pin to go HIGH, starts timing,

* then waits for the pin to go LOW and stops timing. Returns the length of the pulse in
microseconds.

* LED is used here to give an alarm when the remaining level of tank is less than or equals to 20
cm.

* by Pankaj Kumar,

*/

#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

#include <WiFiClientSecure.h>

int count=0,i,m,j,k;

//int t,t1,t2,t3;

//int outputpin= A0;//ds18b20

// defines pins numbers

const int trigPin = 14;// d5 of NodeMCU

const int echoPin = 12; // d6 of NodeMCU

const int LED= 5 ; // d1 of NodeMCU

// defines variables

long duration;

float distance;

//////////////////////////////////////// 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];

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(trigPin, OUTPUT); // Sets the trigPin as an Output

pinMode(echoPin, INPUT); // Sets the echoPin as an Input

//Serial.begin(9600); // Starts the serial communication

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("iPankaj","80518051"))
//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...yeey :");

}
void loop()

// int analogValue = analogRead(outputpin);

/////////////////////////////////////// SEND THE QUERY AND RECEIVE THE


RESPONSE///////////////////////

// Clears the trigPin

digitalWrite(trigPin, LOW);

delayMicroseconds(2);

// Sets the trigPin on HIGH state for 10 micro seconds

digitalWrite(trigPin, HIGH);

delayMicroseconds(10);

digitalWrite(trigPin, LOW);

// Reads the echoPin, returns the sound wave travel time in microseconds

duration = pulseIn(echoPin, HIGH);

// Calculating the distance

distance= duration*0.034/2;

// Prints the distance on the Serial Monitor

Serial.print("Garbage level remaining (cm): ");

Serial.println(distance);

delay(10000);
if(distance<= 20)

digitalWrite(LED, HIGH);

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\": 61121696457, \"slave_id\": 2";

PostValue = PostValue + ",\"dts\":" +timestamp;

PostValue = PostValue +",\"data\":{\"garbage_left(cm)\":" + distance +"}"+"}";

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.kaY6OMj5
cYlWNqC2PNTkXs9PKy6_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);

You might also like