Read GPS data - Wio Terminal
In this part of the lesson, you will add a GPS sensor to your Wio Terminal, and read values from it.
Hardware
The Wio Terminal needs a GPS sensor.
The sensor you'll use is a Grove GPS Air530 sensor. This sensor can connect to multiple GPS systems for a fast, accurate fix. The sensor is made of 2 parts - the core electronics of the sensor, and an external antenna connected by a thin wire to pick up the radio waves from the satellites.
This is a UART sensor, so sends GPS data over UART.
Connect the GPS sensor
The Grove GPS sensor can be connected to the Wio Terminal.
Task - connect the GPS sensor
Connect the GPS sensor.
-
Insert one end of a Grove cable into the socket on the GPS sensor. It will only go in one way round.
-
With the Wio Terminal disconnected from your computer or other power supply, connect the other end of the Grove cable to the left-hand side Grove socket on the Wio Terminal as you look at the screen. This is the socket closest to the power button.
-
Position the GPS sensor so that the attached antenna has visibility to the sky - ideally next to an open window or outside. It's easier to get a clearer signal with nothing in the way of the antenna.
-
You can now connect the Wio Terminal to your computer.
-
The GPS sensor has 2 LEDs - a blue LED that flashes when data is transmitted, and a green LED that flashes every second when receiving data from satellites. Ensure the blue LED is flashing when you power up the Wio Terminal. After a few minutes the green LED will flash - if not, you may need to reposition the antenna.
Program the GPS sensor
The Wio Terminal can now be programmed to use the attached GPS sensor.
Task - program the GPS sensor
Program the device.
-
Create a brand new Wio Terminal project using PlatformIO. Call this project
gps-sensor
. Add code in thesetup
function to configure the serial port. -
Add the following include directive to the top of the
main.cpp
file. This includes a header file with functions to configure the left-hand Grove port for UART.#include <wiring_private.h>
-
Below this, add the following line of code to declare a serial port connection to the UART port:
static Uart Serial3(&sercom3, PIN_WIRE_SCL, PIN_WIRE_SDA, SERCOM_RX_PAD_1, UART_TX_PAD_0);
-
You need to add some code to redirect some internal signal handlers to this serial port. Add the following code below the
Serial3
declaration:void SERCOM3_0_Handler()
{
Serial3.IrqHandler();
}
void SERCOM3_1_Handler()
{
Serial3.IrqHandler();
}
void SERCOM3_2_Handler()
{
Serial3.IrqHandler();
}
void SERCOM3_3_Handler()
{
Serial3.IrqHandler();
} -
In the
setup
function below where theSerial
port is configured, configure the UART serial port with the following code:Serial3.begin(9600);
while (!Serial3)
; // Wait for Serial3 to be ready
delay(1000); -
Below this code in the
setup
function, add the following code to connect the Grove pin to the serial port:pinPeripheral(PIN_WIRE_SCL, PIO_SERCOM_ALT);
-
Add the following function before the
loop
function to send the GPS data to the serial monitor:void printGPSData()
{
Serial.println(Serial3.readStringUntil('\n'));
}