读取GPS数据-虚拟物联网硬件


文档摘要

读取GPS数据 - 虚拟物联网硬件 在这节课的这一部分,你将为你的虚拟物联网设备添加一个GPS传感器,并读取它的值。 虚拟硬件 虚拟物联网设备将使用一个通过串行端口访问的模拟GPS传感器。 物理GPS传感器将有一个天线来接收来自GPS卫星的无线电波,并将GPS信号转换成GPS数据。虚拟版本通过允许你设置纬度和经度、发送原始的NMEA句子或上传包含多个位置的GPX文件来模拟这一点,这些位置可以按顺序返回。 NMEA句子将在本课程后面的部分中介绍 将传感器添加到CounterFit 要使用虚拟GPS传感器,你需要将其添加到CounterFit应用中。 任务 - 将传感器添加到CounterFit 将GPS传感器添加到CounterFit应用中。

读取GPS数据 - 虚拟物联网硬件

在这节课的这一部分,你将为你的虚拟物联网设备添加一个GPS传感器,并读取它的值。

虚拟硬件

虚拟物联网设备将使用一个通过串行端口访问的模拟GPS传感器。

物理GPS传感器将有一个天线来接收来自GPS卫星的无线电波,并将GPS信号转换成GPS数据。虚拟版本通过允许你设置纬度和经度、发送原始的NMEA句子或上传包含多个位置的GPX文件来模拟这一点,这些位置可以按顺序返回。

NMEA句子将在本课程后面的部分中介绍

将传感器添加到CounterFit

要使用虚拟GPS传感器,你需要将其添加到CounterFit应用中。

任务 - 将传感器添加到CounterFit

将GPS传感器添加到CounterFit应用中。

  1. 在你的计算机上创建一个新的Python应用程序,在一个名为gps-sensor的文件夹中,包含一个名为app.py的单个文件,并创建一个Python虚拟环境,然后添加CounterFit的pip包。

    ⚠️ 如果需要,你可以参考第1课中关于创建和设置CounterFit Python项目的说明

  2. 安装一个额外的Pip包,以安装一个CounterFit适配器,使其能够通过串行连接与基于UART的传感器通信。确保你在激活虚拟环境的终端中安装这个包。

    pip install counterfit-shims-serial
  3. 确保CounterFit Web应用正在运行。

  4. 创建一个GPS传感器:

    1. 在“传感器”面板中的“创建传感器”框内,下拉“传感器类型”框并选择“UART GPS”。

    2. 将“端口”保留为/dev/ttyAMA0

    3. 选择“添加”按钮以在端口/dev/ttyAMA0上创建GPS传感器。

    GPS传感器设置

    GPS传感器将被创建并出现在传感器列表中。

    创建的GPS传感器

编程GPS传感器

现在可以编程虚拟物联网设备来使用虚拟GPS传感器了。

任务 - 编程GPS传感器

编程GPS传感器应用。

  1. 确保gps-sensor应用在VS Code中打开。

  2. 打开app.py文件。

  3. app.py顶部添加以下代码,以便将应用程序连接到CounterFit:

    from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000)
  4. 在这之后添加以下代码,导入一些所需的库,包括用于CounterFit串行端口的库:

    import time import counterfit_shims_serial serial = counterfit_shims_serial.Serial('/dev/ttyAMA0')

    这段代码导入了serial module from the counterfit_shims_serial Pip package. It then connects to the /dev/ttyAMA0串行端口——这是虚拟GPS传感器使用的UART端口的地址。

  5. 在这之后添加以下代码,从串行端口读取数据并将其打印到控制台:

    def print_gps_data(line): print(line.rstrip()) while True: line = serial.readline().decode('utf-8') while len(line) > 0: print_gps_data(line) line = serial.readline().decode('utf-8') time.sleep(1)

    添加一个名为print_gps_data is defined that prints out the line passed to it to the console.

    Next the code loops forever, reading as many lines of text as it can from the serial port in each loop. It calls the print_gps_data function for each line.

    After all the data has been read, the loop sleeps for 1 second, then tries again.

  6. Run this code, ensuring you are using a different terminal to the one that the CounterFit app is running it, so that the CounterFit app remains running.

  7. From the CounterFit app, change the value of the gps sensor. You can do this in one of these ways:

    • Set the Source to Lat/Lon, and set an explicit latitude, longitude and number of satellites used to get the GPS fix. This value will be sent only once, so check the Repeat box to have the data repeat every second.

      The GPS sensor with lat lon selected

    • Set the Source to NMEA的函数,并在文本框中输入一些NMEA句子。所有这些值都将被发送,每条新的GGA(位置修正)句子之间延迟1秒。

    设置NMEA句子的GPS传感器

    可以使用像nmeagen.org这样的工具生成这些句子,只需在地图上绘制即可。这些值只会发送一次,所以请勾选“重复”框,以便在发送完所有数据后每隔一秒重复一次。

    • 将“来源”设置为GPX文件,并上传包含轨迹位置的GPX文件。你可以从许多流行的映射和远足网站下载GPX文件,例如AllTrails。这些文件包含作为路径的多个GPS位置,GPS传感器将以1秒的间隔返回每个新位置。

      设置GPX文件的GPS传感器

      这些值只会发送一次,所以请勾选“重复”框,以便在发送完所有数据后每隔一秒重复一次。

    配置好GPS设置后,点击“设置”按钮以提交这些值到传感器。

  8. 你会看到GPS传感器的原始输出,类似于以下内容:

    $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67 $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67

你可以在code-gps/virtual-device文件夹中找到这段代码。

你的GPS传感器程序成功了!

声明:
本文件灏天文库团队进行了翻译。尽管我们力求准确,但请注意,翻译可能包含错误或不准确之处。原文档以其原始语言为准。我们不对因使用此翻译而产生的任何误解或误译负责。


作者与出处
原作者: microsoft
来源:microsoft
许可证:MIT
整理: 灏天文库整理
由灏天文库结构化整理,提供目录导航、全文检索与在线阅读,便于系统化学习
发布者: 作者: microsoft 转发
评论区 (0)
U