富新辉,余之喜,苏凯雄
(福州大学 物理与信息工程学院,福建 福州 350002)
摘要:为提高北斗终端设备的便携性、兼容性与待机时长,针对北斗报文数据特点与低功耗蓝牙(Bluetooth Low Energy, BLE)的传输协议,设计实现了一种安卓导航通信系统。通过多线程分包组装处理增强系统实时性,并讨论得出兼容不同安卓终端的转发速度提高软件适用性。加入蓝牙丢包校验机制,有效提高系统传输可靠性。本设计可将北斗导航仪的各种交互功能集成在安卓终端上,安卓智能终端用户只需使用体积更小的北斗便携终端便能实现北斗通信导航功能,操作体验性更好,更具实用性。
关键词:北斗卫星;导航通信;安卓;低功耗蓝牙;便携终端
中图分类号:TN965.5文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.07.028
引用格式:富新辉,余之喜,苏凯雄.基于BLE北斗便携终端的安卓系统设计[J].微型机与应用,2017,36(7):95-97,101.
0引言
*基金项目:福州市科技项目计划资助(市校合作)(2015 G 61);福建省发改委2014产业技术联合创新专项资助(2014 G 100)北斗行业近几年迅速崛起,相关的终端设备也正在往便携性、小型化的方向发展。本文提出了一种基于北斗便携终端的应用设计方案,该方法可使北斗终端体积进一步缩小,待机时间更长,交互性更好。
该方案采用安卓系统的移动终端,利用BLE获得北斗一代、二代信息并进行交互操作,在安卓终端上实现北斗短报文通信与定位功能。本文针对BLE的协议特点与北斗数据的传输特性,设计了一种合理的结合方式,并经过测试验证了两者融合后数据传输的有效性。
1系统组成
本设计系统组成如图1所示,主要包含北斗一代模块、北斗二代模块、ARM处理器、BLE模块、安卓终端等。
1.1低功耗蓝牙BLE模块
本文的北斗便携终端采用的BLE模块具有低功耗、高速率、体积小、成本低的特点。并且该蓝牙模块采用单模模式[1],使得设备集成度更高,链路层更轻量且支持超低功耗待机模式操作。模块连接间隔为20 ms,当串口波特率为115 200 b/s 时,模块具有最高转发能力4 KB/s。模块可以从串口一次性最多传输200 B数据包,并会根据数据包大小自动分包发送,每包最大载荷为20 B[2]。
1.2ARM处理器
本系统中采用的ARM处理器为STM32,其主要功能为转发数据,将北斗一代、二代数据分包并插入适当的发送间隔时间,转发给BLE模块。当蓝牙模块接收到安卓终端发来的指令后交付给STM32,处理器对指令进行协议头判断并校验,若符合标准和协议,则按照相应的指令内容转发给北斗一代或二代模块。
1.3安卓终端应用软件功能
安卓系统4.3以后的版本支持BLE技术。本文的安卓终端采用的系统版本为Android6.0。
本文设计的安卓系统软件主要功能有:
(1)基本功能:北斗卡检测、北斗便携终端电量读取、北斗卫星信号功率读取;
(2)通信功能:一代模块短报文通信、SOS紧急求救;
(3)定位功能:RDSS有源定位、RNSS无源定位;
(4)蓝牙操作:连接、断开、搜索、丢包检测。
2核心软件处理过程
2.1指令分包发送与接收
安卓终端接收北斗终端发来的数据包,每包的长度都为小于或等于20 B,数据包都需要先存入接收缓存队列中,方便后续指令的组装操作。向北斗终端发送数据时,若数据包长度大于20 B,需要主动将指令拆分成等于或小于20 B的小包后,再放入发送缓存队列中等待发送。
发送和接收的过程都比较耗时,不适合放在主线程中执行,因此,本设计开启两路线程分别负责发送和接收(如图2所示)。图3所示的发送线程完成将发送数据分包并存入发送缓存的工作。
图3安卓终端发送线程接收线程完成从接收缓存内提取出数据包,再将这些数据包按照“$”开头和“*”结尾的指令格式组装起来,若出现“*”丢失的情况,则当组装的指令长度>300 B时自动抛弃。具体过程如图4所示。
2.2发送延时兼容性
蓝牙BLE存在连接间隔这个固定参数,指的是两个连接事件之间的时间间隔,蓝牙只有在连接事件内处理发送接收事件,连接间隔[3]的值一般为7.5 ms~4 s。不同的应用可能要求不同的时间间隔。时间间隔较长的优势是可显著节省功耗[4],短的时间间隔的优势是可以更快地收发数据,不利之处是设备因连接事件的到来而被频繁地唤醒,会有较多功耗。
对于安卓终端上的蓝牙模块,不同终端上使用的模块连接间隔参数通常都不相同,且安卓终端的自身配置也不相同,处理速度有快有慢,这便会出现如图5所示的发送丢包问题。
通过图5可看出,由于配置较低的安卓终端,处理速度较慢,分装完一个数据包的时间普遍大于蓝牙的连接间隔时间,即:
Ts≥nTL(n为正整数)(1)
式中,Ts为安卓终端的处理时间、TL为蓝牙连接间隔。这种情况下,当蓝牙连接事件到达时,发送的数据总是最新的。但当安卓终端配置较高,数据分装速度较快时,会出现蓝牙模块的发送速度跟不上数据更新速度的问题,部分数据还没被发送出去就已经被新的数据覆盖,直观的表现就是蓝牙丢包。
由于蓝牙底层的连接事件到达并没有任何标志位返回,且蓝牙为透传底层发送成功的标志位RTS[5]安卓系统无法读取到,所以为了避免这种情况,使配置较高的安卓终端满足式(1)条件,需要主动地加入延时。因为安卓终端的发送操作被放进独立的线程中,线程每次运行的间隔取决于不同安卓终端CPU的性能,理论上CPU越慢的安卓终端所需要的线程休眠时间越短。本文选取了配置性能不同的4种安卓终端,调整不同时延观察是否出现丢包现象,测试所需的最小时延,测试结果如表1所示。可以看出CPU性能越好的手机配合自己本身的蓝牙模块所需要的延时越长。
综上,由于安卓端发送给北斗终端的信息量并不大,发送周期也较长,且为了兼容市面上的普遍机型和BLE模块,在每发送20 B数据包之间增加12 ms~30 ms的时延较为合适,这里折中选择20 ms延时。
2.3校验机制
图6系统校验机制为了过滤掉一些不正确的干扰信息,并且减少蓝牙丢包造成的影响,本系统采用了一套校验机制以增强系统可靠性,如图6所示。北斗终端接收到指令后,经过初步检验,过滤掉不符合正确指令格式的无效信息,再进行校验码校验,将指令按字节异或,最后的结果与指令的校验和进行对比。如果相同则反馈成功,反之反馈失败。安卓终端接收到指令后,同样先做初步校验过滤无效指令信息,再进行校验码检验,若校验通过则交付后续处理,如果出错则统计错误数量。
对于安卓终端发送给北斗终端的部分,由于蓝牙传输为透传模式,安卓终端并不知道北斗终端是否正确地接收到信息。除了通信申请($CCTXA)和定位申请($CCDWA)指令北斗终端接收后有反馈信息,其他指令北斗终端是否接收到并无任何提示,所以有必要另外加入自定义的检验协议。加入的指令如表2所示。其中校验结果A表示有效信息,V表示无效信息。
3系统测试结果
为了验证本设计方案的可行性,通过BLE将Android终端与北斗便携终端连接后,进行通信与定位的测试。将发送接收的北斗卡号设置为同一张实现自发自收。系统运行效果如图7所示。测试采用混发模式,使用3级北斗卡连续短报文通信,发送内容为39个汉字的满报文,发送周期为62 s。测试数据如表3所示。
通过表3的数据可以分析得到,安卓终端与北斗终端连接的距离越大,蓝牙丢包率越高,当距离小于2.5 m时只要没有明显的阻挡物蓝牙丢包率为0。当距离大于5 m后成功率低于95%,在蓝牙丢包率较低的情况下,通信成功率主要取决于北斗卫星的信号强度,所以会出现小于1 m的通信成功率反而比2.5 m的低的状况。在实际使用情况下,便携北斗终端一般随身携带,蓝牙连接距离一般都小于5 m。该系统的性能与成功率完全适用于这种情况。
4结论
北斗产业不断壮大,北斗产品也渐渐出现在百姓生活中。北斗终端设备的小型化是必然趋势。本文针对使用BLE连接北斗终端设备与安卓设备的系统提供一种设计方案。在一般正常的使用情况下,本方案出现的丢包现象基本可以忽略。因此本方案满足北斗通信的要求,并提供了人性化的交互功能,具有良好的扩展性与移植性,对北斗设备的其他便携式、兼容性的应用有着一定的借鉴参考意义。
参考文献
[1] 欧阳骏,陈子龙,黄宁淋.蓝牙4.0 BLE开发完全手册: 物联网开发技术实战[M].北京:化学工业出版社,2013.
[2] 邹向阳,谭彬,何青云.无线传感器节点中的BLE蓝牙低功耗研究[J].现代电子技术,2016,39(20):67-71,77.
[3] MACKENSEN E,LAI M,WENDT T M. Blue tooth low energy(BLE)based wireless sensors[J/OL].[2016 08 30].https://www.deepdyve.com/.
[4] 镇咸舜.蓝牙低功耗技术的研究与实现[D].上海:华东师范大学,2013.
[5] 沈熠,陈章进,章鸿斌,等. 基于蓝牙低功耗技术的维修钥匙设计[J]. 微型机与应用,2016,35(18):29-31,34.