Kazalo:
2025 Avtor: John Day | [email protected]. Nazadnje spremenjeno: 2025-01-13 06:58
To je moj projekt poletne prakse. Resnično sem presenečen, ko slišim, da lahko izsledimo lokacijo katere koli naprave brez uporabe modula GPS samo z uporabo NodeMCU. S tem lahko izsledimo katero koli napravo. Presenetite tudi, kako lahko sledimo napravi, ki uporablja samo WiFi. Tukaj je opis razvrščanja, da ga razumete.
- · Skenira skoraj vse vaše WiFi.
- · Pošljite to lokacijo Googlu z Googlovim API -jem
- · V skladu s tem poišče lokacijo vaše naprave
- · Za ta projekt imate močno omrežno povezavo.
1. korak: Deli in orodje
Deli
- NodeMCU (ESP8266 1.0 12E)
- USB kabel
Orodja
Arduino IDE s ploščo NodeMcu 1.0 12E
Googlov API
2. korak: Poiščite Googlov API
- Odprite brskalnik in vnesite: console.developer.google.com
- Ustvarite nov projekt
- Ko ustvarite nov projekt, kliknite poverilnice
- Kliknite na ključ API
-
Vaš ključ API je bil ustvarjen
Za lažje razumevanje si oglejte naslednjo sliko |>
Korak: Namestite NodeMCu v Arduino IDE
- Prenesite Arduino IDE s naslednje povezave:- https:// www. Glavna/Programska oprema arduino.cc/en/
- Dodajte ploščo Node MCu v Arduino IDE
-
Za nalaganje kode v NodeMCU morate dodati ploščo NodeMCu v ARDUINO IDE.
- Pojdite na datoteko in nastavitve v Arduino IDE
- V razdelku »Dodatni upravitelj odbora« kopirajte naslednjo povezavo
- arduino.esp8266.com/stable/package_esp8266c…
- in kliknite V redu
- Tabla je naložena
- Pojdite na orodja in ploščo ter izberite NodeMCU 1.0 12E
- Za lažje razumevanje si oglejte sliko avoka
4. korak: Prenesite knjižnico ArduinoJson
- Pojdite na
Skica Vključi knjižnico Upravljanje knjižnice
V iskalno polje vnesite Arduino Json
Prenesite najnovejšo različico knjižnice ArduinoJson
po prenosu knjižnice kliknite zapri
Dodajte knjižnico iz
SketchincludeLibraryArduinoJson
5. korak: Program
Naložite naslednji program na ploščo NodeMCU. in si oglejte lokacijo svoje naprave (plošča NodeMCU 1.0 12E) na serijskem monitorju.
#vključi
#vključi
#vključi
char myssid = "Vaš SSID"; // vaš omrežni SSID (ime)
char mypass = "Vaše geslo"; // geslo za omrežje
// poverilnice za Google GeoLocation API …
const char* Host = "www.googleapis.com";
Niz thisPage = "/geolocation/v1/geolocate? Key =";
// --- Tukaj dobite ključ aplikacije google maps:
developers.google.com/maps/documentation/geolocation/intro
String key = "Vaš ključ Google API"; // Poiščite od 2. koraka
Navodila
int status = WL_IDLE_STATUS;
Niz jsonString = "{ n";
dvojna zemljepisna širina = 0,0;
dvojna zemljepisna dolžina = 0,0;
dvojna natančnost = 0,0;
int more_text = 1; // nastavljeno na 1 za več izhodov za odpravljanje napak
void setup () {
Serial.begin (9600);
Serial.println ("Start");
// Nastavite WiFi na način postaje in
prekinite povezavo z dostopno točko, če je bila prej povezana
WiFi.mode (WIFI_STA);
WiFi.disconnect ();
zamuda (100);
Serial.println ( Namestitev
Končano );
// Začnemo s povezavo z a
Omrežje WiFi
Serial.print ( Povezovanje z
);
Serial.println (myssid);
WiFi.začetek (myssid, mypass);
medtem ko (WiFi.status ()! = WL_CONNECTED) {
zamuda (500);
Serial.print (".");
}
Serial.println (".");
}
void loop () {
char bssid [6];
DynamicJsonBuffer jsonBuffer;
Serial.println ("začetek skeniranja");
// WiFi.scanNetworks se bo vrnil
število najdenih omrežij
int n = WiFi.scanNetworks ();
Serial.println ("scandone");
če (n == 0)
Serial.println ("omrežij ni mogoče najti");
drugače
{
Serial.print (n);
Serial.println ("omrežje najdeno …");
if (več_teksta) {
// Natisnite formatiran json …
Serial.println ("{");
Serial.println ("\" homeMobileCountryCode / ": 234,"); // to je pravi UKC MC
Serial.println ("\" homeMobileNetworkCode / ": 27,"); // in pravi UK MNC
Serial.println ("\" radioType / ": \" gsm / ","); // za gsm
Serial.println ("\" nosilec / ": \" Vodafone / ","); // povezan z Vodafonom
Serial.println ("\" cellTowers / ": ["); // Ne prijavljam nobenih celičnih stolpov
Serial.println ("],");
Serial.println ("\" wifiAccessPoints / ": [");
za (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));
če (i <n - 1)
{
Serial.println ("},");
}
drugače
{
Serial.println ("}");
}
}
Serial.println ("]");
Serial.println ("}");
}
Serial.println ("");
}
// zdaj zgradimo jsonString …
jsonString = "{ n";
jsonString += "\" homeMobileCountryCode / ": 234, / n"; // to je pravi UKC MC
jsonString += "\" homeMobileNetworkCode / ": 27, / n"; // in pravi UK MNC
jsonString += "\" radioType / ": \" gsm / ", / n"; // za gsm
jsonString += "\" nosilec / ": \" Vodafone / ", / n"; // povezan z Vodafonom
jsonString += "\" wifiAccessPoints / ": [ n";
za (int j = 0; j <n; ++ j)
{
jsonString += "{ n";
jsonString += "\" macAddress / ": \" ";
jsonString += (WiFi. BSSIDstr (j));
jsonString += "\", / n ";
jsonString += "\" signalStrength / ":";
jsonString += WiFi. RSSI (j);
jsonString += "\ n";
če (j <n - 1)
{
jsonString += "}, / n";
}
drugače
{
jsonString += "} n";
}
}
jsonString += ("] n");
jsonString += ("} n");
//--------------------------------------------------------------------
Serial.println ("");
Odjemalec WiFiClientSecure;
// Povežite se s odjemalcem in pokličite api
Serial.print ("Zahtevan URL:");
// ---- Tukaj dobite ključ za Google Zemljevide, povezavo:
Serial.println ("https://" + (String) Host + thisPage + "PUT-YOUR-GOOGLE-MAPS-API-KEY-HERE");
Serial.println ("");
if (client.connect (Host, 443)) {
Serial.println ("Povezano");
client.println ("POST" + thisPage + ključ + "HTTP/1.1");
client.println ("Gostitelj:" + (niz) gostitelj);
client.println ("Povezava: zaprta");
client.println ("Vrsta vsebine: aplikacija/json");
client.println ("Uporabniški agent: Arduino/1.0");
client.print ("Content-Length:");
client.println (jsonString.length ());
client.println ();
client.print (jsonString);
zamuda (500);
}
// Preberite in razčlenite vse vrstice
odgovor s strežnika
medtem ko (client.available ()) {
Vrstna vrstica = client.readStringUntil ('\ r');
if (več_teksta) {
Serial.print (vrstica);
}
JsonObject & root = jsonBuffer.parseObject (vrstica);
if (root.success ()) {
zemljepisna širina = koren ["lokacija"] ["lat"];
longitude = root ["location"] ["lng"];
natančnost = koren ["natančnost"];
}
}
Serial.println ("zapiranje povezave");
Serial.println ();
client.stop ();
Serial.print ("Latitude =");
Serial.println (zemljepisna širina, 6);
Serial.print ("Dolžina =");
Serial.println (zemljepisna dolžina, 6);
Serial.print ("Točnost =");
Serial.println (natančnost);
zamuda (10000);
Serial.println ();
Serial.println ("Ponovni zagon …");
Serial.println ();
zamuda (2000);
}