Skip to content

Add GPS to exported libraries #401

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 5 commits into from
Feb 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/compile-examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@ jobs:
additional-libraries: |
- name: lvgl
version: 7.11.0
- name: MicroNMEA
additional-sketch-paths: |
- libraries/PDM
- libraries/doom
Expand All @@ -80,6 +81,7 @@ jobs:
- libraries/USBHOST
- libraries/USBMSD/examples/AccessFlashAsUSBDisk
- libraries/WiFi
- libraries/GSM
- board:
fqbn: arduino:mbed:nanorp2040connect
additional-sketch-paths: |
Expand Down
4 changes: 2 additions & 2 deletions libraries/GSM/examples/GNSSClient/GNSSClient.ino
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
#include <GPS.h>
#include <GSM.h>

REDIRECT_STDOUT_TO(Serial);

#include "arduino_secrets.h"
char pin[] = SECRET_PIN;
char apn[] = SECRET_APN;
Expand All @@ -26,6 +24,8 @@ void setup() {
}

void loop() {
// Print out raw NMEA strings.
// For parsed output look at the MicroNMEA_integration example.
if(GPS.available()){
Serial.print((char) GPS.read());
delay(1);
Expand Down
192 changes: 112 additions & 80 deletions libraries/GSM/examples/MicroNMEA_integration/MicroNMEA_integration.ino
Original file line number Diff line number Diff line change
@@ -1,92 +1,124 @@
#include <GPS.h>
#include <GSM.h>
#include <MicroNMEA.h>

#include "arduino_secrets.h"
char pin[] = SECRET_PIN;
char apn[] = SECRET_APN;
char username[] = SECRET_USERNAME;
char pass[] = SECRET_PASSWORD;

void mycallback(char * output);

void setup() {
Serial.begin(115200);
while (!Serial) {}
//GSM.debug(Serial);
Serial.println("\nStarting connection to server...");
GSM.begin(pin, apn, username, pass, CATNB);
Serial.println("\nStarting connection ...");

Serial.println("\nEnable GNSS Engine...");
GSM.beginGNSS(mycallback);
GSM.startGNSS();
}
constexpr auto pin { SECRET_PIN };
constexpr auto apn { SECRET_APN };
constexpr auto username { SECRET_USERNAME };
constexpr auto pass { SECRET_PASSWORD };

char nmeaBuffer[100];
MicroNMEA nmea(nmeaBuffer, sizeof(nmeaBuffer));

void loop() {

delay(1000);

// Output GPS information from previous second
Serial.print("Valid fix: ");
Serial.println(nmea.isValid() ? "yes" : "no");

if (nmea.isValid()) {

Serial.print("Nav. system: ");
if (nmea.getNavSystem())
Serial.println(nmea.getNavSystem());
else
Serial.println("none");

Serial.print("Num. satellites: ");
Serial.println(nmea.getNumSatellites());

Serial.print("HDOP: ");
Serial.println(nmea.getHDOP() / 10., 1);

Serial.print("Date/time: ");
Serial.print(nmea.getYear());
Serial.print('-');
Serial.print(int(nmea.getMonth()));
Serial.print('-');
Serial.print(int(nmea.getDay()));
Serial.print('T');
Serial.print(int(nmea.getHour()));
Serial.print(':');
Serial.print(int(nmea.getMinute()));
Serial.print(':');
Serial.println(int(nmea.getSecond()));

long latitude_mdeg = nmea.getLatitude();
long longitude_mdeg = nmea.getLongitude();
Serial.print("Latitude (deg): ");
Serial.println(latitude_mdeg / 1000000., 6);

Serial.print("Longitude (deg): ");
Serial.println(longitude_mdeg / 1000000., 6);

long alt;
Serial.print("Altitude (m): ");
if (nmea.getAltitude(alt))
Serial.println(alt / 1000., 3);
else
Serial.println("not available");

Serial.print("Speed: ");
Serial.println(nmea.getSpeed() / 1000., 3);
Serial.print("Course: ");
Serial.println(nmea.getCourse() / 1000., 3);
}
// Keep track of NMEA string processing
auto nmeaProcessStatus { false };

// Check for valid fix every checkValidInterval ms
constexpr unsigned long checkValidInterval { 5000 };
unsigned long checkValidNow {};

void setup()
{
Serial.begin(115200);
for (const auto timeout = millis() + 2500; !Serial && millis() < timeout; delay(250))
;

// GSM.debug(Serial);
delay(1000);

Serial.println("Starting Carrier Network registration");
if (!GSM.begin(pin, apn, username, pass, CATNB)) {
Serial.println("The board was not able to register to the network...");
// do nothing forevermore:
while (1)
;
}
Serial.println("Enable GNSS Engine...");
// GPS.begin() start and eanble the GNSS engine
GPS.begin();
Serial.println("GNSS Engine enabled...");
Serial.println("Waiting for a valid fix.");

checkValidNow = millis();
}

void mycallback(char * output)
void loop()
{
for (size_t i = 0; i < strlen(output); i++) {
nmea.process(output[i]);
}
nmea.process('\0');
//Serial.println(output);
while (GPS.available()) {
char c = GPS.read();
// process is true when a valid NMEA string has been processed
nmeaProcessStatus = nmea.process(c);
}

if (nmeaProcessStatus && millis() > checkValidNow) {
checkValidNow = millis() + checkValidInterval;

// Output GPS information from previous second
Serial.print("Valid fix: ");
Serial.println(nmea.isValid() ? "yes" : "no");

if (!nmea.isValid())
return;

String navSystem;
switch (nmea.getNavSystem()) {
case 'N':
navSystem = "GNSS";
break;
case 'P':
navSystem = "GPS";
break;
case 'L':
navSystem = "GLONASS";
break;
case 'A':
navSystem = "Galileo";
break;
default:
break;
}
Serial.print("Nav. system: ");
Serial.println(navSystem);

Serial.print("Num. satellites: ");
Serial.println(nmea.getNumSatellites());

Serial.print("HDOP: ");
Serial.println(nmea.getHDOP() / 10., 1);

Serial.print("Date/time: ");
Serial.print(nmea.getYear());
Serial.print('-');
Serial.print(int(nmea.getMonth()));
Serial.print('-');
Serial.print(int(nmea.getDay()));
Serial.print('T');
Serial.print(int(nmea.getHour()));
Serial.print(':');
Serial.print(int(nmea.getMinute()));
Serial.print(':');
Serial.println(int(nmea.getSecond()));

long latitude_mdeg = nmea.getLatitude();
long longitude_mdeg = nmea.getLongitude();
Serial.print("Latitude (deg): ");
Serial.println(latitude_mdeg / 1000000., 6);

Serial.print("Longitude (deg): ");
Serial.println(longitude_mdeg / 1000000., 6);

long alt;
Serial.print("Altitude (m): ");
if (nmea.getAltitude(alt))
Serial.println(alt / 1000., 3);
else
Serial.println("not available");

Serial.print("Speed: ");
Serial.println(nmea.getSpeed() / 1000., 3);
Serial.print("Course: ");
Serial.println(nmea.getCourse() / 1000., 3);
nmea.clear();
}
}
2 changes: 1 addition & 1 deletion portenta.variables
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
export FLAVOUR="portenta"
export VARIANTS=("PORTENTA_H7_M7 PORTENTA_H7_M4")
export FQBNS=("envie_m7 envie_m4")
export LIBRARIES=("doom Ethernet MRI Portenta_SDRAM SPI WiFi ea_malloc openamp_arduino Portenta_System ThreadDebug Himax_HM01B0 PDM Portenta_Video USBAudio KernelDebug Portenta_Audio RPC USBHID Wire Portenta_lvgl Portenta_Camera rpclib USBHOST mbed-memory-status Portenta_SDCARD Scheduler USBMSD SocketWrapper GSM")
export LIBRARIES=("doom Ethernet MRI Portenta_SDRAM SPI WiFi ea_malloc openamp_arduino Portenta_System ThreadDebug Himax_HM01B0 PDM Portenta_Video USBAudio KernelDebug Portenta_Audio RPC USBHID Wire Portenta_lvgl Portenta_Camera rpclib USBHOST mbed-memory-status Portenta_SDCARD Scheduler USBMSD SocketWrapper GSM GPS")
export BOOTLOADERS=("PORTENTA_H7")