From 85c2b94d2738e31e6dc169432a71ab17c096390b Mon Sep 17 00:00:00 2001 From: techiesms Date: Sun, 19 Nov 2017 15:02:19 +0530 Subject: [PATCH] Geolocation_without_display 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 --- Geolocation_without_display.ino | 184 ++++++++++++++++++++++++++++++++ 1 file changed, 184 insertions(+) create mode 100644 Geolocation_without_display.ino diff --git a/Geolocation_without_display.ino b/Geolocation_without_display.ino new file mode 100644 index 0000000..e5af70b --- /dev/null +++ b/Geolocation_without_display.ino @@ -0,0 +1,184 @@ +/********************************************************************* + This is the code for Fetching your location from Google Geolocation API + + This code is provided by + techiesms +*********************************************************************/ + +#include +#include +#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); + + + + +} +