龙空技术网

基于单片机stm32的GPS定位位置记录系统 - 物联网 嵌入式 (含代码)

嵌入式xff 513

前言:

如今你们对“stm32的gps模块”大约比较讲究,看官们都想要剖析一些“stm32的gps模块”的相关知识。那么小编同时在网络上网罗了一些对于“stm32的gps模块””的相关知识,希望大家能喜欢,朋友们一起来学习一下吧!

**基于单片机的GPS定位位置记录系统 *难度系数:4分

工作量:4分创新点:3分

1 简介

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

2 主要器件stm32单片机RT-Thread物联网操作系统SSD1306 OLED显示屏GPS模块(支持北斗和GSP双模定位)SD卡按键、LED灯3 实现效果

定位界面

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

经纬度界面

实时速度于定位距离界面

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

GPS轨迹查看

4 硬件设计概述

整体硬件由4部分组成:

stm32单片机、SSD1306 OLED显示屏、GPS模块(支持北斗和GSP双模定位)和SD卡

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

硬件示意图

硬件整体外观如下图所示

硬件模块的连接

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

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

GPS模块引脚连接(串口)

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

OLED和GPS模块电源引脚连接

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

AB32VG1主控MCU

简介

开发板采用中科蓝讯的32位RISC-V指令集的AB32VG1型号MCU,主频120M。MCU有8M的Flash,和192K SRAM。支持3.0V-5.0V供电。

与一般MCU不同的是,这款MCU具有MPU模块,就是电源管理模块,支持Charge电路、BUCK电路、LDO电路等等,手册第十页给出了MPU模块的详细参数。

开发环境搭建

根据官方的指导,使用的是RT-thread官方stduio平台,先更新软件源代码至最新版,下载中科蓝讯软件包,下载RISC-V-GCC工具链,编译程序会用到。

软件包配置

接下来选择我们本次实验用到的软件包,wavplayer软件包、optparse软件包和multibutton软件包,实现通过板载按键控制声音的播放语音量的增减。

然后对软件包进行简单配置,按键的示例代码可以勾选也可以不勾选,后面要对此进行修改,改为评测板上的用户按键,optparse软件包默认即可。

5 软件说明

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

软件框架

6 部分核心代码

核心数据结构和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);

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();

完整代码可进群免费领取。

7 最后

嵌入式物联网的学习之路非常漫长,不少人因为学习路线不对或者学习内容不够专业而错失高薪offer。不过别担心,我为大家整理了一份150多G的学习资源,基本上涵盖了嵌入式物联网学习的所有内容。点击下方链接,0元领取学习资源,让你的学习之路更加顺畅!记得点赞、关注、收藏、转发哦!

点击这里找小助理0元领取:扫码进群领资料

标签: #stm32的gps模块 #gps stm32