Add GPS functionality: implement GPS_Init, GPS_Read, and GPS coordinate retrieval; update includes and platform dependencies
This commit is contained in:
3
hardware/.vscode/settings.json
vendored
3
hardware/.vscode/settings.json
vendored
@@ -9,7 +9,8 @@
|
||||
"utility": "cpp",
|
||||
"bmp280.h": "c",
|
||||
"random": "cpp",
|
||||
"sstream": "cpp"
|
||||
"sstream": "cpp",
|
||||
"cmath": "cpp"
|
||||
},
|
||||
"github.copilot.enable": {
|
||||
"*": false,
|
||||
|
||||
@@ -1,8 +1,9 @@
|
||||
#define RX 4
|
||||
#define TX 5
|
||||
|
||||
#include "SoftwareSerial.h"
|
||||
#include "TinyGPSPlus.h"
|
||||
|
||||
void GPS_Init();
|
||||
void GPS_Read();
|
||||
String GPS_Data();
|
||||
float GPS_longitud();
|
||||
float GPS_latitud();
|
||||
@@ -6,6 +6,7 @@
|
||||
#include "MqttClient.hpp"
|
||||
#include "MQ7.hpp"
|
||||
#include "BMP280.hpp"
|
||||
#include "GPS.hpp"
|
||||
//#include "test.hpp"
|
||||
|
||||
|
||||
|
||||
@@ -1,51 +1,100 @@
|
||||
#include "GPS.hpp"
|
||||
char c;
|
||||
SoftwareSerial gps(RX, TX);
|
||||
|
||||
void GPS_Init(){
|
||||
// RX, TX
|
||||
// A sample NMEA stream.
|
||||
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);
|
||||
gps.begin(9600);
|
||||
Serial.println("GPS Initialized");
|
||||
// The TinyGPSPlus object
|
||||
TinyGPSPlus gps;
|
||||
|
||||
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(){
|
||||
|
||||
if (gps.available()) {
|
||||
c = gps.read();
|
||||
|
||||
void GPS_Read()
|
||||
{
|
||||
Serial.print(F("Location: "));
|
||||
if (gps.location.isValid())
|
||||
{
|
||||
Serial.print(gps.location.lat(), 6);
|
||||
Serial.print(F(","));
|
||||
Serial.print(gps.location.lng(), 6);
|
||||
}
|
||||
}
|
||||
//$GPRMC,044235.000,A,4322.0289,N,00824.5210,W,0.39,65.46,020615,,,A*44
|
||||
|
||||
void GPS_Data(const char* data) {
|
||||
char buffer[100];
|
||||
strncpy(buffer, data, sizeof(buffer)); // Copia segura de la cadena
|
||||
buffer[sizeof(buffer) - 1] = '\0'; // Asegura que la cadena termine en '\0'
|
||||
|
||||
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++;
|
||||
else
|
||||
{
|
||||
Serial.print(F("INVALID"));
|
||||
}
|
||||
|
||||
// Imprime los resultados
|
||||
Serial.print("Check: ");
|
||||
Serial.println(check);
|
||||
Serial.print("Longitude: ");
|
||||
Serial.println(lon, 6); // 6 decimales para precisión
|
||||
Serial.print("Latitude: ");
|
||||
Serial.println(lat, 6);
|
||||
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();
|
||||
}
|
||||
|
||||
float GPS_longitud(){
|
||||
float log;
|
||||
if (gps.location.isValid())
|
||||
{
|
||||
log = gps.location.lng();
|
||||
}
|
||||
return log;
|
||||
}
|
||||
|
||||
float GPS_latitud(){
|
||||
float lat;
|
||||
if (gps.location.isValid())
|
||||
{
|
||||
lat = gps.location.lat();
|
||||
}
|
||||
return lat;
|
||||
}
|
||||
@@ -14,7 +14,6 @@ board = esp32dev
|
||||
framework = arduino
|
||||
lib_deps =
|
||||
knolleary/PubSubClient@^2.8
|
||||
mikalhart/TinyGPSPlus@^1.0.2
|
||||
bblanchon/ArduinoJson@^6.17.3
|
||||
martinl1/BMP280_DEV@^1.0.21
|
||||
plerup/EspSoftwareSerial@^8.2.0
|
||||
mikalhart/TinyGPSPlus@^1.1.0
|
||||
|
||||
@@ -41,8 +41,14 @@ void setup() {
|
||||
// test get
|
||||
getRequest(httpClient, "http://172.20.10.7:8082/api/v1/sensors/1/values", response);
|
||||
deserializeSensorValue(httpClient, httpClient.GET());
|
||||
|
||||
// test gps
|
||||
GPS_Init();
|
||||
|
||||
}
|
||||
|
||||
void loop() {
|
||||
|
||||
GPS_Read();
|
||||
lon = GPS_longitud();
|
||||
lat = GPS_latitud();
|
||||
}
|
||||
Reference in New Issue
Block a user