1
0

Add GPS functionality: implement GPS_Init, GPS_Read, and GPS coordinate retrieval; update includes and platform dependencies

This commit is contained in:
PinkyFlowy
2025-04-21 18:47:30 +02:00
parent 42ad7f7ac9
commit 9da30e9e79
7 changed files with 105 additions and 48 deletions

View File

@@ -9,7 +9,8 @@
"utility": "cpp", "utility": "cpp",
"bmp280.h": "c", "bmp280.h": "c",
"random": "cpp", "random": "cpp",
"sstream": "cpp" "sstream": "cpp",
"cmath": "cpp"
}, },
"github.copilot.enable": { "github.copilot.enable": {
"*": false, "*": false,

View File

@@ -1,8 +1,9 @@
#define RX 4 #define RX 4
#define TX 5 #define TX 5
#include "SoftwareSerial.h" #include "TinyGPSPlus.h"
void GPS_Init(); void GPS_Init();
void GPS_Read(); void GPS_Read();
String GPS_Data(); float GPS_longitud();
float GPS_latitud();

View File

@@ -6,6 +6,7 @@
#include "MqttClient.hpp" #include "MqttClient.hpp"
#include "MQ7.hpp" #include "MQ7.hpp"
#include "BMP280.hpp" #include "BMP280.hpp"
#include "GPS.hpp"
//#include "test.hpp" //#include "test.hpp"

View File

@@ -1,51 +1,100 @@
#include "GPS.hpp" #include "GPS.hpp"
char c;
SoftwareSerial gps(RX, TX);
void GPS_Init(){ // A sample NMEA stream.
// RX, TX const char *gpsStream =
"$GPRMC,045103.000,A,3014.1984,N,09749.2872,W,0.67,161.46,030913,,,A*7C\r\n"
"$GPGGA,045104.000,3014.1985,N,09749.2873,W,1,09,1.2,211.6,M,-22.5,M,,0000*62\r\n"
"$GPRMC,045200.000,A,3014.3820,N,09748.9514,W,36.88,65.02,030913,,,A*77\r\n"
"$GPGGA,045201.000,3014.3864,N,09748.9411,W,1,10,1.2,200.8,M,-22.5,M,,0000*6C\r\n"
"$GPRMC,045251.000,A,3014.4275,N,09749.0626,W,0.51,217.94,030913,,,A*7D\r\n"
"$GPGGA,045252.000,3014.4273,N,09749.0628,W,1,09,1.3,206.9,M,-22.5,M,,0000*6F\r\n";
Serial.begin(115500); // The TinyGPSPlus object
gps.begin(9600); TinyGPSPlus gps;
Serial.println("GPS Initialized");
void GPS_Init()
{
Serial.begin(115200);
Serial.println(F("BasicExample.ino"));
Serial.println(F("Basic demonstration of TinyGPSPlus (no device needed)"));
Serial.print(F("Testing TinyGPSPlus library v. ")); Serial.println(TinyGPSPlus::libraryVersion());
Serial.println(F("by Mikal Hart"));
Serial.println();
while (*gpsStream)
if (gps.encode(*gpsStream++))
GPS_Read();
Serial.println();
Serial.println(F("Done."));
} }
void GPS_Read(){ void GPS_Read()
{
if (gps.available()) { Serial.print(F("Location: "));
c = gps.read(); if (gps.location.isValid())
{
} Serial.print(gps.location.lat(), 6);
Serial.print(F(","));
Serial.print(gps.location.lng(), 6);
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" Date/Time: "));
if (gps.date.isValid())
{
Serial.print(gps.date.month());
Serial.print(F("/"));
Serial.print(gps.date.day());
Serial.print(F("/"));
Serial.print(gps.date.year());
}
else
{
Serial.print(F("INVALID"));
}
Serial.print(F(" "));
if (gps.time.isValid())
{
if (gps.time.hour() < 10) Serial.print(F("0"));
Serial.print(gps.time.hour());
Serial.print(F(":"));
if (gps.time.minute() < 10) Serial.print(F("0"));
Serial.print(gps.time.minute());
Serial.print(F(":"));
if (gps.time.second() < 10) Serial.print(F("0"));
Serial.print(gps.time.second());
Serial.print(F("."));
if (gps.time.centisecond() < 10) Serial.print(F("0"));
Serial.print(gps.time.centisecond());
}
else
{
Serial.print(F("INVALID"));
}
Serial.println();
} }
//$GPRMC,044235.000,A,4322.0289,N,00824.5210,W,0.39,65.46,020615,,,A*44
void GPS_Data(const char* data) { float GPS_longitud(){
char buffer[100]; float log;
strncpy(buffer, data, sizeof(buffer)); // Copia segura de la cadena if (gps.location.isValid())
buffer[sizeof(buffer) - 1] = '\0'; // Asegura que la cadena termine en '\0' {
log = gps.location.lng();
char* token = strtok(buffer, ","); // Divide la cadena por comas
int index = 0;
String check;
float lon = 0.0, lat = 0.0;
while (token != nullptr) {
if (index == 2) {
check = String(token); // Elemento en la posición 2
} else if (index == 3) {
lon = atof(token); // Elemento en la posición 3 convertido a float
} else if (index == 5) {
lat = atof(token); // Elemento en la posición 5 convertido a float
}
token = strtok(nullptr, ","); // Avanza al siguiente token
index++;
} }
return log;
}
// Imprime los resultados float GPS_latitud(){
Serial.print("Check: "); float lat;
Serial.println(check); if (gps.location.isValid())
Serial.print("Longitude: "); {
Serial.println(lon, 6); // 6 decimales para precisión lat = gps.location.lat();
Serial.print("Latitude: "); }
Serial.println(lat, 6); return lat;
} }

View File

@@ -10,7 +10,7 @@ void MQ7_Read(float &sensorVolt, float &RSAir, float &R0, float &sensorValue)
{ {
analogWrite(ANALOG_MQ7, 1023); analogWrite(ANALOG_MQ7, 1023);
delay(60000); delay(60000);
analogWrite(ANALOG_MQ7, (1023/5)*1.4 ); analogWrite(ANALOG_MQ7, (1023/5)*1.4);
for(int i = 0; i<100; i++) for(int i = 0; i<100; i++)
{ {

View File

@@ -14,7 +14,6 @@ board = esp32dev
framework = arduino framework = arduino
lib_deps = lib_deps =
knolleary/PubSubClient@^2.8 knolleary/PubSubClient@^2.8
mikalhart/TinyGPSPlus@^1.0.2
bblanchon/ArduinoJson@^6.17.3 bblanchon/ArduinoJson@^6.17.3
martinl1/BMP280_DEV@^1.0.21 martinl1/BMP280_DEV@^1.0.21
plerup/EspSoftwareSerial@^8.2.0 mikalhart/TinyGPSPlus@^1.1.0

View File

@@ -41,8 +41,14 @@ void setup() {
// test get // test get
getRequest(httpClient, "http://172.20.10.7:8082/api/v1/sensors/1/values", response); getRequest(httpClient, "http://172.20.10.7:8082/api/v1/sensors/1/values", response);
deserializeSensorValue(httpClient, httpClient.GET()); deserializeSensorValue(httpClient, httpClient.GET());
// test gps
GPS_Init();
} }
void loop() { void loop() {
GPS_Read();
lon = GPS_longitud();
lat = GPS_latitud();
} }