Introduction: GEOLOACATION

About: I am an IoTIAN with a focus on developing IoT & STEM products and Interested in IoT & STEM Technologies

It’s my Summer Internship Project. I really surprise when i hear we can trace location any device without using GPS module only using NodeMCU. Through this we can trace any device .You also surprise how can we trace device using only WiFi . Here are the sort description to understand it.

  • · It’s Scan your nearly all WiFi .
  • · Send this device location to Google using Google API
  • · According to this It’s locate your device location
  • · You have strong network connection for this Project.

Step 1: Parts & Tool

Parts

  • NodeMCU(ESP8266 1.0 12E)
  • USB Cable

Tools

  • Arduino IDE with NodeMcu 1.0 12E Board
  • Google API

Step 2: Find Google API

  • Open Your Browser and type : console.developer.google.com
  • Create a new project
  • After Create a new Project click on credential
  • Click on API Key
  • Your API Key Has been generated
    • For Easily understanding see the following picture |>

Step 3: Setup NodeMCu on Arduino IDE

  • Download Arduino IDE from thefollowing Link :- https://www. Main/Software arduino.cc/en/
  • Add Node MCu board on Arduino IDE
  • For uploading code on NodeMCU youhave to add the NodeMCu board on ARDUINO IDE.
    • GO to file & Preference in Arduino IDE
    • And in Additional Board managersection copy the following link
    • http://arduino.esp8266.com/stable/package_esp8266c...

    • and click Ok

    • The board is downloaded

    • Go to the tools and board and select NodeMCU 1.0 12E

    • See the avobe picture for easily understanding

Step 4: Download ArduinoJson Library

  • Go to the
  • Sketch--> Include Library--> Manage Library

  • Type Arduino Json in search box

  • Download the latest version of ArduinoJson library

  • after downloading library click close

  • Add library from

  • Sketch-->includeLibrary-->ArduinoJson

Step 5: Program

Upload the following program on NodeMCU board. and see your device(NodeMCU 1.0 12E board) location on Serial monitor.

#include<ArduinoJson.h>

#include <ESP8266HTTPClient.h>

#include <ESP8266WiFi.h>

char myssid[] = "Your SSID"; // your network SSID (name)

char mypass[] = "Your Password"; // your network password

//Credentials for Google GeoLocation API...

const char* Host = "www.googleapis.com";

String thisPage = "/geolocation/v1/geolocate?key=";

// --- Get a google maps ap key here : https://developers.google.com/maps/documentation/geolocation/intro

String key = "Your Google API key ";//Find from step2 Instruction

int status = WL_IDLE_STATUS;

String jsonString = "{\n";

double latitude = 0.0;

double longitude = 0.0;

double accuracy = 0.0;

int more_text = 1; // set to 1 for more debug output

void setup() {

Serial.begin(9600);

Serial.println("Start");

// Set WiFi to station mode and disconnect from an AP if it was previously connected

WiFi.mode(WIFI_STA);

WiFi.disconnect();

delay(100);

Serial.println("Setup done");

// We start by connecting to a WiFi network

Serial.print("Connecting to ");

Serial.println(myssid);

WiFi.begin(myssid, mypass);

while (WiFi.status() !=WL_CONNECTED) {

delay(500);

Serial.print(".");

}

Serial.println(".");

}

void loop() {

char bssid[6];

DynamicJsonBuffer jsonBuffer;

Serial.println("scan start");

// WiFi.scanNetworks will return the number of networks found

int n = WiFi.scanNetworks();

Serial.println("scandone");

if (n == 0)

Serial.println("no networks found");

else

{

Serial.print(n);

Serial.println(" networksfound...");

if (more_text) {

// Print out the formatted json...

Serial.println("{");

Serial.println("\"homeMobileCountryCode\":234,"); // this is a real UK MCC

Serial.println("\"homeMobileNetworkCode\":27,"); // and a real UK MNC

Serial.println("\"radioType\":\"gsm\","); //for gsm

Serial.println("\"carrier\":\"Vodafone\","); //associated with Vodafone

Serial.println("\"cellTowers\": ["); // I'm not reporting any cell towers

Serial.println("],");

Serial.println("\"wifiAccessPoints\": [");

for (int i = 0; i < n; ++i)

{

Serial.println("{");

Serial.print("\"macAddress\" : \"");

Serial.print(WiFi.BSSIDstr(i));

Serial.println("\",");

Serial.print("\"signalStrength\": ");

Serial.println(WiFi.RSSI(i));

if (i < n - 1)

{

Serial.println("},");

}

else

{

Serial.println("}");

}

}

Serial.println("]");

Serial.println("}");

}

Serial.println(" ");

}

// now build the jsonString...

jsonString = "{\n";

jsonString +="\"homeMobileCountryCode\": 234,\n"; // this is a real UK MCC

jsonString +="\"homeMobileNetworkCode\": 27,\n"; // and a real UK MNC

jsonString +="\"radioType\": \"gsm\",\n"; // for gsm

jsonString +="\"carrier\": \"Vodafone\",\n"; // associated with Vodafone

jsonString +="\"wifiAccessPoints\": [\n";

for (int j = 0; j < n; ++j)

{

jsonString += "{\n";

jsonString +="\"macAddress\" : \"";

jsonString +=(WiFi.BSSIDstr(j));

jsonString +="\",\n";

jsonString +="\"signalStrength\": ";

jsonString += WiFi.RSSI(j);

jsonString += "\n";

if (j < n - 1)

{

jsonString +="},\n";

}

else

{

jsonString +="}\n";

}

}

jsonString += ("]\n");

jsonString += ("}\n");

//--------------------------------------------------------------------

Serial.println("");

WiFiClientSecure client;

//Connect to the client and make the api call

Serial.print("Requesting URL: ");

// ---- Get Google Maps Api Key here, Link: https://developers.google.com/maps/documentation/geolocation/intro

Serial.println("https://" + (String)Host + thisPage +"PUT-YOUR-GOOGLE-MAPS-API-KEY-HERE");

Serial.println(" ");

if (client.connect(Host, 443)) {

Serial.println("Connected");

client.println("POST" + thisPage + key + " HTTP/1.1");

client.println("Host:" + (String)Host);

client.println("Connection: close");

client.println("Content-Type: application/json");

client.println("User-Agent: Arduino/1.0");

client.print("Content-Length: ");

client.println(jsonString.length());

client.println();

client.print(jsonString);

delay(500);

}

//Read and parse all the lines of the reply from server

while (client.available()) {

String line =client.readStringUntil('\r');

if (more_text) {

Serial.print(line);

}

JsonObject& root =jsonBuffer.parseObject(line);

if (root.success()) {

latitude =root["location"]["lat"];

longitude =root["location"]["lng"];

accuracy = root["accuracy"];

}

}

Serial.println("closing connection");

Serial.println();

client.stop();

Serial.print("Latitude =");

Serial.println(latitude, 6);

Serial.print("Longitude =");

Serial.println(longitude, 6);

Serial.print("Accuracy =");

Serial.println(accuracy);

delay(10000);

Serial.println();

Serial.println("Restarting...");

Serial.println();

delay(2000);

}