聚丰项目 > 基于AB32VG1的GPS位置记录器

基于AB32VG1的GPS位置记录器

基于AB32VG1丰富的板载资源,并结合GPS模块及显示等其他模块,在方便记录轨迹的同时,提供校为便利的用户交互体验(如声音提示和用户按键交互,及屏幕显示)。项目可用于运动轨迹记录,及实时显示速度等展示,及其他应用领域,解决部分场景下位置记录实时查看不便或需要借助其他功耗相对较高的记录设备的问题,同时增加生活的趣味性。

yu1988123 yu1988123

分享
0 喜欢这个项目
团队介绍

yu1988123 yu1988123

团队成员

Algo 嵌入式软件工程师

分享
项目简介
基于AB32VG1丰富的板载资源,并结合GPS模块及显示等其他模块,在方便记录轨迹的同时,提供校为便利的用户交互体验(如声音提示和用户按键交互,及屏幕显示)。项目可用于运动轨迹记录,及实时显示速度等展示,及其他应用领域,解决部分场景下位置记录实时查看不便或需要借助其他功耗相对较高的记录设备的问题,同时增加生活的趣味性。
硬件说明

一. 整体硬件由4部分组成:

AB32VG1开发板、SSD1306 OLED显示屏、GPS模块(支持北斗和GSP双模定位)和SD卡

 

注:其中开发板还用到了GREEN和RED灯,和S2及S3按键

硬件示意图:

AB32VG1_HW_01.jpg


硬件整体外观如下图所示:



二、硬件模块的连接

1、SSD1306 OLED显示屏(II2C)引脚连接:

PE3 - OLED SCL、PE2 - OLED SDA、电源引脚


AB32VG1_II2C.jpg


2、GPS模块引脚连接(串口):

PA4 - GPS RX、PA3 - GPS TX、电源引脚

AB32VG1_UART.jpg


3、OLED和GPS模块电源引脚连接:

模块供电,均采用开发板提供的3.3V电源引脚

AB32VG1_POWER.jpg


软件说明

