This data measurement is implemented using Adafruit Ultimate GPS featherwing and Adafruit Feather M0 WiFi (ATWINC1500) micro-controllers.
1.0 Adafruit Ultimate GPS featherwing Overview
An overview of the GPS featherwing can be found here.
2.0 Diagram of GPS sensor and Adafruit Feather M0 WiFi connection
An example of a GPS micro-controller connection to Feather M0 is shown below.
Connection tips:
- connect both feather M0 and GPS sensor to power and ground
- connect TX of GPS to RX of Feather M0
- connect RX of GPS to TX of Feather M0
3.0 Implementation
The Library
Include the config.h and UCW_GPS libraries
#include "config.h" #include "UCW_GPS.h"
Edit the config.h library
The struct, cfg, allows the user to provide access token for authentication, server address and port number, indicate if connection mode is secured and specify server connection medium (REST_API or MQTT)
config.h: struct_cfgstatic UCWConfig cfg = { .host = "cloud.dev.unitycloudware.com", .port = 80, .isSecuredConnection = false, .useMqtt = false, .mqttUser = UCW_MQTT_USER, .mqttPassword = UCW_MQTT_PASS, .token = "your_token" };
In this example, connection to the UCW server is via a WiFi network. WiFi credentials (SSID and password) are provided here
WiFi credentials/******************************* WiFi **************************************/ /* The UCW_WiFi client will work with the following boards: - Feather M0 WiFi -> https://www.adafruit.com/products/3010 - Feather HUZZAH ESP8266 -> https://www.adafruit.com/products/2821 - HUZZAH ESP8266 Breakout -> https://www.adafruit.com/products/2471 - Feather WICED -> https://www.adafruit.com/products/3056 */ #define WIFI_SSID "your_SSID" #define WIFI_PASS "your_password" #include "UCW_WiFi.h" UCW_WiFi ucw(&cfg, WIFI_SSID, WIFI_PASS);
Provide data stream name and device ID
device ID and data stream are defined in the main file
#define DEVICE_ID "your_device_ID" #define DATA_STREAM "GPS info using RMC and GGA"
Create object for UCW_GPS.h library
UCW_GPS ucw_gps; //create GPS object
connect() method is used to connect the micro-controller to the WiFi network. This is called in the void setup () section of the arduino file
ucw.connect();
printNetworkInfo() is called to print the details of the WiFi network that the micro-controller is connected to
ucw.printNetworkInfo();
Setup GPS
setupGPS() method Initialise the GPS module, sets the update rate to 1Hz, surpresses the output to only RMC and GGA NMEA statements and activates updates of the GPS antenna
ucw_gps.setupGPS();
sys() method ensures the connection to the UCW cloud/server is still valid/established. This method is called in the void loop() section
ucw.sys();
Read Data
The readGPS() method extracts relevant information from the NMEA statements received from the GPS sensor and returns the type gpsParams.
In this example, the latitude, longitude date, and time are extracted from the struct and saved as a JSON string gpsData
gpsParams data = ucw_gps.readGPS(); // read GPS info String Time = String(data.Hour) + ":" + String(data.Min) + ":" + String(data.Sec) + "." + String(data.millisec); String Date = "20" + String(data.Year) + "-" + String(data.Month) + "-" + String(data.Day); String timeStamp = Date + " " + Time; String gpsData = "{\"Latitude\": %lat,\"Longitude\": %long,\"Timestamp\": \"%tStamp\"}"; gpsData.replace("%lat", String(data.Latitude)); gpsData.replace("%long", String(data.Longitude)); gpsData.replace("%tStamp", timeStamp);
Sending the data
The data is sent to the server using the sendData() method
ucw.sendData(DEVICE_ID, DATA_STREAM, gpsData);
The full example can be found here.