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