基于物联网的GPS跟踪,在ThingSpeak上使用NodeMCU和Matlab可视化
扫描二维码
随时随地手机看文章
有没有想过你的手机软件是如何在驾驶时使用GPS定位你的位置的?这个问题的答案是,嵌入你手机中的一个小型GPS模块与卫星网络通信,以确定你手机的位置。在这个项目中,我们将了解GPS模块是如何工作的,我们将了解一种流行的GPS接收器模块NEO 6M,该模块与手机中使用的模块大小不同,但工作原理相同。通过使用GPS接收器模块和Thingspeak物联网平台提供的信息,我们将尝试在图表上绘制数据。除此之外,我们还将通过使用Thingspeak- Matlab可视化中的inbuild函数生成URL来可视化卫星视图地图上的位置(需要编码,在代码说明部分进行解释)。通过使用这个URL,任何浏览器的任何人都可以跟踪它所连接的GPS设备的位置。如果你正在寻找一个简单的解决方案,你也可以看看NodeMCU GPS Webserver项目,它也非常类似于我们即将构建的。
组件的要求
•NEO 6M GPS模块
•节点单片机
•连接电线
GPS模块是如何工作的?
GPS是全球定位系统的缩写,是一种全球性的无线电导航系统。为了跟踪设备的位置,GPS跟踪系统使用全球导航卫星系统(GNSS)网络。该网络由一系列卫星组成,这些卫星使用微波信号传输数据,这些数据将被GPS接收器模块接收。
GPS卫星星座由24颗绕地球运行的GPS卫星组成。这些卫星的定位方式是,在任何时候,至少有6颗卫星处于地球表面任何地方的视线范围内。当涉及到GPS设备的精确定位时,该系统遵循一个简单的数学原理,称为三边定位。
例如,考虑卫星a。当您打开移动GPS时,它会接收卫星a的当前时间和位置。现在接收器通过计算信号的时间和速度(信号的速度等于光速)来计算到卫星A的距离。接收器现在知道它必须位于由卫星A的距离形成的圆上。现在,GPS接收器从另一颗卫星获得数据,假设是卫星B。通过使用卫星B提供的数据,它知道它必须位于这两个圆(由卫星A和卫星B组成)之间的交互点上。现在,它从第三颗卫星获取数据来精确定位。这种利用卫星的时间和位置等数据来确定你的位置的过程被称为三边定位。
NEO 6M GPS接收器模块
因此,现在在我们的项目中,我们将使用NEO 6M GPS接收器模块,它由50个通道组成。这些频道就像房间,每个频道可以容纳每个卫星的一个频率。这些信道通常是并行操作的,这使得接收机在移动时保持精度。首次定位时间(TTFF)是接收卫星信号和导航信号并使用该数据计算位置所需的时间。NEO 6M的TTFF在冷启动和热启动时为27秒,热启动时为1秒。
在工作条件方面,最大工作电压为3.6V,最小工作电压为2.7V。NEO 6M模块的平均供电电流为39mA。在一些模块中,有一个内置的3.3V稳压器。因此,我们可以将模块连接到5V以获得最大性能。在通信方面,该模块采用UART,可以方便地与任何MCU (Node MCU)进行通信。连接部分在电路图部分讨论。
测试Neo 6M GPS模块
要知道GPS模块是否工作,请按照如下电路图连接模块,并上传空代码。注意,如果您上传的是空代码,那么串行通信将使用nodeMCU的默认TX和RX引脚进行。要检查串行监视器上的数据,请相应地更改电路,即将GPS模块的RX和TX连接到NodeMCU的RX和TX,如下所示
上传空代码后,打开串口监视器。到目前为止,您应该看到屏幕上打印了一些值。等等,它们不是正确的值。如果您观察,您可以发现输出中缺少一些位。首先,模块需要一些时间才能给出正确的值。注意:如果GPS模块开始闪烁,则表示该模块正在接收值。下图显示了接收到的数据中缺少一些位的情况。
如果数据没有丢失位,则数据将如下图所示。
您看到的上述数据是用NMEA格式表示的数据。NMEA代表国家海洋电子协会。这种标准数据格式被所有GPS制造商所支持,就像计算机制造商的ASCII一样。
GPGSV -显示当前的GPS卫星
1 =此周期内该类型消息的总数
2 =留言号
3 =正在查看的sv的总数
4 = SV PRN号
5 =仰角,最高90度
6 =方位角,从真北000到359度
7 =信噪比,00-99 dB(不跟踪时为空)
8-11 =第二个SV信息
12-15=第三SV信息
16-19=第四个SV信息
GPGLL -地理定位,纬度和经度。例如:$GPGLL,4815.45,N,12311.12,W,215455,A
GPS跟踪器电路图
节点MCU与NEO 6M模块之间的连接非常简单。NEO 6M模块的VCC和GND引脚连接到面包板的正负电源轨,节点MCU的3v3和GND引脚连接到面包板的正负电源轨,如下图所示。NEO 6M的RX和TX引脚连接到节点MCU的D1和D2引脚。Node MCU采用USB供电方式。
设置Thingspeak
首先,如果你是一个新用户,注册一个thingspeak帐户。我们已经用Thingspeak构建了很多有趣的项目,你也可以去看看。
注册后,选择频道。选择通道后,选择“新建通道”。
选择新通道后,将加载下面的页面。输入详细信息和适当的字段名称,然后单击保存。
选择保存后,将加载下面的页面。现在选择选项API密钥
选择API密钥后,将加载以下页面。现在,记下通道ID,写键和读键。在nodeMCU编程中使用Write键,而在Matlab可视化程序中使用Read键。
之后,选择私有视图选项并单击Matlab可视化选项。
现在,下面的页面将被加载。不做任何更改,然后选择Create。
现在,您将加载一个页面,您可以在其中编写代码,使用纬度和经度在地图上指出位置。复制粘贴本文提供的代码,并更改所需的值(读取密钥和通道ID)。
检查“创建公共URL”框,以便任何人都可以使用此URL找到设备的位置。
接下来,我们需要两种不同类型的程序。一个代码处理从GPS模块获取数据,然后将数据传输到thingspeak。第二个代码处理使用发送给thingspeak的数据指向地图上的位置。第一个代码是用Arduino IDE编写的,而第二个代码是用thingspeak Matlab可视化编写的。
在进入代码解释之前,需要下载某些库,这些库有助于将原始数据(NMEA格式)转换为可理解的数据。首先,使用提供的链接下载tinyGPS库。接下来,通过在库管理器中搜索下载thingspeak库。下载MathWorks提供的那个。
NodeMCU程序读取GPS数据并发送给Thingspeak
完整的程序可以在本页底部找到,相同的解释如下。下面的代码片段用于包含库,这些库是我们的代码正常工作所需的,并且将GPIO引脚4和5设置为NodeMCU的RX和TX引脚。设置GPS波特率为9600。
以下代码仅在有来自GPS模块的传入数据时运行。代码对数据进行编码,如果编码后的数据有效,则考虑该数据,并进行进一步的计算以将NMEA数据转换为可理解的数据。下面的代码只向thingspeak发送纬度和经度值。
Matlab ThingSpeak可视化代码在地图上显示位置
现在,我们必须编写一个代码,它可以通过使用纬度和经度值在地图上指出位置,这些值被转移到thingspeak中。下面的屏幕截图显示了示例URL。
下面的代码获取最后10个值的值,并将它们定位在地图上。通过使用URL,该URL将在运行代码后可用。要更改值的数量,它需要考虑更改写在‘ NumPoints ’之后的值。
在下面输入您的MATLAB代码
下面的代码使用由nodeMCU提供的纬度和经度在地图上精确定位位置。
一旦您的编程完成,您的页面应该看起来像下面所示
通过使用提供的URL,我在web浏览器中得到了下面的图片。
Matlab可视化从字段中获取数据,然后在地图上定位它们。下图显示了绘制在字段上的数据,这将进一步用于Matlab可视化。
测试NodeMCU GPS跟踪器
一旦启动nodeMCU,串行监视器中看到的读数可能不正确。它需要一些有限的时间来得到正确的读数。如果GPS模块开始闪烁,您将知道读数是正确的。一旦nodeMCU与LAN连接,并且GPS数据有效,则该数据将被发送到thingspeak。您可以在Thingspeak的字段中查看正在更新的数据。通过使用我们在Matlab可视化中获得的生成的URL,我们可以从任何浏览器跟踪位置。
本文编译自iotdesignpro