Introduction: GEOLOACATION
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
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);
}