Я использую nodemcu-esp8266 для получения координат местоположения с помощью API геолокации. Прочитав и попробовав много ссылок, моя программа все равно не работает. Вот полученный ответ:
Я использую nodemcu-esp8266 для получения координат местоположения с помощью API геолокации. Прочитав и попробовав много ссылок, моя программа все равно не работает. Вот полученный ответ:
Requesting URL: https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyDJjrhinxBlLXCuxwEPi9ElJhlVaV*****
closing connection
Latitude = 0.000000
Longitude = 0.000000
Вот мой код:
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#include "ESP8266WiFi.h"
char myssid[] = "*****"; // your network SSID (name)
char mypass[] = "*****"; // your network password
//Credentials for Google GeoLocation API...
const char* Host = "www.googleapis.com";
String thisPage = "/geolocation/v1/geolocate?key=";
String key = "AIzaSyDJjrhinxBlLXCuxwEPi9ElJhlVaV*****";
//Credentials for Mozilla GeoLocation API...
//const char* Host = "location.services.mozilla.com";
//String thisPage = "/v1/geolocate?key=";
//String key = "";
int status = WL_IDLE_STATUS;
String jsonString = "{\n";
double latitude = 0.0;
double longitude = 0.0;
int more_text = 0; // set to 1 for more debug output
void setup() {
Serial.begin(115200);
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");
}
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;
// 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(".");
//Connect to the client and make the api call
Serial.print("Requesting URL: ");
Serial.println("https://" + (String)Host + thisPage + "AIzaSyDJjrhinxBlLXCuxwEPi9ElJhlVaV*****");
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"];
}
}
Serial.println("closing connection");
Serial.println();
client.stop();
Serial.print("Latitude = ");
Serial.println(latitude,6);
Serial.print("Longitude = ");
Serial.println(longitude,6);
// Wait for ever...
while(1){
delay(1000);
}
}
Может кто-нибудь объяснить, почему программа не работает?
спасибо