-
Notifications
You must be signed in to change notification settings - Fork 32
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This is the code for geolocation without using any external display. Simply plug your ESP board, upload this code and you are ready to observe your location on your serial monitor
- Loading branch information
Showing
1 changed file
with
184 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,184 @@ | ||
/********************************************************************* | ||
This is the code for Fetching your location from Google Geolocation API | ||
This code is provided by | ||
techiesms | ||
*********************************************************************/ | ||
|
||
#include <ESP8266HTTPClient.h> | ||
#include <ArduinoJson.h> | ||
#include "ESP8266WiFi.h" | ||
|
||
char myssid[] = "SSID"; // your network SSID (name) | ||
char mypass[] = "PASS"; // your network password | ||
|
||
|
||
//Credentials for Google GeoLocation API... | ||
const char* Host = "www.googleapis.com"; | ||
String thisPage = "/geolocation/v1/geolocate?key="; | ||
String key = "YOUR_API_KEY"; | ||
|
||
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("scan done"); | ||
if (n == 0) | ||
Serial.println("no networks found"); | ||
else | ||
{ | ||
Serial.print(n); | ||
Serial.println(" networks found..."); | ||
|
||
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: "); | ||
Serial.println("https://" + (String)Host + thisPage + "AIzaSyCYNXIYINPmTNIdusMjJloS4_BXSOff1_g"); | ||
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); | ||
|
||
|
||
|
||
|
||
} | ||
|