From be574ec6f2d22171674018655c09cf199ddc36a0 Mon Sep 17 00:00:00 2001 From: Alexander B Date: Tue, 12 Aug 2025 14:21:23 -0400 Subject: [PATCH] GPS --- ESP-IDF_GPS/build/.ninja_lock | 0 ESP-IDF_GPS/build/CMakeFiles/git-data/HEAD | 2 +- .../build/CMakeFiles/git-data/grabRef.cmake | 2 +- .../build/CMakeFiles/git-data/head-ref | 2 +- ESP-IDF_GPS/main/gps_main.c | 165 +++++++----------- 5 files changed, 64 insertions(+), 107 deletions(-) create mode 100644 ESP-IDF_GPS/build/.ninja_lock diff --git a/ESP-IDF_GPS/build/.ninja_lock b/ESP-IDF_GPS/build/.ninja_lock new file mode 100644 index 000000000..e69de29bb diff --git a/ESP-IDF_GPS/build/CMakeFiles/git-data/HEAD b/ESP-IDF_GPS/build/CMakeFiles/git-data/HEAD index b870d8262..b3440b61b 100644 --- a/ESP-IDF_GPS/build/CMakeFiles/git-data/HEAD +++ b/ESP-IDF_GPS/build/CMakeFiles/git-data/HEAD @@ -1 +1 @@ -ref: refs/heads/main +4c2820d377d1375e787bcef612f0c32c1427d183 diff --git a/ESP-IDF_GPS/build/CMakeFiles/git-data/grabRef.cmake b/ESP-IDF_GPS/build/CMakeFiles/git-data/grabRef.cmake index 3834e63ee..72483422d 100644 --- a/ESP-IDF_GPS/build/CMakeFiles/git-data/grabRef.cmake +++ b/ESP-IDF_GPS/build/CMakeFiles/git-data/grabRef.cmake @@ -18,7 +18,7 @@ set(HEAD_HASH) file(READ "/home/alex/github/ESP-Nodes/ESP-IDF_GPS/build/CMakeFiles/git-data/HEAD" HEAD_CONTENTS LIMIT 1024) string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS) -set(GIT_DIR "/home/alex/github/ESP-Nodes/.git") +set(GIT_DIR "/home/alex/esp/v5.4.1/esp-idf/.git") # handle git-worktree if(EXISTS "${GIT_DIR}/commondir") file(READ "${GIT_DIR}/commondir" GIT_DIR_NEW LIMIT 1024) diff --git a/ESP-IDF_GPS/build/CMakeFiles/git-data/head-ref b/ESP-IDF_GPS/build/CMakeFiles/git-data/head-ref index d38594db9..b3440b61b 100644 --- a/ESP-IDF_GPS/build/CMakeFiles/git-data/head-ref +++ b/ESP-IDF_GPS/build/CMakeFiles/git-data/head-ref @@ -1 +1 @@ -98d60c7dd1d23e6a473b48dce17af996e9db8d3c +4c2820d377d1375e787bcef612f0c32c1427d183 diff --git a/ESP-IDF_GPS/main/gps_main.c b/ESP-IDF_GPS/main/gps_main.c index 9343d474d..541840477 100644 --- a/ESP-IDF_GPS/main/gps_main.c +++ b/ESP-IDF_GPS/main/gps_main.c @@ -68,123 +68,80 @@ void app_main(void) static void read_and_parse_nmea() { - printf("Example ready\n"); - while (1) { - char fmt_buf[32]; - nmea_s *data; + // Sentence string to be parsed + //char sentence[] = "$GPGLL,4916.45,N,12311.12,W,225444,A,*1D\r\n"; + //char sentence[] = "$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30\r\n"; + //char sentence[] = "$GPTXT,01,03,02,u-blox ag - www.u-blox.com*50\r\n"; + //char sentence[] = "$GPVTG,054.7,T,034.4,M,005.5,N,010.2,K\r\n"; + char sentence[] = "$GPGSV,3,1,11,03,03,111,00,04,15,270,00,06,01,010,00,13,06,292,00*74\r\n"; - char *start; - size_t length; - nmea_example_read_line(&start, &length, 100 /* ms */); - if (length == 0) { - continue; - } + printf("Parsing NMEA sentence: %s", sentence); - /* handle data */ - data = nmea_parse(start, length, 0); - if (data == NULL) { - printf("Failed to parse the sentence!\n"); - printf(" Type: %.5s (%d)\n", start + 1, nmea_get_type(start)); - } else { - if (data->errors != 0) { - printf("WARN: The sentence struct contains parse errors!\n"); - } + // Pointer to struct containing the parsed data. Should be freed manually. + nmea_s *data; - if (NMEA_GPGGA == data->type) { - printf("GPGGA sentence\n"); - nmea_gpgga_s *gpgga = (nmea_gpgga_s *) data; - printf("Number of satellites: %d\n", gpgga->n_satellites); - printf("Altitude: %f %c\n", gpgga->altitude, - gpgga->altitude_unit); - } + // Parse... + data = nmea_parse(sentence, strlen(sentence), 0); - if (NMEA_GPGLL == data->type) { - printf("GPGLL sentence\n"); - nmea_gpgll_s *pos = (nmea_gpgll_s *) data; - printf("Longitude:\n"); - printf(" Degrees: %d\n", pos->longitude.degrees); - printf(" Minutes: %f\n", pos->longitude.minutes); - printf(" Cardinal: %c\n", (char) pos->longitude.cardinal); - printf("Latitude:\n"); - printf(" Degrees: %d\n", pos->latitude.degrees); - printf(" Minutes: %f\n", pos->latitude.minutes); - printf(" Cardinal: %c\n", (char) pos->latitude.cardinal); - strftime(fmt_buf, sizeof(fmt_buf), "%H:%M:%S", &pos->time); - printf("Time: %s\n", fmt_buf); - } + if(NULL == data) { + printf("Failed to parse sentence!\n"); + return -1; + } - if (NMEA_GPRMC == data->type) { - printf("GPRMC sentence\n"); - nmea_gprmc_s *pos = (nmea_gprmc_s *) data; - printf("Longitude:\n"); - printf(" Degrees: %d\n", pos->longitude.degrees); - printf(" Minutes: %f\n", pos->longitude.minutes); - printf(" Cardinal: %c\n", (char) pos->longitude.cardinal); - printf("Latitude:\n"); - printf(" Degrees: %d\n", pos->latitude.degrees); - printf(" Minutes: %f\n", pos->latitude.minutes); - printf(" Cardinal: %c\n", (char) pos->latitude.cardinal); - strftime(fmt_buf, sizeof(fmt_buf), "%d %b %T %Y", &pos->date_time); - printf("Date & Time: %s\n", fmt_buf); - printf("Speed, in Knots: %f\n", pos->gndspd_knots); - printf("Track, in degrees: %f\n", pos->track_deg); - printf("Magnetic Variation:\n"); - printf(" Degrees: %f\n", pos->magvar_deg); - printf(" Cardinal: %c\n", (char) pos->magvar_cardinal); - double adjusted_course = pos->track_deg; - if (NMEA_CARDINAL_DIR_EAST == pos->magvar_cardinal) { - adjusted_course -= pos->magvar_deg; - } else if (NMEA_CARDINAL_DIR_WEST == pos->magvar_cardinal) { - adjusted_course += pos->magvar_deg; - } else { - printf("Invalid Magnetic Variation Direction!\n"); - } + if (NMEA_GPGLL == data->type) { + nmea_gpgll_s *gpgll = (nmea_gpgll_s *) data; - printf("Adjusted Track (heading): %f\n", adjusted_course); - } + printf("GPGLL Sentence\n"); + printf("Longitude:\n"); + printf(" Degrees: %d\n", gpgll->longitude.degrees); + printf(" Minutes: %f\n", gpgll->longitude.minutes); + printf(" Cardinal: %c\n", (char) gpgll->longitude.cardinal); + printf("Latitude:\n"); + printf(" Degrees: %d\n", gpgll->latitude.degrees); + printf(" Minutes: %f\n", gpgll->latitude.minutes); + printf(" Cardinal: %c\n", (char) gpgll->latitude.cardinal); + } - if (NMEA_GPGSA == data->type) { - nmea_gpgsa_s *gpgsa = (nmea_gpgsa_s *) data; + if (NMEA_GPGSA == data->type) { + nmea_gpgsa_s *gpgsa = (nmea_gpgsa_s *) data; - printf("GPGSA Sentence:\n"); - printf(" Mode: %c\n", gpgsa->mode); - printf(" Fix: %d\n", gpgsa->fixtype); - printf(" PDOP: %.2lf\n", gpgsa->pdop); - printf(" HDOP: %.2lf\n", gpgsa->hdop); - printf(" VDOP: %.2lf\n", gpgsa->vdop); - } + printf("GPGSA Sentence:\n"); + printf("\tMode: %c\n", gpgsa->mode); + printf("\tFix: %d\n", gpgsa->fixtype); + printf("\tPDOP: %.2lf\n", gpgsa->pdop); + printf("\tHDOP: %.2lf\n", gpgsa->hdop); + printf("\tVDOP: %.2lf\n", gpgsa->vdop); + } - if (NMEA_GPGSV == data->type) { - nmea_gpgsv_s *gpgsv = (nmea_gpgsv_s *) data; + if (NMEA_GPVTG == data->type) { + nmea_gpvtg_s *gpvtg = (nmea_gpvtg_s *) data; - printf("GPGSV Sentence:\n"); - printf(" Num: %d\n", gpgsv->sentences); - printf(" ID: %d\n", gpgsv->sentence_number); - printf(" SV: %d\n", gpgsv->satellites); - printf(" #1: %d %d %d %d\n", gpgsv->sat[0].prn, gpgsv->sat[0].elevation, gpgsv->sat[0].azimuth, gpgsv->sat[0].snr); - printf(" #2: %d %d %d %d\n", gpgsv->sat[1].prn, gpgsv->sat[1].elevation, gpgsv->sat[1].azimuth, gpgsv->sat[1].snr); - printf(" #3: %d %d %d %d\n", gpgsv->sat[2].prn, gpgsv->sat[2].elevation, gpgsv->sat[2].azimuth, gpgsv->sat[2].snr); - printf(" #4: %d %d %d %d\n", gpgsv->sat[3].prn, gpgsv->sat[3].elevation, gpgsv->sat[3].azimuth, gpgsv->sat[3].snr); - } + printf("GPVTG Sentence:\n"); + printf("\tTrack [deg]: %.2lf\n", gpvtg->track_deg); + printf("\tSpeed [kmph]: %.2lf\n", gpvtg->gndspd_kmph); + printf("\tSpeed [knots]: %.2lf\n", gpvtg->gndspd_knots); + } - if (NMEA_GPTXT == data->type) { - nmea_gptxt_s *gptxt = (nmea_gptxt_s *) data; + if (NMEA_GPTXT == data->type) { + nmea_gptxt_s *gptxt = (nmea_gptxt_s *) data; - printf("GPTXT Sentence:\n"); - printf(" ID: %d %d %d\n", gptxt->id_00, gptxt->id_01, gptxt->id_02); - printf(" %s\n", gptxt->text); - } + printf("GPTXT Sentence:\n"); + printf("\tID: %d %d %d\n", gptxt->id_00, gptxt->id_01, gptxt->id_02); + printf("\t%s\n", gptxt->text); + } - if (NMEA_GPVTG == data->type) { - nmea_gpvtg_s *gpvtg = (nmea_gpvtg_s *) data; + if (NMEA_GPGSV == data->type) { + nmea_gpgsv_s *gpgsv = (nmea_gpgsv_s *) data; - printf("GPVTG Sentence:\n"); - printf(" Track [deg]: %.2lf\n", gpvtg->track_deg); - printf(" Speed [kmph]: %.2lf\n", gpvtg->gndspd_kmph); - printf(" Speed [knots]: %.2lf\n", gpvtg->gndspd_knots); - } + printf("GPGSV Sentence:\n"); + printf("\tNum: %d\n", gpgsv->sentences); + printf("\tID: %d\n", gpgsv->sentence_number); + printf("\tSV: %d\n", gpgsv->satellites); + printf("\t#1: %d %d %d %d\n", gpgsv->sat[0].prn, gpgsv->sat[0].elevation, gpgsv->sat[0].azimuth, gpgsv->sat[0].snr); + printf("\t#2: %d %d %d %d\n", gpgsv->sat[1].prn, gpgsv->sat[1].elevation, gpgsv->sat[1].azimuth, gpgsv->sat[1].snr); + printf("\t#3: %d %d %d %d\n", gpgsv->sat[2].prn, gpgsv->sat[2].elevation, gpgsv->sat[2].azimuth, gpgsv->sat[2].snr); + printf("\t#4: %d %d %d %d\n", gpgsv->sat[3].prn, gpgsv->sat[3].elevation, gpgsv->sat[3].azimuth, gpgsv->sat[3].snr); + } - nmea_free(data); - } - } + nmea_free(data); }