#include <WiFi.h>
const char* ssid ="Wokwi-GUEST";
const char* password ="";
//este bloque de codigo nos ayuda a conectar a internet
String cadena; // Aquí almacenaremos la cadena completa que recibamos.
String dato1; // Almacena el primer dato extraído de la cadena.
String dato2; // Almacena el segundo dato extraído de la cadena.
String dato3; // Almacena el tercer dato extraído de la cadena.
String dato4; // Almacena el cuarto dato extraído de la cadena.
String dato5; // Almacena el quinto dato extraído de la cadena.
String dato6; // Almacena el sexto dato extraído de la cadena.
void setup(){
Serial.begin(115200);
WiFi.begin(ssid, password);//begin significa comenzar, comenzar con la conxion
Serial.println("connecting");
while(WiFi.status() != WL_CONNECTED) {//while significa mientra esta conectado aparecera wl_connected
delay(500);
Serial.print(".");//si no esta conectado aparecera punto....
}
Serial.println(".");
Serial.print("sea conectado al wifi con la ip: ");
Serial.println(WiFi.localIP());
}
void loop() {
// Verifica si hay datos disponibles en el puerto serie.
//+CGNSINF: 1,1,20230827083541.000,-2.192826,-80.988875,0.52
if(Serial.available() > 0) {
char datoAux = Serial.read(); // Lee un carácter del puerto serie y lo guarda en 'datoAux'.
cadena += datoAux; // Añade el carácter leído a la cadena 'cadena'.
// Verifica si el carácter leído es un salto de línea ('\n').
if(datoAux == '\n') {
// Extrae los valores de la cadena separada por comas y los guarda en las variables correspondientes.
dato1 = getValue(cadena, '.', 0); // Extrae el primer valor antes de la primera coma.
dato2 = getValue(cadena, '.', 1); // Extrae el segundo valor después de la primera coma.
dato3 = getValue(cadena, '.', 2); // Y así sucesivamente...
dato4 = getValue(cadena, '.', 3);
dato5 = getValue(cadena, '.', 4);
dato6 = getValue(cadena, '.', 5);
// Imprime los datos extraídos con un texto descriptivo.
Serial.print("+CGNSINF:"); // Identificador de la información recibida.
Serial.println(dato1); // Muestra el primer dato.
Serial.print("ESTADO:"); // Muestra un encabezado para el segundo dato.
Serial.println(dato2); // Muestra el segundo dato.
Serial.print("FECHA:"); // Muestra un encabezado para el tercer dato.
Serial.println(dato3); // Muestra el tercer dato.
Serial.print("LATITUD:"); // Muestra un encabezado para el cuarto dato.
Serial.println(dato4); // Muestra el cuarto dato.
Serial.print("LONGITUD:"); // Muestra un encabezado para el quinto dato.
Serial.println(dato5); // Muestra el quinto dato.
Serial.print("VELOCIDAD:"); // Muestra un encabezado para el sexto dato.
Serial.println(dato6); // Muestra el sexto dato.
// Limpia la cadena para que pueda recibir nueva información en la próxima iteración.
cadena = "";
}
}
}
// Función para dividir una cadena de texto en partes según un separador y devolver la parte deseada.
String getValue(String data, char separator, int index) {
int found = 0; // Contador para saber cuántos separadores hemos encontrado.
int strIndex[] = { 0, -1 }; // Array para almacenar los índices de inicio y final de la subcadena.
int maxIndex = data.length() -1; // Longitud máxima de la cadena.
// Bucle para recorrer la cadena y encontrar el índice de la subcadena deseada.
for (int i = 0; i <= maxIndex && found <= index; i++) {
if (data.charAt(i) == separator || i == maxIndex) { // Verifica si el carácter actual es el separador o si hemos llegado al final de la cadena.
found++; // Aumenta el contador de separadores encontrados.
strIndex[0] = strIndex[1] + 1; // Actualiza el índice de inicio de la subcadena.
strIndex[1] = (i == maxIndex) ? i + 1 : i; // Actualiza el índice final de la subcadena.
}
}
// Devuelve la subcadena deseada o una cadena vacía si no se encontró.
return found > index ? data.substring(strIndex[0], strIndex[1]) : "";
}