nmea_parser_example_main.c 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. /* NMEA Parser example, that decode data stream from GPS receiver
  2. This example code is in the Public Domain (or CC0 licensed, at your option.)
  3. Unless required by applicable law or agreed to in writing, this
  4. software is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
  5. CONDITIONS OF ANY KIND, either express or implied.
  6. */
  7. #include <stdio.h>
  8. #include <stdlib.h>
  9. #include "freertos/FreeRTOS.h"
  10. #include "freertos/task.h"
  11. #include "esp_log.h"
  12. #include "nmea_parser.h"
  13. static const char *TAG = "gps_demo";
  14. #define TIME_ZONE (+8) //Beijing Time
  15. #define YEAR_BASE (2000) //date in GPS starts from 2000
  16. /**
  17. * @brief GPS Event Handler
  18. *
  19. * @param event_handler_arg handler specific arguments
  20. * @param event_base event base, here is fixed to ESP_NMEA_EVENT
  21. * @param event_id event id
  22. * @param event_data event specific arguments
  23. */
  24. static void gps_event_handler(void *event_handler_arg, esp_event_base_t event_base, int32_t event_id, void *event_data)
  25. {
  26. gps_t *gps = NULL;
  27. switch (event_id) {
  28. case GPS_UPDATE:
  29. gps = (gps_t *)event_data;
  30. /* print information parsed from GPS statements */
  31. ESP_LOGI(TAG, "%d/%d/%d %d:%d:%d => \r\n"
  32. "\t\t\t\t\t\tlatitude = %.05f°N\r\n"
  33. "\t\t\t\t\t\tlongitude = %.05f°E\r\n"
  34. "\t\t\t\t\t\taltitude = %.02fm\r\n"
  35. "\t\t\t\t\t\tspeed = %fm/s",
  36. gps->date.year + YEAR_BASE, gps->date.month, gps->date.day,
  37. gps->tim.hour + TIME_ZONE, gps->tim.minute, gps->tim.second,
  38. gps->latitude, gps->longitude, gps->altitude, gps->speed);
  39. break;
  40. case GPS_UNKNOWN:
  41. /* print unknown statements */
  42. ESP_LOGW(TAG, "Unknown statement:%s", (char *)event_data);
  43. break;
  44. default:
  45. break;
  46. }
  47. }
  48. void app_main(void)
  49. {
  50. /* NMEA parser configuration */
  51. nmea_parser_config_t config = NMEA_PARSER_CONFIG_DEFAULT();
  52. /* init NMEA parser library */
  53. nmea_parser_handle_t nmea_hdl = nmea_parser_init(&config);
  54. /* register event handler for NMEA parser library */
  55. nmea_parser_add_handler(nmea_hdl, gps_event_handler, NULL);
  56. vTaskDelay(10000 / portTICK_PERIOD_MS);
  57. /* unregister event handler */
  58. nmea_parser_remove_handler(nmea_hdl, gps_event_handler);
  59. /* deinit NMEA parser library */
  60. nmea_parser_deinit(nmea_hdl);
  61. }