diff --git a/main/configuration.h b/main/configuration.h
index 31a4f35..8dfec33 100644
--- a/main/configuration.h
+++ b/main/configuration.h
@@ -94,6 +94,7 @@ void ttn_register(void (*callback)(uint8_t message));
#define GPS_RX_PIN 12
#define GPS_TX_PIN 15
#define GPS_BAUDRATE 9600
+#define USE_GPS 1
// -----------------------------------------------------------------------------
// LoRa SPI
diff --git a/main/main.ino b/main/main.ino
index 60ba970..13d6581 100644
--- a/main/main.ino
+++ b/main/main.ino
@@ -25,9 +25,57 @@ along with this program. If not, see .
#include
#include "dataformats.h"
+
// Message counter, stored in RTC memory, survives deep sleep
RTC_DATA_ATTR uint32_t count = 0;
+// -----------------------------------------------------------------------------
+// Submodules
+// -----------------------------------------------------------------------------
+#ifdef USE_GPS 1
+#include
+uint32_t LatitudeBinary, LongitudeBinary;
+uint16_t altitudeGps;
+uint8_t hdopGps;
+char t[32]; // used to sprintf for Serial output
+
+TinyGPSPlus _gps;
+HardwareSerial _serial_gps(GPS_SERIAL_NUM);
+
+void gps_time(char * buffer, uint8_t size) {
+ snprintf(buffer, size, "%02d:%02d:%02d", _gps.time.hour(), _gps.time.minute(), _gps.time.second());
+}
+
+float gps_latitude() {
+ return _gps.location.lat();
+}
+
+float gps_longitude() {
+ return _gps.location.lng();
+}
+
+float gps_altitude() {
+ return _gps.altitude.meters();
+}
+
+float gps_hdop() {
+ return _gps.hdop.hdop();
+}
+
+uint8_t gps_sats() {
+ return _gps.satellites.value();
+}
+
+void gps_setup() {
+ _serial_gps.begin(GPS_BAUDRATE, SERIAL_8N1, GPS_RX_PIN, GPS_TX_PIN);
+}
+
+static void gps_loop() {
+ while (_serial_gps.available()) {
+ _gps.encode(_serial_gps.read());
+ }
+}
+#endif
// -----------------------------------------------------------------------------
// Application
// -----------------------------------------------------------------------------