mirror of
https://github.com/alexandrebobkov/ESP-Nodes.git
synced 2025-10-07 18:11:57 +00:00
GPS
This commit is contained in:
0
ESP-IDF_GPS/build/.ninja_lock
Normal file
0
ESP-IDF_GPS/build/.ninja_lock
Normal file
@@ -1 +1 @@
|
|||||||
ref: refs/heads/main
|
4c2820d377d1375e787bcef612f0c32c1427d183
|
||||||
|
@@ -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)
|
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)
|
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
|
# handle git-worktree
|
||||||
if(EXISTS "${GIT_DIR}/commondir")
|
if(EXISTS "${GIT_DIR}/commondir")
|
||||||
file(READ "${GIT_DIR}/commondir" GIT_DIR_NEW LIMIT 1024)
|
file(READ "${GIT_DIR}/commondir" GIT_DIR_NEW LIMIT 1024)
|
||||||
|
@@ -1 +1 @@
|
|||||||
98d60c7dd1d23e6a473b48dce17af996e9db8d3c
|
4c2820d377d1375e787bcef612f0c32c1427d183
|
||||||
|
@@ -68,123 +68,80 @@ void app_main(void)
|
|||||||
|
|
||||||
static void read_and_parse_nmea()
|
static void read_and_parse_nmea()
|
||||||
{
|
{
|
||||||
printf("Example ready\n");
|
// Sentence string to be parsed
|
||||||
while (1) {
|
//char sentence[] = "$GPGLL,4916.45,N,12311.12,W,225444,A,*1D\r\n";
|
||||||
char fmt_buf[32];
|
//char sentence[] = "$GPGSA,A,1,,,,,,,,,,,,,99.99,99.99,99.99*30\r\n";
|
||||||
nmea_s *data;
|
//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;
|
printf("Parsing NMEA sentence: %s", sentence);
|
||||||
size_t length;
|
|
||||||
nmea_example_read_line(&start, &length, 100 /* ms */);
|
|
||||||
if (length == 0) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* handle data */
|
// Pointer to struct containing the parsed data. Should be freed manually.
|
||||||
data = nmea_parse(start, length, 0);
|
nmea_s *data;
|
||||||
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NMEA_GPGGA == data->type) {
|
// Parse...
|
||||||
printf("GPGGA sentence\n");
|
data = nmea_parse(sentence, strlen(sentence), 0);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NMEA_GPGLL == data->type) {
|
if(NULL == data) {
|
||||||
printf("GPGLL sentence\n");
|
printf("Failed to parse sentence!\n");
|
||||||
nmea_gpgll_s *pos = (nmea_gpgll_s *) data;
|
return -1;
|
||||||
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 (NMEA_GPRMC == data->type) {
|
if (NMEA_GPGLL == data->type) {
|
||||||
printf("GPRMC sentence\n");
|
nmea_gpgll_s *gpgll = (nmea_gpgll_s *) data;
|
||||||
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");
|
|
||||||
}
|
|
||||||
|
|
||||||
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) {
|
if (NMEA_GPGSA == data->type) {
|
||||||
nmea_gpgsa_s *gpgsa = (nmea_gpgsa_s *) data;
|
nmea_gpgsa_s *gpgsa = (nmea_gpgsa_s *) data;
|
||||||
|
|
||||||
printf("GPGSA Sentence:\n");
|
printf("GPGSA Sentence:\n");
|
||||||
printf(" Mode: %c\n", gpgsa->mode);
|
printf("\tMode: %c\n", gpgsa->mode);
|
||||||
printf(" Fix: %d\n", gpgsa->fixtype);
|
printf("\tFix: %d\n", gpgsa->fixtype);
|
||||||
printf(" PDOP: %.2lf\n", gpgsa->pdop);
|
printf("\tPDOP: %.2lf\n", gpgsa->pdop);
|
||||||
printf(" HDOP: %.2lf\n", gpgsa->hdop);
|
printf("\tHDOP: %.2lf\n", gpgsa->hdop);
|
||||||
printf(" VDOP: %.2lf\n", gpgsa->vdop);
|
printf("\tVDOP: %.2lf\n", gpgsa->vdop);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NMEA_GPGSV == data->type) {
|
if (NMEA_GPVTG == data->type) {
|
||||||
nmea_gpgsv_s *gpgsv = (nmea_gpgsv_s *) data;
|
nmea_gpvtg_s *gpvtg = (nmea_gpvtg_s *) data;
|
||||||
|
|
||||||
printf("GPGSV Sentence:\n");
|
printf("GPVTG Sentence:\n");
|
||||||
printf(" Num: %d\n", gpgsv->sentences);
|
printf("\tTrack [deg]: %.2lf\n", gpvtg->track_deg);
|
||||||
printf(" ID: %d\n", gpgsv->sentence_number);
|
printf("\tSpeed [kmph]: %.2lf\n", gpvtg->gndspd_kmph);
|
||||||
printf(" SV: %d\n", gpgsv->satellites);
|
printf("\tSpeed [knots]: %.2lf\n", gpvtg->gndspd_knots);
|
||||||
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (NMEA_GPTXT == data->type) {
|
if (NMEA_GPTXT == data->type) {
|
||||||
nmea_gptxt_s *gptxt = (nmea_gptxt_s *) data;
|
nmea_gptxt_s *gptxt = (nmea_gptxt_s *) data;
|
||||||
|
|
||||||
printf("GPTXT Sentence:\n");
|
printf("GPTXT Sentence:\n");
|
||||||
printf(" ID: %d %d %d\n", gptxt->id_00, gptxt->id_01, gptxt->id_02);
|
printf("\tID: %d %d %d\n", gptxt->id_00, gptxt->id_01, gptxt->id_02);
|
||||||
printf(" %s\n", gptxt->text);
|
printf("\t%s\n", gptxt->text);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (NMEA_GPVTG == data->type) {
|
if (NMEA_GPGSV == data->type) {
|
||||||
nmea_gpvtg_s *gpvtg = (nmea_gpvtg_s *) data;
|
nmea_gpgsv_s *gpgsv = (nmea_gpgsv_s *) data;
|
||||||
|
|
||||||
printf("GPVTG Sentence:\n");
|
printf("GPGSV Sentence:\n");
|
||||||
printf(" Track [deg]: %.2lf\n", gpvtg->track_deg);
|
printf("\tNum: %d\n", gpgsv->sentences);
|
||||||
printf(" Speed [kmph]: %.2lf\n", gpvtg->gndspd_kmph);
|
printf("\tID: %d\n", gpgsv->sentence_number);
|
||||||
printf(" Speed [knots]: %.2lf\n", gpvtg->gndspd_knots);
|
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);
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user