跳至主要内容

讀取 GPS 數據 - Wio Terminal

在本課程中,你將為 Wio Terminal 添加一個 GPS 傳感器,並從中讀取數據。

硬體

Wio Terminal 需要一個 GPS 傳感器。

你將使用的傳感器是 Grove GPS Air530 傳感器。這個傳感器可以連接到多個 GPS 系統,以獲得快速、準確的定位。傳感器由兩部分組成 - 傳感器的核心電子元件和通過細線連接的外部天線,用於接收來自衛星的無線電波。

這是一個 UART 傳感器,因此通過 UART 傳輸 GPS 數據。

連接 GPS 傳感器

Grove GPS 傳感器可以連接到 Wio Terminal。

任務 - 連接 GPS 傳感器

連接 GPS 傳感器。

A grove GPS sensor

  1. 將 Grove 電纜的一端插入 GPS 傳感器上的插座。它只能以一種方式插入。

  2. 在 Wio Terminal 與電腦或其他電源斷開連接的情況下,將 Grove 電纜的另一端連接到 Wio Terminal 左側的 Grove 插座,這是靠近電源按鈕的插座。

    The grove GPS sensor connected to the left hand socket

  3. 將 GPS 傳感器放置在天線可以看到天空的位置 - 最好靠近開放的窗戶或在室外。天線沒有障礙物時更容易獲得清晰的信號。

  4. 現在你可以將 Wio Terminal 連接到電腦。

  5. GPS 傳感器有兩個 LED - 一個藍色 LED 在數據傳輸時閃爍,另一個綠色 LED 在接收來自衛星的數據時每秒閃爍一次。確保在啟動 Wio Terminal 時藍色 LED 閃爍。幾分鐘後,綠色 LED 會閃爍 - 如果沒有,你可能需要重新定位天線。

編程 GPS 傳感器

現在可以編程 Wio Terminal 以使用連接的 GPS 傳感器。

任務 - 編程 GPS 傳感器

編程設備。

  1. 使用 PlatformIO 創建一個全新的 Wio Terminal 項目。將此項目命名為 gps-sensor。在 setup 函數中添加代碼以配置串行端口。

  2. main.cpp 文件的頂部添加以下包含指令。這包括一個頭文件,其中包含配置左側 Grove 端口為 UART 的函數。

    #include <wiring_private.h>
  3. 在此之下,添加以下代碼行以聲明與 UART 端口的串行端口連接:

    static Uart Serial3(&sercom3, PIN_WIRE_SCL, PIN_WIRE_SDA, SERCOM_RX_PAD_1, UART_TX_PAD_0);
  4. 你需要添加一些代碼將一些內部信號處理程序重定向到此串行端口。在 Serial3 聲明下添加以下代碼:

    void SERCOM3_0_Handler()
    {
    Serial3.IrqHandler();
    }

    void SERCOM3_1_Handler()
    {
    Serial3.IrqHandler();
    }

    void SERCOM3_2_Handler()
    {
    Serial3.IrqHandler();
    }

    void SERCOM3_3_Handler()
    {
    Serial3.IrqHandler();
    }
  5. setup 函數中配置 Serial 端口的代碼下方,使用以下代碼配置 UART 串行端口:

    Serial3.begin(9600);

    while (!Serial3)
    ; // 等待 Serial3 準備好

    delay(1000);
  6. setup 函數中的此代碼下方,添加以下代碼以將 Grove 引腳連接到串行端口:

    pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT);
  7. loop 函數之前添加以下函數以將 GPS 數據發送到串行監視器:

    void printGPSData()
    {
    Serial.println(Serial3.readStringUntil('\n'));
    }
  8. loop 函數中,添加以下代碼以從 UART 串行端口讀取並將輸出打印到串行監視器:

    while (Serial3.available() > 0)
    {
    printGPSData();
    }

    delay(1000);

    此代碼從 UART 串行端口讀取數據。readStringUntil 函數讀取直到終止符字符,在本例中為新行。這將讀取整個 NMEA 句子(NMEA 句子以新行字符終止)。只要可以從 UART 串行端口讀取數據,它就會被讀取並通過 printGPSData 函數發送到串行監視器。一旦無法再讀取數據,loop 會延遲 1 秒(1,000 毫秒)。

  9. 構建並上傳代碼到 Wio Terminal。

  10. 上傳後,你可以使用串行監視器監控 GPS 數據。

    > Executing task: platformio device monitor <

    --- Available filters and text transformations: colorize, debug, default, direct, hexlify, log2file, nocontrol, printable, send_on_enter, time
    --- More details at http://bit.ly/pio-monitor-filters
    --- Miniterm on /dev/cu.usbmodem1201 9600,8,N,1 ---
    --- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
    $GNGGA,020604.001,4738.538654,N,12208.341758,W,1,3,,164.7,M,-17.1,M,,*67
    $GPGSA,A,1,,,,,,,,,,,,,,,*1E
    $BDGSA,A,1,,,,,,,,,,,,,,,*0F
    $GPGSV,1,1,00*79
    $BDGSV,1,1,00*68

💁 你可以在 code-gps/wio-terminal 文件夾中找到此代碼。

😀 你的 GPS 傳感器程序成功了!