你有沒有想過在不使用任何 GPS 硬件的情況下獲取設備的位置?聽起來不錯!!是的,只需使用 NodeMCU ESP 板就可以獲取位置坐標,而無需任何額外的硬件。在這里,我們將使用ESP12E 板來獲取我們位置的實時坐標。由于Google 的 Geolocation API ,這成為可能。那么讓我們看看這個 Geolocation API 是如何工作的,以及我們如何使用它來獲取位置。
谷歌地理定位 API 的工作原理是什么?
眾所周知,用于智能手機的 Android 操作系統由 Google 提供支持。通常,大多數手機一直都啟用 GPS 和 Wi-Fi,因此 Google 不僅可以跟蹤我們的位置,還可以跟蹤附近的 Wi-Fi 網絡。例如,如果您在啟用 Wi-Fi 和 GPS 的街道上行走,那么您的手機會不斷掃描附近的 Wi-Fi 網絡以及 Google 所做的事情,它會保存 MAC 地址和該 Wi-Fi 網絡的名稱以及我們手機的位置。
因此,根據手機接收到的信號強度,Google 會估計特定 Wi-Fi 網絡的位置,并將該數據保存到數據庫中。因此,下一次,如果有人通過相同的 Wi-Fi 網絡并且沒有在他的手機中啟用 GPS,他仍然可以根據該特定 Wi-Fi 網絡的位置獲取手機的位置。
因此,附近的 Wi-Fi 網絡數量越多,位置就越精確。這就是 Google 地理定位的工作原理。有關更多信息,您可以查看Geolocation API 的文檔。
現在,我們將在 NodeMCU ESP12E 開發板中使用 Geolocation API 的魔力,并嘗試獲取位置坐標。在這里,我們將使用Arduino IDE 的串行監視器來查看坐標。
從 Google Geolocation 獲取 API 密鑰
要使用 Google 的 Geolocation 服務,我們需要一個 Google 帳戶和 API 密鑰。按照以下步驟獲取 API 密鑰。
第 1 步:-轉到Google 開發者頁面,使用您的 Google 帳戶登錄并點擊獲取 API 密鑰,然后點擊開始。
第 2 步:-通過單擊開始,將打開一個新窗口,如下所示。
點擊Maps and Places for Pick Product 選項,然后點擊continue。
第 3 步:-為您的項目命名,然后單擊Next。
第 4 步:-下一步是設置帳單。您必須保存您的銀行卡詳細信息。雖然這項服務免費一年,但這只是為了檢查你不是機器人。一年后,未經您的許可,它不會從您的帳戶中扣除金額。因此,只需填寫詳細信息并繼續并單擊下一步。
第 5 步:-之后,您將獲得您的 API 密鑰。復制此密鑰并將此密鑰保存在記事本上。我們的代碼中需要這個鍵。
現在,你們都準備好繼續編碼部分了。
編程 NodeMCU 以獲取 GPS 數據
在這里,我們將使用Arduino IDE 對 ESP12 進行編程。因此,請確保您已下載 ESP8266 開發板文件。
對于編碼部分,我們需要三個庫ESP8266HTTPClient 、 ArduinoJson 、 ESP8266WiFi。
然后,我們為 Wi-Fi 名稱、Wi-Fi 密碼、API 密鑰初始化變量并初始化代碼中使用的其他變量。
字符 ssid[] = "********"; // 您的網絡 SSID 名稱
char pass[] = "********"; // 你的網絡密碼
String key = "your api key";
...
..
雙緯度 = 0.0;
雙經度 = 0.0;
雙精度 = 0.0;
在設置功能中,我們將 Wi-Fi 設置為站模式并斷開與之前連接的 AP 的連接。
無效設置(){
序列.開始(9600);
Serial.println("開始");
WiFi.mode(WIFI_STA);
WiFi.disconnect();
延遲(100);
Serial.println("設置完成");
…
..
在循環功能中,我們將掃描所有附近的 Wi-Fi 網絡并提取這些網絡的 MAC 地址和強度。然后,我們從提取的信息中生成 json 字符串并將其發送到 Google 云,作為回報,我們得到位置的坐標,即緯度、經度和準確度。準確性將取決于附近可用的 Wi-fi 網絡數量。
int n = WiFi.scanNetworks();
Serial.println("掃描完成");
如果(n == 0)
Serial.println("沒有找到網絡");
別的
{
序列號.print(n);
Serial.println("找到網絡...");
如果(更多文本){
Serial.println(""wifiAccessPoints": [");
對于 (int i = 0; i < n; ++i)
{
序列號.println("{");
Serial.print(""macAddress" : "");
Serial.print(WiFi.BSSIDstr(i));
Serial.println("",");
Serial.print(""信號強度": ");
......
……
將最后給出的完整代碼上傳到板上并打開串行監視器。
您將看到您所在位置的坐標和準確性,如下所示。
現在,在您的智能手機中打開 Google 地圖并輸入以逗號 (,) 分隔的經緯度。如圖所示,您將在地圖上看到您的位置。
因此,我們已經看到只需使用多功能 ESP12 而無需任何 GPS 模塊即可輕松獲取任何設備的當前位置。
-
GPS技術
+關注
關注
0文章
26瀏覽量
10257 -
ESP
+關注
關注
0文章
183瀏覽量
33937 -
NODEMCU
+關注
關注
13文章
289瀏覽量
21391
發布評論請先 登錄
相關推薦
評論