4G 18: A-GPS MS-based
This example shows how to use de A-GPS in MS-Based mode
Required Materials
1 x Waspmote 1 x Battery 1 x 4G module 1 x 4G antenna 1 x SIM card
Notes
- If the required satellites visibility is not available, no GPS position is provided by the module - The battery has to be connected. - This example can be executed in Waspmote v15
Code
/*
--------------- 4G_18 - A-GPS (MS-Based GPS) ---------------
Explanation: This example shows how to use de A-GPS in MS-Based mode
Copyright (C) 2016 Libelium Comunicaciones Distribuidas S.L.
http://www.libelium.com
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program. If not, see .
Version: 3.0
Design: David Gascón
Implementation: Alejandro Gállego
*/
#include <Wasp4G.h>
// APN settings
///////////////////////////////////////
char apn[] = "movistar.es";
char login[] = "movistar";
char password[] = "movistar";
///////////////////////////////////////
// define variables
uint8_t error;
uint8_t gps_status;
float gps_latitude;
float gps_longitude;
uint32_t previous;
bool gps_autonomous_needed = true;
void setup()
{
USB.ON();
USB.println("Start program");
//////////////////////////////////////////////////
// Set operator parameters
//////////////////////////////////////////////////
_4G.set_APN(apn, login, password);
//////////////////////////////////////////////////
// Show APN settings via USB port
//////////////////////////////////////////////////
_4G.show_APN();
//////////////////////////////////////////////////
// 1. Switch on the 4G module
//////////////////////////////////////////////////
error = _4G.ON();
// check answer
if (error == 0)
{
USB.println(F("1. 4G module ready..."));
////////////////////////////////////////////////
// 2. Start GPS feature
////////////////////////////////////////////////
// get current time
previous = millis();
gps_status = _4G.gpsStart(Wasp4G::GPS_MS_BASED);
// check answer
if (gps_status == 0)
{
USB.print(F("2. GPS started in MS-BASED. Time(secs) = "));
USB.println((millis()-previous)/1000);
}
else
{
USB.print(F("2. Error calling the 'gpsStart' function. Code: "));
USB.println(gps_status, DEC);
}
}
else
{
// Problem with the communication with the 4G module
USB.println(F("1. 4G module not started"));
USB.print(F("Error code: "));
USB.println(error, DEC);
USB.println(F("The code stops here."));
while (1);
}
}
void loop()
{
////////////////////////////////////////////////
// Wait for satellite signals and get values
////////////////////////////////////////////////
if (gps_status == 0)
{
error = _4G.waitForSignal(20000);
if (error == 0)
{
USB.print(F("3. GPS signal received. Time(secs) = "));
USB.println((millis()-previous)/1000);
USB.println(F("Acquired position:"));
USB.println(F("----------------------------"));
USB.print(F("Latitude: "));
USB.print(_4G._latitude);
USB.print(F(","));
USB.println(_4G._latitudeNS);
USB.print(F("Longitude: "));
USB.print(_4G._longitude);
USB.print(F(","));
USB.println(_4G._longitudeEW);
USB.print(F("UTC_time: "));
USB.println(_4G._time);
USB.print(F("date: "));
USB.println(_4G._date);
USB.print(F("Number of satellites: "));
USB.println(_4G._numSatellites, DEC);
USB.print(F("HDOP: "));
USB.println(_4G._hdop);
USB.println(F("----------------------------"));
// get degrees
gps_latitude = _4G.convert2Degrees(_4G._latitude, _4G._latitudeNS);
gps_longitude = _4G.convert2Degrees(_4G._longitude, _4G._longitudeEW);
USB.println("Conversion to degrees:");
USB.print(F("Latitude: "));
USB.println(gps_latitude);
USB.print(F("Longitude: "));
USB.println(gps_longitude);
USB.println();
////////////////////////////////////////////////
// Change to AUTONOMOUS mode if needed
////////////////////////////////////////////////
if (gps_autonomous_needed == true)
{
_4G.gpsStop();
gps_status = _4G.gpsStart(Wasp4G::GPS_AUTONOMOUS);
// check answer
if (gps_status == 0)
{
USB.println(F("GPS started in AUTONOMOUS mode"));
// update variable
gps_autonomous_needed = false;
}
else
{
USB.print(F("Error calling the 'gpsStart' function. Code: "));
USB.println(gps_status, DEC);
}
}
delay(10000);
}
else
{
USB.print("no satellites fixed. Error: ");
USB.println(error, DEC);
}
}
else
{
////////////////////////////////////////////////
// Restart GPS feature
////////////////////////////////////////////////
USB.println(F("Restarting the GPS engine"));
// stop GPS
_4G.gpsStop();
delay(1000);
// start GPS
gps_status = _4G.gpsStart(Wasp4G::GPS_MS_BASED);
// check answer
if (gps_status == 0)
{
USB.print(F("GPS started in MS-BASED. Time(ms) = "));
USB.println(millis() - previous);
}
else
{
USB.print(F("Error calling the 'gpsStart' function. Code: "));
USB.println(gps_status, DEC);
}
}
}
Output
Start program
*****************************
APN: movistar.es
LOGIN: movistar
PASSWORD: movistar
*****************************
1. 4G module ready...
2. GPS started in MS-BASED. Time(secs) = 21
3. GPS signal received. Time(secs) = 35
Acquired position:
----------------------------
Latitude: 4139.9612,N
Longitude: 00051.4686,W
UTC_time: 114504
date: 110816
Number of satellites: 3
HDOP: 500.0000000000
----------------------------
Conversion to degrees:
Latitude: 41.6660194396
Longitude: -0.8578099250
GPS started in AUTONOMOUS mode
3. GPS signal received. Time(secs) = 47
Acquired position:
----------------------------
Latitude: 4139.9248,N
Longitude: 00051.4887,W
UTC_time: 114515
date: 110816
Number of satellites: 3
HDOP: 500.0000000000
----------------------------
Conversion to degrees:
Latitude: 41.6654129028
Longitude: -0.8581449508
3. GPS signal received. Time(secs) = 57
Acquired position:
----------------------------
Latitude: 4140.1565,N
Longitude: 00051.4161,W
UTC_time: 114527
date: 110816
Number of satellites: 4
HDOP: 2.5000000000
----------------------------
Conversion to degrees:
Latitude: 41.6692733764
Longitude: -0.8569349288
Last updated