实验一. 北斗/GPS模块实验


实验目的

  • 学习北斗GPS定位技术,掌握GPS协议标准;
  • 掌握Android串口数据解析的方法;
  • 掌握Handler的使用机制,实现子线程与UI线程的通信

实验环境

  • 硬件:CBT-EMB-MIP 实验平台,PC机,北斗GPS双核模块;
  • 软件:Android Studio;

实验内容

  • 分析北斗GPS输出数据协议帧各数据位含义;
  • 编写Android程序解析GPS数据;

实验原理

GPS简介

  GPS(Global Positioning System), 即全球定位系统,它是一个由覆盖全球的24颗卫星组成的卫星系统。其目的是在全球范围内对地面和空中目标进行准确定位和监测。随着全球性空间定位信息应用的日益广泛,GPS提供的全时域、全天候、高精度定位服务将给空间技术、地球物理、大地测绘、遥感技术、交通调度、军事作战以及人们的日常生活带来巨大的变化和深远的影响。

  GPS系统一般由地面控制站、导航卫星和用户接收机(GPS的移动用户端)三大部分组成。导航卫星至少24颗,均匀分布在6个极地轨道上,轨道的夹角为60度,距地平均高度为20200公里,每12恒星时绕地球一周。

北斗GPS标准NEMA数据格式协议介绍

北斗双核模块NEMA协议输出信息主要包括以下几个部分:

模式 语句名称 功能
GPS模式
GPGGA 坐标位置数据
GPRMC 运输定位数据
GPGSA DOP与有效卫星
GPGSV GPS卫星状态信息
BD模式
BDGGA 坐标位置数据
BDRMC 运输定位数据
BDGSA DOP与有效卫星
BDGSV BD卫星状态信息
GPS&BD混合模式
GNGGA 卫星定位信息
GNRMC 运输定位数据
GNGSA DOP与有效卫星
GPGSV GPS卫星状态信息
BDGSV BD卫星状态信息
GNGLL 含经、纬度的地理信息
GNVTG 对地方向及地面速度

  本实验中所使用的北斗GPS模块工作在GPS&BD混合模式下,具体协议格式见光盘doc目录下的《BD-126输出数据协议文档.pdf》。

Android串口库使用方法

给Android Studio项目添加aar包引用

  本地串口库aar包路径:Android光盘/src/chapter06/UartLibrary.aar

  Android Studio新建好的项目结构如图4.3.1

  其中app是我们的主要module, libs下存放外部的library build.gradle是配置App module的,接下来主要对其操作。

图4.3.1

  • 复制外部aar包UartLibrary.aar到libs目录下。
  • 修改app目录下的build.gradle配置文件:
// 添加arr文件的引用  还要在dependencies里面添加引用
repositories {
    flatDir {
        dirs 'libs'
    }
}
  • 修改dependencies,添加如下一行:
  // 添加AAR文件的引用,文件名字为UartLibrary,类型为aar
    compile(name:'UartLibrary', ext:'aar')

  其中name就是libs目录下UartLibrary.aar文件名称, ext是其扩展名。

  • 重新编译项目,从工具栏依次选择:"Build"-->"rebuild project"。

  编译完成后,在app/build/intermediates/exploded-aar/就可以看见我们引用的aar包内容,其中jar目录下是jar文件,res下是我们aar包里的资源文件。如图4.3.2所示:

图4.3.2

串口库API接口使用

API文档入口:Android光盘/doc/串口库API接口文档/index.html。如图4.3.3所示:

图4.3.3 串口库API

  1. 添加动态广播接收者BroadcastReceiver,接收串口数据。
    private final BroadcastReceiver SerialInfoReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            Log.d(TAG, "onReceive action" + action);
            if ((ACTION_SERIAL).equals(action)) {
                switch (intent.getIntExtra(RESULT_CODE, 0)) {
                    case OK_UART:
                        ShowMessage("串口:" + str_serial + " 打开成功!");
                        break;
                    case UART_RECEIVED: //接收到串口数据
                        Bundle bundle = intent.getExtras();
                        byte[] buf = bundle.getByteArray(UART_RECV_DATA);
                        Log.d(TAG, "onReceive uart:" + Convert.bytesToHexString(buf, buf.length));
                        result = Convert.asciiBytesToString(buf);

                        updateUI();
                        break;
                    case ERR_UART:
                        break;
                    case ERR_UART_STOP:
                        break;
                    case ERR_BAD_FILE_NUMBER:
                        ShowMessage("串口:" + str_serial + " 打开失败!");
                        break;
                    default:
                        break;
                }
            }
        }
    };
  1. onResume中注册广播,在onPause中解除注册。
    @Override
    protected void onPause() {
        super.onPause();
        LocalBroadcastManager.getInstance(this).unregisterReceiver(SerialInfoReceiver);
    }

    @Override
    protected void onResume() {
        super.onResume();
        IntentFilter filter = new IntentFilter();
        filter.addAction(ACTION_SERIAL);
        filter.addAction(ACTION_CLOSE_SERIAL);
        LocalBroadcastManager.getInstance(this).registerReceiver(SerialInfoReceiver, filter);
    }
  1. 打开串口示例:
    UartService.openUart(MainActivity.this, str_serial, baudRate, 0);
  1. 关闭串口示例:
    UartService.stopUartService(MainActivity.this);
    UartService.closeUart(MainActivity.this);
  1. 发送数据示例:
//发送字符串
UartService.getDev().sendData("hello", false);
//发送字节数组
UartService.getDev().sendData(byteArray, true);

实验步骤

导入工程源码

  1. 打开Android Studio,从菜单栏选择 File > Open
  2. 弹窗中浏览选择光盘src目录下的Gradle工程 CH06_Extend ,点击OK导入。
  3. 等待工程构建完成后,在工具栏中的Android App列表中选择本实验例程CH06_01_GPS

演示运行

  • 平台主板通过miniUSB线连接电脑后,点击 Run 从菜单栏运行应用 运行程序。
  • 将平台主板GPS模块上方的跳线帽跳到EXM1处,拨码开关拨到ON上给模块供电。
  • 将GPS天线插上,并将外接天线放到室外。
  • 在界面中选择串口1:ttySAC1,波特率:9600,点击打开按钮,打开成功后如图5.1所示弹出提示信息:

图5.1

  • 等待数秒后界面中会显示当前定位信息,如图5.2所示:

图5.2 GPS实时定位信息

results matching ""

    No results matching ""