解碼 GPS 數據 - 虛擬物聯網硬體和樹莓派
在本課程的這一部分中,你將解碼由樹莓派或虛擬物聯網設備從 GPS 傳感器讀取的 NMEA 訊息,並提取緯度和經度。
解碼 GPS 數據
一旦從串行端口讀取到原始 NMEA 數據,就可以使用開源 NMEA 庫進行解碼。
任務 - 解碼 GPS 數據
編程設備以解碼 GPS 數據。
-
如果尚未打開
gps-sensor
應用項目,請打開它 -
安裝
pynmea2
Pip 套件。此套件包含解碼 NMEA 訊息的代碼。pip3 install pynmea2
-
在
app.py
文件的導入部分添加以下代碼以導入pynmea2
模塊:import pynmea2
-
用以下內容替換
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
函數進行此轉換。然後檢查緯度的方向,如果緯度是南方,則將其值轉換為負數。同樣,如果經度是西方,則將其轉換為負數。
最後將坐標和用於獲取位置的衛星數量打印到控制台。
-
運行代碼。如果你使用的是虛擬物聯網設備,請確保 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 傳感器程序與數據解碼成功了!