采用NFC通信的RTK GNSS接收机及Android终端软件设计
2015-05-08聂桂根
胡 昊,贺 喜,聂桂根
(武汉大学卫星导航定位技术研究中心,湖北 武汉 430079)
采用NFC通信的RTK GNSS接收机及Android终端软件设计
胡 昊,贺 喜,聂桂根
(武汉大学卫星导航定位技术研究中心,湖北 武汉 430079)
现代RTK接收机在野外传输数据时,会采用蓝牙传输方式。手持终端设备采集多部接收机时,有易混淆蓝牙名称、操作复杂、耗时长的问题。本文设计了基于NFC技术的RTK接收机及Android终端软件,Android终端只需触碰接收机NFC标签,便可以与接收机迅速建立蓝牙连接,并且显示接收机编号、搜星数目、定位精度、电池耗电等基本信息。试验结果表明,使用NFC技术的RTK接收机蓝牙配对时间不足1 s,Android终端可以方便地控制接收机的工作方式,并且数据接收稳定。
NFC;RTK;接收机;蓝牙;Android
一、引 言
现代RTK接收机都配有蓝牙功能[1],解决了传统串口传输操作不便、设备易损坏、维护成本高等问题[2]。蓝牙连接时间大约为6 s,再加上搜索及输入密码的程序,连接过程需要20~30 s,而且当一个手持终端需要采集多个接收机数据或多个手持终端要随机采集不同接收机数据时,易混淆数据内容。
目前与接收机配套的终端控制系统大多采用Windows CE或Windows Mobile系统[3],需要搭载于专用的硬件平台上,价格十分高昂。与此同时,Android终端所配置的处理器速度越来越快,集成着4G、近场通信(near field communication,NFC)、蓝牙、WiFi等多种通信方式[4]。相比于iOS和Windows CE系统,Android作为开源操作系统,对开发人员更有吸引力,Android终端正逐步扩大着自己的市场,可以预见,未来Android设备将担当手持终端设备与RTK接收机交互使用。
NFC允许电子设备通过简单触碰的方式完成信息交换与服务的访问,NFC标签是集成了NFC芯片的非接触式IC标签[5],NFC可以用于辅助蓝牙设备连接。
本文首次提出并设计了一款基于NFC的RTK GNSS接收机及配套的Android软件。用户只需使用Android设备的NFC功能扫描RTK接收机的NFC标签,便可以获取接收机的定位卫星数、电池电量、定位精度等信息,并且在不到1 s时间内就能建立蓝牙连接,可以实现单个终端快速切换不同的接收机。
二、NFC概述
NFC最早是由Nokia和NXP发起的,目前由NFC论坛(NFC Forum)负责制定技术标准,NFC Forum涵盖了芯片开发商、手机制造商、电视制造商及国际金融组织等。NFC起源于RFID,是一种工作频率为13.5 MHz、通信距离为0~20 cm(实际产品大部分都在10 cm以内)的近距离无线通信技术,目前可选择106 kbit/s、212 kbit/s、424 kbit/s中的一种作为传输速率[6]。NFC有主动通信和被动通信两种通信模式。在主动通信模式下,每台NFC设备向其他NFC设备发送数据时,必须产生自己的射频场。在被动通信模式下,NFC发起设备即主动启动NFC通信的设备在整个通信过程中提供射频场。
NFC根据应用的不同可采取3种工作模式:读写模式、点对点模式、卡模拟模式。读写模式下NFC终端可以读写外部非接触式卡片信息;点对点模式下NFC终端之间可以进行数据交换;卡模拟模式下NFC终端可以作为一张非接触式卡与读卡器进行交互。基于以上3种工作模式,NFC广泛应用于手机支付、智能海报、数据传输、门禁等领域[7]。
智能手机逐渐走入大众的生活,人们使用手机打电话、上网搜寻信息、导航、娱乐等。越来越多的手机集成了NFC功能,主流厂商如苹果、三星、华为、中兴、联想、htc、黑莓等都生产了配置有NFC功能的手机[8]。
NFC相比于蓝牙连接速度更快,但是传输速度不及蓝牙[9]。如果将NFC与蓝牙结合,发挥彼此的优势,可以免去蓝牙复杂的配对过程,减少操作时间。
三、基于NFC的RTK接收机设计
1.RTK接收机组成
本文设计的RTK接收机由微型处理器、NFC模块、蓝牙模块、GNSS模块、串口模块、电源模块及存储模块等构成。微型处理器作为控制器接收GNSS模块的数据,并对接收的数据进行存储,同时与其他各个模块通信。接收机结构如图1所示。
图1 接收机结构
微型处理器选择ST公司的 STM32F407VGT6,它配置了单周期DSP指令系统和FPU功能,并且处理器主频达到了168 MHz,拥有高性能处理数字信号的能力。通信接口包括3个I2C接口、6个通用同步异步串口、3个SPI接口和1个SDIO接口等。
GNSS模块选用UB370 ,该板卡支持北斗B1/B2/B3、GPS L1/L2及GLONASS L1/L2,提供毫米级载波相位观测值和厘米级高精度RTK 定位,拥有优于0.2°的定向精度。
蓝牙模块选用蓝牙4.0模块,最高速率高达18 kbit/s,空旷距离传输距离为80 m。
sd卡为存储设备,拥有4 GB容量,可以存储5 s采样率约12个月的双频GNSS数据。
串口模块将TTL电平或CMOS电平转换为RS-232电平,便于PC端使用串口进行调试。
NFC模块采用PN532芯片,在读写器模式下支持ISO/IEC 1443A/MIFARE、FeliCa、ISO/IEC 1443B机制。在卡模拟模式下支持ISO 14443A/MIFRRE、FeliCa机制。通信接口为UART,工作电压为3.3 V或5 V。
2.NFC通信
NFC Forum定义了NFC协议,由物理层到应用层分别由Analog、Digital/Activity、工作模式协议层及应用层共4部分组成。在工作模式协议层定义了点对点通信、卡模拟、读写模式3种通信模式;在读写模式中定义了4种类型的标签:type1、type2、type3、type4。
设定NFC模块为卡模拟工作方式,Android终端为读写模式,这样不仅满足数据由NFC模块向Android终端单向传递的需要,而且相比于点对点通信可以降低接收机的功耗。NFC模块模拟type2标签,标签2协议基础为ISO/IEC 14443 TypeA,存储容量为2 KB,传输速度为106 kbit/s。将符合NFC数据交换格式(NFC data exchange format,NDEF)规范的数据按既定指令写入模块就能完成卡模拟。
自定义传输数据结构见表1,它包含了接收机的基本信息及蓝牙连接的信息。
表1 传输数据结构
需要说明的是:①定位方式设定0表示无定位,1表示单点定位,2代表伪距差分,3代表RTK固定解,4代表RTK浮动解。②测量状态高4位表示测量模式,0001b表示点测量,0010b表示线测量;低4位表示当前状态,0000b代表正常测量,0001b代表坐标超差重新测量中,0010b代表测量完成。
自定义传输数据结构通过Base64算法编码后生成84字节的ASCII字符串,再打包成NFC支持的NDEF消息。
NDEF消息由一个或多个Record组成,不同的Record可以封装不同类型的负载。Record的格式见表2,Record的首字节的含义及设置说明见表3。
表2 Record结构
表3 Record首字节含义及设置说明
所传输的数据包为ASCII字符串,仅用一个Record就可完成传输,故该Record既是首记录也是尾记录。负载长度为84 B即0×54,用一个字节就可以表示。因此Record首字节设置为11010001B即0×D1。
记录类型定义(Record type definition,RTD)规范定义了Record负载的编码格式。NFC Forum定义了文本RTD、URI RTD、智能海报RTD、通用控制RTD、签名RTD。接收机需要传输的数据都是ASKII码表示,属于RTD_TEXT(即文本记录类型),它用来存储Tag中的文本信息。RTD_TEXT由状态标志位(1个字节)、语言码(ISO/IANA语言码,如“fi”、“en-US”、“jp”等,编码为US-ASCII)、实际文本信息(编码为UTF-8或UTF-16,取决于状态标志位)3部分组成。文本信息为UTF-8编码,IANA语言码长度为2,设置状态标志位为0×02。编码为US-ASCII码(即“en”),故本系统中设置ISO/IANA语言码为0×65 0×6E。实际文本信息为打包的84字节ASCII数据。
综上,NDEF可以设置为纯RTD_TEXT类型Hex串:D1 01 54 54 02 65 6E+“接收机数据包”。微处理器按照给定的串口命令将NDEF信息写入NFC模块,便完成了接收机NFC的卡模拟。
3.接收机NFC工作流程
微处理器需要依次初始化GNSS模块、蓝牙模块、NFC模块及其他功能模块,设置NFC模块为卡模拟工作方式,将解码的GNSS信息及蓝牙信息传输给NFC模块,具体步骤如下:
1) 初始化GNSS模块。GNSS模块通过串口与STM32处理器进行通信,设置串口波特率设置为115 200 bit/s。GNSS采样率为1 Hz。
2) 初始化蓝牙模块。蓝牙模块通过串口与微处理器进行通信。设置串口波特率为115 200 bit/s。蓝牙采用从模式(Slave)侦听外部蓝牙设备配对及连接请求。
3) 初始化NFC模块工作模式。NFC模块通过串口与微处理器通信,PN532设置为卡模拟工作方式,采用NFC Forum制定的标签2规范。
4) 处理器接收GNSS数据、解码GNSS数据,转为RINEX格式存储。
5) 微处理器将解码GNSS数据、接收机运行状态及蓝牙信息打包成NFC支持的NDEF数据,并发送给NFC模块。
6) 重复步骤4),直至确认蓝牙已连接。
7) Android终端通过蓝牙向接收机传输信息或发送控制命令。
8) 如果蓝牙连接断开,则重复步骤4)。
4.硬件设计需要注意的问题
由于NFC模块的天线覆盖的面积直接决定着射频发射的效果,因此在设计美观、操作方便的RTK GNSS接收机时,结构上需要避免天线部分由金属固定。
四、Android终端软件设计
1.软件构架
软件实现了对接收机NFC Tag的读操作,通过读取Tag的信息建立蓝牙连接并显示接收机状态的部分信息,建立蓝牙后通过UI界面控制接收机测量及传输。软件由文件管理、通信、逻辑连接及用户界面4部分组成。软件构架如图2所示。
图2 Android终端软件构架
文件管理模块对接收到的文件进行处理,包含保存RINEX文件、NMEA-0183文件及其他工程文件,并对文件进行导入/导出管理。
通信模块完成Android终端与接收机之间NFC、蓝牙、串口通信及互联网NTRIP(networked transport of RTCM via Internet protocol,通过互联网进行RTCM网络传输的协议)等通信功能的实现。
逻辑连接模块衔接其他模块之间的工作:包括完成NFC辅助蓝牙连接、GNSS解码、工程管理及坐标转换等功能。NFC辅助蓝牙连接就是将NFC模块收到的信息进行处理,完成蓝牙快速连接及显示接收机基本信息。GNSS解码后以便存储和信息读取,并在用户界面显示。
UI模块作为操作人员与终端的交互界面,包含文件操作、测量、设置及状态4部分。文件操作实现打开文件、保存文件、导入文件、导出文件;测量功能利用静态点测量、RTK、CORS等测量方式获取数据;设置功能完成通信方式、接收机参数、文件管理等设置;状态包含接收机、CORS、卫星状态的显示。
2.Android NFC开发
Android提供了Android.NFC和Android.NFC.tech两个包进行NFC开发[10]。其中Android.NFC包提供了NFC设备对NFC Tag读写NDEF消息的函数及两个NFC设备之间进行数据交换的函数。Android.NFC.tech包提供了对不同Tag的读写操作类。本文设计的接收机NFC模块模拟Type2符合NDEF标准,使用Android.NFC便可以完成对Tag信息的处理。
Android提供intent完成不同activity之间的通信,NFC标签调度系统定义了3个intent对象,按照优先级由高到低为ACTION_NDEF_DISCOVERED、ACTION_THCH_DISCOVERED、ACTION_TAB_DISCOVERED。其中ACTION_NDEF_DISCOVERED用于启动包含NDEF负载和已知类型标签的activity。
当Android设备扫描到接收机的NFC Tag时,系统会读取NdefMesage的第一条NdefRecord,获取到TNF、Record类型、Id信息、负载信息等。NFC标签调度系统会使用TNF和RTD将MIME类型映射到NDEF消息中,会将这些信息跟实际的负载一起封装到ACTION_NDEF_DISCOVERED类型的intent中。通过设置NFC Intent过滤器,该intent对象会启动NFC应用程序。Android终端读取模拟卡中的DNEF信息软件编写的步骤如下:
1) 在Android Manifest中添加NFC权限,使得软件获得使用Android NFC硬件的权限:
2) 通过NfcAdapter类的getDefaultAdapter()函数获取Android终端默认的适配器。可以通过此适配器对Android终端是否支持NFC功能,以及是否已经开启NFC功能进行检测,同时在AndroidManifest.xml中声明过滤器类型。
3) 定义Tag对象:
Tag tag=getIntent().getIntent()
.getParcelableExtra(NfcAction())
4) 通过NdefMessage类获取NDEF格式数据。
5) NdefRecord类获取Record信息。
6) 解析Record信息。getTnf()函数获取tnf类型,get.payload()获取负载数据并通过byte数组存储。
7) Base64解码负载数据得到自定义传输数据结构,弹出对话框显示接收机状态并提示用户是否连接。
8) 建立蓝牙连接,进入常规作业。
五、测试与分析
将第三代小米手机作为Android终端进行测试,首先在终端上安装编写的Android应用程序,然后将Android终端在已运行的接收机NFC标签上“贴一下”,界面会弹出图3(a)界面,选择“是”按钮,进入Android终端控制主界面。图3(b)为主界面状态栏,显示了接收机、CORS及卫星分布状态。
图3
使用NFC技术辅助接收机和Android终端进行蓝牙连接,避免了烦琐的蓝牙搜索、配对连接程序,使蓝牙连接操作时间缩短至1 s内。
六、结束语
本文研究了NFC传输协议在RTK GNSS接收机中的应用及Android提供的NFC开发包与相应函数的使用方法,将NFC技术运用于RTK GNSS接收机与Android终端连接,Android终端可以迅速获取接收机的基本信息和蓝牙信息,在1 s内便可与接收机进行蓝牙连接。利用NFC技术,Android终端用户在野外获取数据时避免了搜索接收机蓝牙与配对的操作过程,节省了时间,并且避免了接收机数据采集易混淆的问题。使用NFC在提高工作效率的同时降低了手持终端成本,可以预见NFC将作为继蓝牙、WiFi之后又一个新的通信技术应用于RTK GNSS接收机。
[1] 林超.智能RTK GNSS接收机的关键技术研究[J].测绘工程,2013,22(4):52-54.
[2] 王宝山,杨春全,徐丽丽.蓝牙通信技术在电子测量仪器数据传输上的应用[J].测绘与空间地理信息,2011,34(1):41-42.
[3] 褚世仙,杨雷生,樊增龙,等.集成GPS/PDA/TS的地下管网信息采集系统的设计与开发[J].测绘通报,2013(7):66-70.
[4] 刘斌.蓝牙及WIFI技术在智能手机上的应用与发展[J].科技与企业,2014(10):121.
[5] 熊良林.基于Android手机NFC应用系统的开发[D].广州:华南理工大学, 2014:7-8.
[6] 王淼.NFC技术原理与应用[M].北京:化学工业出版社,2014.
[7] 董琦.基于Android平台的NFC终端设计[D].成都:电子科技大学,2014:1-2.
[8] 刘敬涛,黄鹰,覃泽颖.基于Android平台的GPS-RTK手簿系统[J].地理空间信息,2014,12(5):56-58.
[9] 储波.基于NFC技术的高校管理系统的设计及安全性研究[D].上海:华东理工大学,2014:6-7.
[10] 周建炜.基于公众网络的行业应用智能终端开发与产业化[D].济南:山东大学,2013.
Design of RTK GNSS Receiver and Android Application Based on NFC Technology
HU Hao,HE Xi,NIE Guigen
胡昊,贺喜,聂桂根.采用NFC通信的RTK GNSS接收机及Android终端软件设计[J].测绘通报,2015(7):89-93.
10.13474/j.cnki.11-2246.2015.0220
2015-02-05
国家自然科学基金(41074023)
胡 昊(1988—),男,硕士生,研究方向为嵌入式开发。E-mail:263993206@qq.com
P208
:B
:0494-0911(2015)07-0089-05