6.8 KiB
讀取 GPS 數據 - 虛擬物聯網硬件
在本課程中,您將為虛擬物聯網設備添加一個 GPS 傳感器,並從中讀取數據。
虛擬硬件
虛擬物聯網設備將使用一個模擬的 GPS 傳感器,該傳感器可以通過 UART 串口訪問。
實體 GPS 傳感器通常配備天線,用於接收來自 GPS 衛星的電波,並將 GPS 信號轉換為 GPS 數據。虛擬版本則模擬這一過程,允許您設置緯度和經度、發送原始 NMEA 語句,或者上傳包含多個位置的 GPX 文件,這些位置可以依次返回。
🎓 NMEA 語句將在本課程後續部分進行講解
在 CounterFit 中添加傳感器
要使用虛擬 GPS 傳感器,您需要在 CounterFit 應用中添加一個。
任務 - 在 CounterFit 中添加傳感器
在 CounterFit 應用中添加 GPS 傳感器。
-
在您的電腦上創建一個名為
gps-sensor
的新 Python 應用,並在其中創建一個名為app.py
的文件以及一個 Python 虛擬環境,然後添加 CounterFit 的 pip 套件。⚠️ 如果需要,您可以參考課程 1 中創建和設置 CounterFit Python 項目的說明。
-
安裝額外的 Pip 套件,以便安裝一個 CounterFit shim,該 shim 可以通過串口與基於 UART 的傳感器通信。確保您是在啟用了虛擬環境的終端中進行安裝。
pip install counterfit-shims-serial
-
確保 CounterFit 網頁應用正在運行。
-
創建一個 GPS 傳感器:
-
在 Sensors 面板的 Create sensor 框中,展開 Sensor type 下拉框並選擇 UART GPS。
-
保持 Port 設置為 /dev/ttyAMA0。
-
點擊 Add 按鈕,在端口
/dev/ttyAMA0
上創建 GPS 傳感器。
GPS 傳感器將被創建並顯示在傳感器列表中。
-
編程 GPS 傳感器
現在可以為虛擬物聯網設備編程以使用虛擬 GPS 傳感器。
任務 - 編程 GPS 傳感器
編程 GPS 傳感器應用。
-
確保
gps-sensor
應用已在 VS Code 中打開。 -
打開
app.py
文件。 -
在
app.py
文件的頂部添加以下代碼,以連接應用到 CounterFit:from counterfit_connection import CounterFitConnection CounterFitConnection.init('127.0.0.1', 5000)
-
在此代碼下方添加以下代碼,以導入一些所需的庫,包括 CounterFit 串口的庫:
import time import counterfit_shims_serial serial = counterfit_shims_serial.Serial('/dev/ttyAMA0')
此代碼從
counterfit_shims_serial
Pip 套件中導入serial
模塊。然後,它連接到/dev/ttyAMA0
串口——這是虛擬 GPS 傳感器用於其 UART 端口的地址。 -
在此代碼下方添加以下代碼,以從串口讀取數據並將值打印到控制台:
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
的函數,用於將傳入的行打印到控制台。接下來,代碼進行無限循環,每次循環從串口讀取盡可能多的文本行。它為每行調用
print_gps_data
函數。在所有數據讀取完成後,循環會休眠 1 秒,然後再次嘗試。
-
運行此代碼,確保使用與 CounterFit 應用運行的終端不同的終端,以便 CounterFit 應用保持運行。
-
從 CounterFit 應用中更改 GPS 傳感器的值。您可以通過以下方式之一進行更改:
-
將 Source 設置為
Lat/Lon
,並設置明確的緯度、經度以及用於獲取 GPS 定位的衛星數量。此值僅會發送一次,因此勾選 Repeat 框以使數據每秒重複發送。 -
將 Source 設置為
NMEA
,並在文本框中添加一些 NMEA 語句。所有這些值都會被發送,每次新的 GGA(位置修正)語句可讀取前會有 1 秒的延遲。您可以使用像 nmeagen.org 這樣的工具通過在地圖上繪製來生成這些語句。這些值僅會發送一次,因此勾選 Repeat 框以使數據在全部發送後每秒重複一次。
-
將 Source 設置為 GPX 文件,並上傳包含軌跡位置的 GPX 文件。您可以從一些流行的地圖和徒步網站(如 AllTrails)下載 GPX 文件。這些文件包含多個 GPS 位置作為軌跡,GPS 傳感器將以 1 秒間隔返回每個新位置。
這些值僅會發送一次,因此勾選 Repeat 框以使數據在全部發送後每秒重複一次。
配置 GPS 設置後,選擇 Set 按鈕以將這些值提交到傳感器。
-
-
您將看到來自 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 傳感器程序成功了!
免責聲明:
本文件使用 AI 翻譯服務 Co-op Translator 進行翻譯。我們致力於提供準確的翻譯,但請注意,自動翻譯可能包含錯誤或不準確之處。應以原始語言的文件作為權威來源。對於關鍵資訊,建議尋求專業人工翻譯。我們對因使用此翻譯而產生的任何誤解或錯誤解讀概不負責。