跳至主要内容

解碼 GPS 數據 - 虛擬物聯網硬體和樹莓派

在本課程的這一部分中,你將解碼由樹莓派或虛擬物聯網設備從 GPS 傳感器讀取的 NMEA 訊息,並提取緯度和經度。

解碼 GPS 數據

一旦從串行端口讀取到原始 NMEA 數據,就可以使用開源 NMEA 庫進行解碼。

任務 - 解碼 GPS 數據

編程設備以解碼 GPS 數據。

  1. 如果尚未打開 gps-sensor 應用項目,請打開它

  2. 安裝 pynmea2 Pip 套件。此套件包含解碼 NMEA 訊息的代碼。

    pip3 install pynmea2
  3. app.py 文件的導入部分添加以下代碼以導入 pynmea2 模塊:

    import pynmea2
  4. 用以下內容替換 print_gps_data 函數的內容:

    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 數據正在發送。

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

💁 你可以在 code-gps-decode/virtual-device 文件夾或 code-gps-decode/pi 文件夾中找到此代碼。

😀 你的 GPS 傳感器程序與數據解碼成功了!