תוכן עניינים:
2025 מְחַבֵּר: John Day | [email protected]. שונה לאחרונה: 2025-01-13 06:57
זה פרויקט ההתמחות הקיצית שלי. אני באמת מפתיע כשאני שומע שאנחנו יכולים לאתר מיקום כל מכשיר בלי להשתמש במודול GPS רק באמצעות NodeMCU. באמצעות זה אנו יכולים לעקוב אחר כל מכשיר. אתה גם מפתיע כיצד נוכל לאתר מכשיר באמצעות WiFi בלבד. להלן תיאור המיון כדי להבין אותו.
- · זה סרוק את כמעט כל ה- WiFi שלך.
- · שלח את מיקום המכשיר הזה ל- Google באמצעות Google API
- · על פי זה זה אתר את מיקום המכשיר שלך
- · יש לך חיבור רשת חזק לפרויקט זה.
שלב 1: חלקים וכלי
חלקים
- NodeMCU (ESP8266 1.0 12E)
- כבל יו אס בי
כלים
Arduino IDE עם לוח NodeMcu 1.0 12E
ממשק API של Google
שלב 2: מצא את Google API
- פתח את הדפדפן שלך והקלד: console.developer.google.com
- צור פרויקט חדש
- לאחר יצירת פרוייקט חדש לחץ על אישורים
- לחץ על מפתח API
-
מפתח ה- API שלך נוצר
להבנה קלה ראו את התמונה הבאה |>
שלב 3: הגדר את NodeMCu ב- Arduino IDE
- הורד את Arduino IDE מהקישור הבא:- https:// www. ראשי/תוכנה arduino.cc/iw/
- הוסף לוח Node MCu ב- Arduino IDE
-
להעלאת קוד ב- NodeMCU עליך להוסיף את לוח NodeMCu ב- ARDUINO IDE.
- עבור לקובץ והעדפות ב- Arduino IDE
- ובסעיף ניהול מועצת המנהלים הנוספת העתק את הקישור הבא
- arduino.esp8266.com/stable/package_esp8266c…
- ולחץ על אישור
- הלוח מוריד
- עבור אל הכלים והלוח ובחר NodeMCU 1.0 12E
- עיין בתמונת avobe להבנה קלה
שלב 4: הורד את ספריית ArduinoJson
- עבור אל
סקיצה כלול ספרייה נהל ספריה
הקלד Arduino Json בתיבת החיפוש
הורד את הגירסה העדכנית ביותר של ספריית ArduinoJson
לאחר הורדת הספרייה לחץ על סגור
הוסף ספרייה מ
SketchincludeLibraryArduinoJson
שלב 5: תכנית
העלה את התוכנית הבאה ללוח NodeMCU. וראה את מיקום המכשיר שלך (לוח NodeMCU 1.0 12E) במסך סידורי.
#לִכלוֹל
#לִכלוֹל
#לִכלוֹל
char myssid = "ה- SSID שלך"; // SSID הרשת שלך (שם)
char mypass = "הסיסמה שלך"; // סיסמת הרשת שלך
// אישורים לממשק API GeoLocation של Google …
const char* Host = "www.googleapis.com";
String thisPage = "/geolocation/v1/geolocate? Key =";
// --- קבל כאן מפתח ap של google maps:
developers.google.com/maps/documentation/geolocation/intro
String key = "מפתח ה- API של Google שלך"; // מצא משלב 2
הוראה
int int = WL_IDLE_STATUS;
מחרוזת jsonString = "{ n";
קו רוחב כפול = 0.0;
אורך כפול = 0.0;
דיוק כפול = 0.0;
int more_text = 1; // מוגדר ל -1 עבור פלט באגים נוסף
הגדרת בטל () {
Serial.begin (9600);
Serial.println ("התחל");
// הגדר את WiFi למצב תחנה ו
נתק מ- AP אם הוא היה מחובר בעבר
WiFi.mode (WIFI_STA);
WiFi.disconnect ();
עיכוב (100);
Serial.println ( התקנה
בוצע );
// אנו מתחילים בחיבור לא
רשת WiFi
Serial.print ( מתחבר אל
);
Serial.println (myssid);
WiFi.begin (myssid, mypass);
בעוד (WiFi.status ()! = WL_CONNECTED) {
עיכוב (500);
Serial.print (".");
}
Serial.println (".");
}
לולאת חלל () {
char bssid [6];
DynamicJsonBuffer jsonBuffer;
Serial.println ("התחלת סריקה");
// WiFi.scanNetworks יחזור
מספר הרשתות שנמצאו
int n = WiFi.scanNetworks ();
Serial.println ("scandone");
אם (n == 0)
Serial.println ("לא נמצאו רשתות");
אַחֵר
{
Serial.print (n);
Serial.println ("רשתות נמצאו …");
אם (more_text) {
// הדפס את ה- json המעוצב …
Serial.println ("{");
Serial.println ("\" homeMobileCountryCode / ": 234,"); // זהו MCC אמיתי בבריטניה
Serial.println ("\" homeMobileNetworkCode / ": 27,"); // ו- MNC בריטי אמיתי
Serial.println ("\" radioType / ": \" gsm / ","); // עבור gsm
Serial.println ("\" ספק / ": \" Vodafone / ","); // קשור ל- Vodafone
Serial.println ("\" cellTowers / ": ["); // אני לא מדווח על מגדלי סלולר
Serial.println ("],");
Serial.println ("\" wifiAccessPoints / ": [");
עבור (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));
אם (i <n - 1)
{
Serial.println ("},");
}
אַחֵר
{
Serial.println ("}");
}
}
Serial.println ("]");
Serial.println ("}");
}
Serial.println ("");
}
// עכשיו בנה את jsonString …
jsonString = "{ n";
jsonString += "\" homeMobileCountryCode / ": 234, / n"; // זהו MCC אמיתי בבריטניה
jsonString += "\" homeMobileNetworkCode / ": 27, / n"; // ו- MNC בריטי אמיתי
jsonString += "\" radioType / ": \" gsm / ", / n"; // עבור gsm
jsonString += "\" ספק / ": \" Vodafone / ", / n"; // קשור ל- Vodafone
jsonString += "\" wifiAccessPoints / ": [n";
עבור (int j = 0; j <n; ++ j)
{
jsonString += "{ n";
jsonString += "\" macAddress / ": \" ";
jsonString += (WiFi. BSSIDstr (j));
jsonString += "\", / n ";
jsonString += "\" signalStrength / ":";
jsonString += WiFi. RSSI (j);
jsonString += "\ n";
אם (j <n - 1)
{
jsonString += "}, / n";
}
אַחֵר
{
jsonString += "} n";
}
}
jsonString += ("] n");
jsonString += ("} n");
//--------------------------------------------------------------------
Serial.println ("");
לקוח WiFiClientSecure;
// התחבר ללקוח ובצע את שיחת ה- api
Serial.print ("כתובת URL מבקשת:");
// ---- קבל כאן את מפתח ה- Api של מפות Google, קישור:
Serial.println ("https://" + (String) Host + thisPage + "PUT-YOUR-GOOGLE-MAPS-API-KEY-HERE");
Serial.println ("");
if (client.connect (Host, 443)) {
Serial.println ("מחובר");
client.println ("POST" + thisPage + מפתח + "HTTP/1.1");
client.println ("Host:" + (String) Host);
client.println ("חיבור: סגור");
client.println ("סוג תוכן: יישום/json");
client.println ("משתמש-סוכן: Arduino/1.0");
client.print ("אורך התוכן:");
client.println (jsonString.length ());
client.println ();
client.print (jsonString);
עיכוב (500);
}
// קרא ונתח את כל השורות של
התשובה מהשרת
while (client.available ()) {
קו מחרוזת = client.readStringUntil ('\ r');
אם (more_text) {
Serial.print (שורה);
}
JsonObject & root = jsonBuffer.parseObject (line);
if (root.success ()) {
latitude = root ["מיקום"] ["lat"];
longitude = root ["מיקום"] ["lng"];
דיוק = שורש ["דיוק"];
}
}
Serial.println ("סגירת חיבור");
Serial.println ();
client.stop ();
Serial.print ("Latitude =");
Serial.println (קו הרוחב, 6);
Serial.print ("אורך =");
Serial.println (אורך, 6);
Serial.print ("דיוק =");
Serial.println (דיוק);
עיכוב (10000);
Serial.println ();
Serial.println ("הפעלה מחדש …");
Serial.println ();
עיכוב (2000);
}