聚豐項目 > 基于AB32VG1的GPS位置記錄器
基于AB32VG1豐富的板載資源,并結合GPS模塊及顯示等其他模塊,在方便記錄軌跡的同時,提供校為便利的用戶交互體驗(如聲音提示和用戶按鍵交互,及屏幕顯示)。項目可用于運動軌跡記錄,及實時顯示速度等展示,及其他應用領域,解決部分場景下位置記錄實時查看不便或需要借助其他功耗相對較高的記錄設備的問題,同時增加生活的趣味性。
yu1988123
分享yu1988123
團隊成員
Algo 嵌入式軟件工程師
一. 整體硬件由4部分組成:
AB32VG1開發(fā)板、SSD1306 OLED顯示屏、GPS模塊(支持北斗和GSP雙模定位)和SD卡
注:其中開發(fā)板還用到了GREEN和RED燈,和S2及S3按鍵
硬件示意圖:
硬件整體外觀如下圖所示:
二、硬件模塊的連接
1、SSD1306 OLED顯示屏(II2C)引腳連接:
PE3 - OLED SCL、PE2 - OLED SDA、電源引腳
2、GPS模塊引腳連接(串口):
PA4 - GPS RX、PA3 - GPS TX、電源引腳
3、OLED和GPS模塊電源引腳連接:
模塊供電,均采用開發(fā)板提供的3.3V電源引腳
項目的軟件采用RT-Thread官方提供的IDE RT-ThreadStudio開發(fā),SDK基于AB32VG1-AB-PROUGEN,同時部分模塊采用官方軟件包,如ssd1306軟件包,也移植了部分軟件,如TinyGPS++和GPX(該部分開源軟件主要由C++編寫,移植采用C實現(xiàn),并修改部分BUG),GPS記錄后的軌跡符合GPX規(guī)范,可以用GPXSee(http://www.gpxsee.org) 軟件查看。
軟件開源地址:AB32VG1_GPS_TRACK: 基于AB32VG1的GPS位置記錄器 (gitee.com)
軟件框架:
1、軟件配置
1.1 RT-Thread Setting
軟件主要開啟了與硬件相關的I2C和串口,同時開啟了RTC相關功能
2、 軟件介紹
軟件采用模塊化設計,主要分為以下幾個核心模塊:
2.1、gps.c (gps.h) - GPS數(shù)據(jù)管理
核心數(shù)據(jù)結構和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 數(shù)據(jù)回調 */ 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數(shù)據(jù)格式封裝
主要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界面主要實現(xiàn):系統(tǒng)本地日期時間顯示、定位狀態(tài)顯示、當前經(jīng)緯度和實時速度及已經(jīng)定位的距離
頭文件定義:
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軌跡的記錄,統(tǒng)一由該模塊管理,開始和停止記錄。
一份簡短的實際生成的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>
注:實際生成的軌跡,如果有部分存在異常的數(shù)據(jù)需要軟件處理或手動刪除
一、視頻演示效果
注:手機拍攝,OLED存在屏閃屬于正常現(xiàn)象
二、軟件界面賞析
圖 2.1 定位界面
圖2.2 系統(tǒng)日期和時間界面 (GPS校時后)
圖2.3 經(jīng)緯度界面
圖2.4 實時速度于定位距離界面
圖2.5 系統(tǒng)日期時間界面,GPS軌跡錄制狀態(tài)顯示
三、GPS軌跡查看
yu1988123: 謝謝分享
回復