你有没有想过在不使用任何 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 模块即可轻松获取任何设备的当前位置。
全部0条评论
快来发表一下你的评论吧 !