Skip to content

解码GPS数据 - 虚拟物联网硬件和树莓派

在本节课程中,您将解码树莓派或虚拟物联网设备从GPS传感器读取的NMEA消息,并提取纬度和经度。

解码GPS数据

一旦从串口读取到原始NMEA数据,就可以使用开源NMEA库进行解码。

任务 - 解码GPS数据

编程设备以解码GPS数据。

  1. 如果尚未打开,请打开 gps-sensor 应用项目

  2. 安装 pynmea2 Pip包。此包包含用于解码NMEA消息的代码。

    sh
    pip3 install pynmea2
  3. app.py 文件的导入部分添加以下代码以导入 pynmea2 模块:

    python
    import pynmea2
  4. 用以下内容替换 print_gps_data 函数的内容:

    python
    msg = pynmea2.parse(line)
    if msg.sentence_type == 'GGA':
        lat = pynmea2.dm_to_sd(msg.lat)
        lon = pynmea2.dm_to_sd(msg.lon)
    
        if msg.lat_dir == 'S':
            lat = lat * -1
    
        if msg.lon_dir == 'W':
            lon = lon * -1
    
        print(f'{lat},{lon} - from {msg.num_sats} satellites')

    此代码将使用 pynmea2 库解析从UART串口读取的行。

    如果消息的句子类型是 GGA,那么这是一条位置固定消息,并将被处理。纬度和经度值将从消息中读取,并从NMEA (d)ddmm.mmmm 格式转换为十进制度。dm_to_sd 函数完成此转换。

    然后检查纬度的方向,如果纬度是南方,则将其值转换为负数。同样地,如果经度是西方,则将其转换为负数。

    最后,坐标将打印到控制台,同时显示用于定位的卫星数量。

  5. 运行代码。如果您使用的是虚拟物联网设备,请确保CounterFit应用正在运行并且GPS数据正在发送。

    text
    pi@raspberrypi:~/gps-sensor $ python3 app.py 
    47.6423109,-122.1390293 - from 3 satellites

💁 您可以在 code-gps-decode/virtual-device 文件夹或 code-gps-decode/pi 文件夹中找到此代码。

😀 您的GPS传感器程序成功解码数据!