陈拓 2022/05/12-2022/05/13

1. 简介

在《ESP32 ESP-IDF串口的使用-读GPS北斗模块数据》

https://zhuanlan.zhihu.com/p/512932648

https://blog.csdn.net/chentuo2000/article/details/124719338

一文中我们已经用ESP32读到了GPS北斗模块HT1818Z3G5L的数据。

文本我们解析ESP32读到的数据,只取经纬度和日期时间。

2. 开发环境

《用乐鑫国内Gitee镜像搭建ESP32开发环境》

https://zhuanlan.zhihu.com/p/348106034

https://blog.csdn.net/chentuo2000/article/details/113424934?spm=1001.2014.3001.5501

3. 写程序

修改C程序uart_async_rxtxtasks_main.c:

#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_system.h"
#include "esp_log.h"
#include "driver/uart.h"
#include "string.h"
#include "driver/gpio.h"static const char *TAG = "ESP32_GPS";
static const int RX_BUF_SIZE = 1024;
char *data = NULL;
char *dest = NULL;typedef struct {char lat[16];char lon[16];char utc[16];char day[8];char month[8];char year[8];
} gps_data_t;char *test_data ="\
$GNGGA,132506.000,2233.87430,N,11407.13740,E,1,13,1.0,103.3,M,-2.8,M,,*5E\n\
$GNGLL,2233.87430,N,11407.13740,E,132506.000,A,A*4E\n\
$GNGSA,A,3,02,05,15,23,24,29,195,,,,,,1.6,1.0,1.3,1*07\n\
$GNGSA,A,3,07,10,16,21,34,42,,,,,,,1.6,1.0,1.3,4*33\n\
$GPGSV,3,1,09,02,34,134,15,05,40,044,14,15,71,308,25,18,32,326,26,0*68\n\
$GPGSV,3,2,09,20,25,074,,23,13,293,37,24,32,174,31,29,45,251,37,0*6B\n\
$GPGSV,3,3,09,195,50,158,31,0*6A\n\
$BDGSV,3,1,11,03,,,28,07,13,193,27,10,14,207,32,12,,,35,0*71\n\
$BDGSV,3,2,11,16,66,191,29,21,47,308,41,22,41,027,,34,33,309,25,0*74\n\
$BDGSV,3,3,11,40,,,33,42,12,265,36,44,,,28,0*4B\n\
$GNRMC,132506.000,A,2233.87430,N,11407.13740,E,0.00,244.71,080522,,,A,V*0A\n\
$GNVTG,244.71,T,,M,0.00,N,0.00,K,A*27\n\
$GNZDA,132506.000,08,05,2022,00,00*44\n\
$GPTXT,01,01,01,ANTENNA OPEN*25\n\
";#define TXD_PIN (GPIO_NUM_13)
#define RXD_PIN (GPIO_NUM_16)static char *cut_substr(char *dest, char *src, char start, int n)
{char *p = dest;char *q = src;q += start;while(n--) *(p++ )= *(q++);*(p++) = '\0';return dest;
}void init_uart2(void) {const uart_config_t uart_config = {.baud_rate = 9600,.data_bits = UART_DATA_8_BITS,.parity = UART_PARITY_DISABLE,.stop_bits = UART_STOP_BITS_1,.flow_ctrl = UART_HW_FLOWCTRL_DISABLE,.source_clk = UART_SCLK_APB,};// We won't use a buffer for sending data.uart_driver_install(UART_NUM_2, RX_BUF_SIZE * 2, 0, 0, NULL, 0);uart_param_config(UART_NUM_2, &uart_config);uart_set_pin(UART_NUM_2, TXD_PIN, RXD_PIN, UART_PIN_NO_CHANGE, UART_PIN_NO_CHANGE);
}static void rx2_task(void *arg)
{char *row;char *pos1;char *pos2;static const char *RX_TASK_TAG = "RX2_TASK";esp_log_level_set(RX_TASK_TAG, ESP_LOG_INFO);gps_data_t gps_data;while (1) {bzero(&gps_data, sizeof(gps_data));        const int rxBytes = uart_read_bytes(UART_NUM_2, data, RX_BUF_SIZE, 1000 / portTICK_PERIOD_MS);if (rxBytes > 0) {data[rxBytes] = 0;ESP_LOGI(RX_TASK_TAG, "Read %d bytes: '%s'", rxBytes, data);//ESP_LOG_BUFFER_HEXDUMP(RX_TASK_TAG, data, rxBytes, ESP_LOG_INFO);// 取经纬度//row = strstr(test_data, "$GNGGA"); // 测试row = strstr(data, "$GNGGA");//printf("row=%s\n", row); // GGApos1 = strchr(row, ','); // UTC时间...pos2 = strchr(pos1+1, ','); // 纬度...pos1 = strchr(pos2+1, ','); // 纬度方向...cut_substr(gps_data.lat, pos2, 1, pos1-pos2); // 纬度pos2 = strchr(pos1+1, ','); // 经度...pos1 = strchr(pos2+1, ','); // 经度方向...cut_substr(gps_data.lon, pos2, 1, pos1-pos2); // 经度printf("lat=%s lon=%s\n", gps_data.lat, gps_data.lon);// 取时间日期//row = strstr(test_data, "$GNZDA"); // 测试row = strstr(data, "$GNZDA");//printf("row=%s\n", row); // ZDApos1 = strchr(row, ','); // UTC时间...pos2 = strchr(pos1+1, ','); // 日...         cut_substr(gps_data.utc, pos1, 1, pos2-pos1); // UTC时间//printf("utc=%s\n", gps_data.utc);pos1 = strchr(pos2+1, ','); // 月...cut_substr(gps_data.day, pos2, 1, pos1-pos2); // 日pos2 = strchr(pos1+1, ','); // 年...cut_substr(gps_data.month, pos1, 1, pos2-pos1); // 月pos1 = strchr(pos2+1, ','); // 本时区小时...cut_substr(gps_data.year, pos2, 1, pos1-pos2); // 年printf("utc=%s day=%s month=%s year=%s\n", gps_data.utc, gps_data.day, gps_data.month, gps_data.year);}}
}void app_main(void)
{ESP_LOGI(TAG, "[APP] Startup..");ESP_LOGI(TAG, "[APP] Free memory: %d bytes", esp_get_free_heap_size());ESP_LOGI(TAG, "[APP] IDF version: %s", esp_get_idf_version());printf("======================================================\n");data = (char *)malloc(RX_BUF_SIZE+1);dest = (char *)malloc(16);init_uart2();xTaskCreate(rx2_task, "uart_rx2_task", 1024*2, NULL, configMAX_PRIORITIES, NULL);
}

GPS北斗模块HT1818Z3G5L接收到卫星信号正常工作时,每发送1帧数据模块上的绿色LED会闪烁1次。

如果模块在室内不能正常工作时可以使用测试数据test_data调试程序。

4. 构建项目

  • 刷新esp-idf环境

get_idf

注意:每次打开终端进入sdk都要执行一次此命令

  • 设定目标芯片

idf.py set-target esp32

注意:在项目创建第一次使用,以后就不用运行这个命令了。

  • 清除以前的构建

idf.py fullclean

  • 配置项目

idf.py menuconfig

将闪存设置为4MB,保存,退出。

  • 编译

idf.py build

  • 烧写

上电后按一下RST键。

idf.py -p /dev/ttyS4 -b 115200 flash

  • 串口监视器

idf.py monitor -p /dev/ttyS4

ESP32 ESP-IDF 获取GPS北斗模块的经纬度和日期时间相关推荐

  1. ESP32 ESP-IDF SD(TF)卡保存GPS北斗模块数据

    陈拓 2022/05/13-2022/05/15 1. 简介 在<ESP32 ESP-IDF 获取GPS北斗模块的经纬度和日期时间> https://zhuanlan.zhihu.com/ ...

  2. ESP32 ESP-IDF串口的使用-读GPS北斗模块数据

    陈拓 2022/04/27-2022/05/10 1. 简介 在<Windows USB串口接收GPS北斗模块数据和数据说明> https://zhuanlan.zhihu.com/p/5 ...

  3. GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解

    GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解 GPS北斗卫星主时钟(NTP网络时间服务器)技术参数详解 主时钟(北斗二代卫星同步时钟,GPS北斗双模时钟服务器,GPS时间同步系统)是我司开 ...

  4. boost::local_time模块实现打印本地日期时间的测试程序

    boost::local_time模块实现打印本地日期时间的测试程序 实现功能 C++实现代码 实现功能 boost::local_time模块实现打印本地日期时间的测试程序 C++实现代码 #inc ...

  5. GPS北斗模块串口助手输出测试

    GPS北斗模块测试 材料:北斗模块.usb转ttl.杜邦线. 1.模块接线如下图所示(可用5v跟3.3v): 2.usb转ttl连接电脑通电指示灯亮: 3.电脑通过串口调试助手可以收到北斗模块发送的数 ...

  6. GPS/北斗模块小小总结

    这次用的是正点原子的ATK-S1216F8-BD模块. 通过看资料,准备从以下几点来研究研究这个模块. 1.它有哪些优点 2.模块引脚的作用 3.与单片机连接 1.优点:首先它的体积小,可通过串口进行 ...

  7. ATK-S1216F8-BD GPS/北斗模块调试

    手头上有这一模块. 1.模块通过串口与外部系统连接,串口波特率支持 4800.9600.19200.38400(默认).57600.115200.230400 等不同速率, 2.兼容 5V/3.3V ...

  8. Windows USB串口接收GPS北斗模块数据和数据说明

    陈拓 2022/05/07-2022/05/09 1. 简介 本文以GPS+北斗卫星定位授时导航模块HT1818Z3G5L为例,在Win10下读数据. 产品参数 引脚定义 2. 连接PC机和HT181 ...

  9. ATGM332D GPS 北斗模块 双模卫星定位187a导航器 替代NEO-M8N

    简介: ATGM332D-5N 系列模块是12X16 尺寸的高性能BDS/GNSS 全星座定位导航模块系列的总称.该系列模块产品都是基于中科微第四代低功耗 GNSS SOC单芯片-AT6558,支持美 ...

  10. android 基站经纬度,android手机获取gps和基站的经纬度地址实现代码

    代码如下: 代码如下: package com.talkweb.mobileapp; import java.text.DecimalFormat; import android.app.Activi ...

最新文章

  1. 中超赛程来100wan点in_不干了:中超球队改名“硬重启”,球迷组织绝望解散
  2. C# 编码规范和编程好习惯
  3. java查看sql视图_SQL Server查看视图定义总结
  4. VTK:图片之CenterAnImage
  5. java定义一个door的类_再探Java抽象类与接口的设计理念差异
  6. .Net Core2.1 秒杀项目一步步实现CI/CD(Centos7)系列二:k8s高可用集群搭建总结以及部署API到k8s...
  7. AS报Failed to resolve: junit:junit:4.12错误正确的解决方法
  8. python如何编辑pdf_python3.6 导入并编辑pdf 错误在哪里啊
  9. bzoj1191: [HNOI2006]超级英雄Hero
  10. SLAM会议笔记(四)Lego-LOAM
  11. C# WPF框架从http协议上获取返回的json数据及其解析json数据
  12. 用pdf转cad转换器进行操作的简单步骤
  13. HTML+CSS项目实践五:使用纯CSS实现点击文字切换图片效果(不使用JS)
  14. 《2021政府工作报告》词云图一览
  15. word中统一修改mathtype公式和大小对应
  16. vue 全局监听浏览器窗口关闭以及无痕模式场景提示
  17. cron的使用(二)
  18. Unity3D常用游戏开发插件测评总结
  19. 傅里叶变换动图赏析及解析
  20. 批量更改图片大小程序

热门文章

  1. ASP.NET 中处理客户端数字证书
  2. 4g通信模块怎么连接sim卡_SIM卡GPRS模块知识详解 浅谈SIM卡GPRS之原理模块
  3. DFT(design for test)
  4. coreldraw铺花纹_Coreldraw绘图实例教程,教你cdr环形花边绘制方法
  5. python找不到csv文件路径_无法识别csv的构造文件路径。但文件是
  6. 文件系统:NTFS、FAT32和exFAT
  7. Android下载文件常见错误解决方法
  8. element-ui 固定弹窗底部的按钮
  9. linux系统鼠标主题下载,Ubuntu Linux鼠标主题:bCircle
  10. TOEFL资料 280多个