项目的软件采用RT-Thread官方提供的IDE RT-ThreadStudio开发,SDK基于AB32VG1-AB-PROUGEN,同时部分模块采用官方软件包,如ssd1306软件包,也移植了部分软件,如TinyGPS++和GPX(该部分开源软件主要由C++编写,移植采用C实现,并修改部分BUG),GPS记录后的轨迹符合GPX规范,可以用GPXSee(http://www.gpxsee.org) 软件查看。


软件开源地址:AB32VG1_GPS_TRACK: 基于AB32VG1的GPS位置记录器 (gitee.com)


软件框架:

无标题.png


1、软件配置

1.1  RT-Thread Setting

软件主要开启了与硬件相关的I2C和串口,同时开启了RTC相关功能

RT-Thread_Settings.jpg


2、 软件介绍

软件采用模块化设计,主要分为以下几个核心模块:


2.1、gps.c (gps.h) - GPS数据管理

核心数据结构和API如下:

/* Clock */
typedef struct{    
    uint16_t year;    
    uint8_t month;    
    uint8_t day;    
    uint8_t week;    
    uint8_t hour;    
    uint8_t minute;    
    uint8_t second;    
    uint16_t millisecond;
} Clock_Info_t;

/* GPS */
typedef struct{    
    bool isVaild;    
    float longitude;    
    float latitude;    
    float altitude;    
    float course;    
    float speed;    
    int16_t satellites;    
    Clock_Info_t clock;
} GPS_Info_t;

/* GPS 数据回调 */
typedef rt_int32_t (*gps_callback_t)(GPS_Info_t info);

int gps_init(gps_callback_t callback);
bool gps_get_info(GPS_Info_t* info);
float gps_get_distance(GPS_Info_t* info, float preLong, float preLat);


2.2、gpx.c (gpx.h) - GPX数据格式封装

主要API如下:

char *gpx_getOpen();
char *gpx_getClose();
void gpx_getMetaData(char* data);
char *gpx_getTrakOpen();
char *gpx_getTrakClose();
char *gpx_getTrakSegOpen();
char *gpx_getTrakSegClose();
void gpx_getInfo(char *info);
void gpx_getPt(char *typ, char *lon, char *lat, char *pt);
void gpx_setMetaName(char *name);
void gpx_setMetaDesc(char *desc);
void gpx_setName(char *name);
void gpx_setDesc(char *desc);
void gpx_setEle(char *ele);
void gpx_setSym(char *sym);
void gpx_setSrc(char *src);
void gpx_setTime(char *time);


2.3、key.c (key.h) - 按键消息处理

按键消息,支持短按、长按等,可以方便移植到其他平台,核心结构体定义如下:

/** key information */
typedef struct _key_info{    
    key_code_t code;    
    key_state_t state;    
    rt_bool_t short_press_done;    
    rt_bool_t short_press;   
    rt_bool_t long_press_done;    
    rt_bool_t long_press;    
    rt_bool_t double_press_done;    
    rt_bool_t double_press;    
    rt_uint32_t timtick;    
    rt_uint32_t double_timtick;
} key_info_t;


2.4、page.c (page.h) - OLED界面

OLED界面主要实现:系统本地日期时间显示、定位状态显示、当前经纬度和实时速度及已经定位的距离

头文件定义:

typedef enum _page_type {
    PAGE_STARTUP = 0,
    PAGE_DATE_TIME,    
    PAGE_LOCATION,    
    PAGE_SPEED,    
    PAGE_MAX,
}page_type_t;

typedef enum _page_state {    
    PAGE_STATE_LOCATION = 0x1,
    PAGE_STATE_TRACK = 0x2,
}page_state_t;

void page_init();
void page_switch(rt_int32_t index);
void page_update();


2.5、track.c - GPS轨迹记录模块

用于GPS轨迹的记录,统一由该模块管理,开始和停止记录。


一份简短的实际生成的GPS轨迹如下(附件:TRACK_20211204_131156.zip):

<gpx version="1.1" creator="GPX C Library"

 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

 xmlns="http://www.topografix.com/GPX/1/1"

 xsi:schemaLocation="http://www.topografix.com/GPX/1/1 http://www.topografix.com/GPX/1/1/gpx.xsd"

>

<metadata><name><![CDATA[Ver 1.0.0]]></name>

<desc><![CDATA[GPS Track By AlgoIdeas]]></desc>

</metadata>

<trk><name><![CDATA[TRACK_20211204_131156.gpx]]></name>

<desc><![CDATA[GPS Track based on AB32VG1]]></desc>

<trkseg><trkpt lat="22.992729" lon="114.481583"><ele>25.70</ele>

<time>2021-12-04T05:12:07Z</time>

</trkpt>

<trkpt lat="22.992701" lon="114.481583"><ele>25.40</ele>

<time>2021-12-04T05:12:10Z</time>

</trkpt>

<trkpt lat="22.992649" lon="114.481583"><ele>25.40</ele>

<time>2021-12-04T05:12:14Z</time>

</trkpt>

<trkpt lat="22.992519" lon="114.481590"><ele>17.80</ele>

<time>2021-12-04T05:12:27Z</time>

</trkpt>

<trkpt lat="22.992310" lon="114.481628"><ele>8.90</ele>

<time>2021-12-04T05:12:44Z</time>

</trkpt>

<trkpt lat="22.992029" lon="114.481728"><ele>10.70</ele>

<time>2021-12-04T05:12:59Z</time>

</trkpt>

<trkpt lat="22.991880" lon="114.481758"><ele>13.80</ele>

<time>2021-12-04T05:13:15Z</time>

</trkpt>

...  ...

<trkpt lat="22.992920" lon="114.481140"><ele>21.30</ele>

<time>2021-12-04T05:23:24Z</time>

</trkpt>

</trkseg>

</trk>

</gpx>


注:实际生成的轨迹,如果有部分存在异常的数据需要软件处理或手动删除

演示效果

一、视频演示效果

注:手机拍摄,OLED存在屏闪属于正常现象


二、软件界面赏析

图 2.1 定位界面


图2.2 系统日期和时间界面 (GPS校时后)


图2.3 经纬度界面

1.png


图2.4 实时速度于定位距离界面

poYBAGGrAo-AfuPTABPRG_GZjz4444.png


图2.5 系统日期时间界面,GPS轨迹录制状态显示

pYYBAGGrAo-AYHOlABroi5Q_xLY896.png


三、GPS轨迹查看

2021-12-04_133641.png


评论区(1 )
  • yu1988123: 谢谢分享

    回复