上海久誉软件系统有限公司 上海 200036
摘要:车载ETC模块与智能手机的通讯
关键词:蓝牙、ETC、BLE、OBU
本文主要描述了基于智能手机蓝牙低功耗模块(BLE)与车载蓝牙单元(OBU)的通讯。
随着ETC的普及,越来越多的家用车在出厂时都预装了车载蓝牙ETC模块,用户在启用新车时也可同步激活车辆ETC模块,只需要下载对应车厂的手机APP,进入ETC模块,即可自行注册激活ETC,十分方便,本文主要阐述车载蓝牙单元OBU与手机APP如何进行通讯以及通讯协议的简要分析。
车载蓝牙单元OUB与智能手机音的通讯使用低功耗蓝牙,即蓝牙BLE技术实现,其最大的特点是功耗较低,但其每次传输的数据量不宜过大,因为一般的低功耗蓝牙在对数据传输时,每个包的长度被定义在20个字节之内,如需传输比较大的字节数,则需要分包发送或接收数据。
车载OBU与智能手机通讯的数据通讯便是使用低功耗蓝牙协议,当成功建立连接后,其每次分包发送或接收时,最好有一定时间的延迟(约100毫秒)为佳,发送数据的包结构如下图所示:
蓝牙数据的封装:
应用层与蓝牙进行数据传输与通讯时,必须将应用数据封装在蓝牙数据域DATA域内,DATA域内的数据尊循TLV格式。收发数据需要遵循20字节一包的规则,当在发送数据时,如数据量大于20字节,则应拆分成20字节一包的形式多次发送,直至发送完成;并且,蓝牙数据被APP接收时,APP应具备组包处理功能。蓝牙设备与移动终端间应用层协议,应用数据帧格式应符合如下规定:
其中:Type:数据类型,1字节。
Content:数据内容。
移动终端发送到蓝牙设备的指令说明,其如下表所示:
注:A2为厂商自定义数据域,可根据业务实际情况自行进行处理。
车载ETC的OBU设备其发送到移智能APP的指令说明,其如下表所示:
与微信小程序的适配:
此项目的蓝牙协议须适配微信小程序,具体过程如下:
微信对蓝牙BLE 设备做出了一定的规定,即应先模拟成输入输出流的形式进行通讯,就实际而言,经典蓝牙的RFCOMM是一个流,流具有的特性有:
a. 可以传输无限长度的数据
b. 双工,读写可以并发,互不干扰。
很明显,低功耗的BLE协议,其无法传输无限长度的数据(即大于20字节的数据),为了传输较大字节的数据,即超过20字节的数据,需要定义一个规范来实现。
蓝牙设备写过程:
分帧:假设车载OBU上有一千字节的数据(即1K),要发给手机微信小程序。特征值收、发数据的长度有所限制,通常不能超过20个字节,整个传输过程需要分多次才能完成。一千个字节的数据,需要分包成1024 字节/ 20 字节=51个帧。剩下的4 个字节,未到一帧,这种情况下,需补齐为一帧,同时对余下16 个字节进行补零(0X00)。总共是52 帧。
2. 发送第一个数据帧:首先,将首个数据帧的内容引入至特征值中。然后通知手机读取数据。遵从步骤1,依次发送剩下的帧。
蓝牙设备读过程:
当蓝牙设备发现读特征值接收到数据时,会对数据进行接收,同时,会将其追加至设备的缓冲区中。需要注意的是:蓝牙设备读取数据需要一个前提,即微信APP已经订阅了将要进行数据读取的特征值,不然会出现数据丢失等不良问题,又称数据丢包。
微信蓝牙协议:
1 前提
第一,全部与之对接的厂商,都要开通微信公众平台的硬件号功能。
第二,厂商还应在公众平台上注册设备。
2 设备和广播
为实现与微信的良好通信,对于厂商设备的广播包,有以下的格式规定:
设备(安卓或苹果手机或平板)需要广播:
a. 微信规定的service uuid。
b.为厂商自定义字段,涵盖了设备的MAC 地址。
c. 包含指定的Characteristics。
Andriod 经典蓝牙设备需要广播:
a. 暴露一个指定uuid 的rfcomm 服务。
b. 厂商自定义字段里,存在设备的MAC 地址。
对于IOS经典蓝牙而言,需要通过苹果公司的MFI认证,与此同时,SerialNumber 需为MAC 地址(字符串形式)。
设备可分为两种:
可确认设备:若存在按钮,可以通过按动按钮的方式,实现人机交互,这种设备被称为可确认设备。
无法确认的设备:对于不具备传感器或者实体按钮,不能与人交互的设备,则称为无法确认设备,这种设备目前很少。
现阶段,市面上存在的外部设备,很多设备都需要做出确认后,例如靠近手机,或者按动特定的按钮,随后用户才能与设备进行绑定。相应的,广播包有两种:
普通包:普通包又称为广播包,其实质上就是设备正常情况下,所发送的所有数据包,
广播包的数据包括了设备的MAC地址等信息。
确认包:当用户对设备进行确定操作时,例如,设备上的按钮被安东,广播发出的特殊的包就叫做确认包,对于微信而言,其规范中对普通包与确认包格式进行了严格规定:即通过Manufature Data域来区别。
数据域的TVL格式:
TLV格式的全称为:TAG LENGTH VALUE,即数据是以T+L+V的形式组包发送,其具体定义如下:
TAG:
固定一个字节。嵌套表示,0x80 即CMD,0X81表示回复。
指令序号低4位从0X01开始往上累加,指令序号的高4位具有特殊含义,具体表示如下:
LEN:
变长表示。当需表示的数据长度小于0x80个字节时,占一个字节。当需表示的数据长度大于0x80个字节时,变长表示,即用用0x80+n来表示长度。
示例:
1. 表示0x77,LEN=0x77
2. 表示0x88,LEN=0x81 0x88
3. 表示0x0156,LEN=0x82 0x01 0x56
c) VAULE:
值域,长度由LEN指定。
手机APP与车载OBU的通讯(以iPhone为例):
IOS7.0开始支持BLE,swift语言则需要到IOS8.0。在IOS系统中,我们需要了解以下蓝牙相关术语:
BLE:(Bluetooth low energy)蓝牙4.0设备因为低耗电
BLE:(Bluetooth low energy)蓝牙4.0设备因为低耗电
Central:即中心设备,简单而言,所谓的中心设备实际上是发起蓝牙连接的设备,通常为智能手机。
Peripheral:外设,又称为周边设备,是被蓝牙连接的设备(一般是运动手环,本项目中为车载OBU设备。)
Service and Characteristic:服务和特征,每个蓝牙设备都会提供服务和特征,类似于网站提供的API,这些API(即特征)提供给你操作蓝牙服务的功能,其可分为读(read),写(write),通知(notify)几种。
Description:特征描述,所有的特征值均有与之对应的Description,主要用来对特征值的属性或信息进行描述。
IOS系统中提供蓝牙服务的API为CoreBluetooth,其结构如下图所示:
左侧的黄色区域,其作为中心模式存在,主要是将手机app作为中心,与其他蓝牙外设连接的情况。
右侧绿色的区域是外设模式,这是蓝牙外设与其他中心设备进行连接时所表现的情况。
服务和特征(service and characteristic):
所有设备中均会存在一个或多个服务,各服务也均会具备各自的特征,一个或者多个,特征实际表示的是其具体键值对,特征属性较多,例如读、写、通知等。其结构如下图所示:
车载蓝牙单元与手机APP的连接流程如下:
1、建立中心角色
2、扫描外设(Discover Peripheral)
3、连接外设(Connect Peripheral)
4、对外设中的特征及服务进行扫描
4.1 获取外设的services
4.2 获取外设Characteristics,以及characteristics的值
4.3 获取Characteristics的Descriptor和Descriptor的值
5、基于特征以及外设实现数据交互
6、订阅Characteristic的通知
通过iPhone智能手机连接车载OBU单元的握手指令示例:
当车载OBU单元与手机建立连接后,必须发送一条握手指令以确保机具与智能手机连接成功,其指令如下所示(以省中心的指令为例):
手机端发送数据:33008001A180
车载OBU单元会返回如下数据:
A1 00 【02 Device Type 设备类型 双片OBU 01,单片OBU 02 单片OBU ESAM + IC 03 单片OBU ESAM 04】 【38 36 42 45 38 38 30 30 31 45 33 46 32 42 37 46 设备编号】 【01 50 设备的版本号】【02 00 01 设备的软件版本号】【FF 电量】【02 Card Valid】【00 OBUActived】【00 预留】
如上所示,握手成功后,返回的指令会包括车载OBU的设备类型、设备编号、设备的版本号、设备的软件版本号、设备的电量信息、设备是否激活等信息,当获取到这些数据后,智能手机APP端会根据具体的业务需求再进执行其它指令的收发操作。
通过iPhone智能手机连接车载OBU单元进行注册激活的示例:
如上,当智能手机与车载OBU连接成功后,先进行一次握手,当握手成功后,即可获取车载
OBU的相关信息,如OBUID、OBU版本号、OBU的设备编号以及拆御标志等参数。
首先需要向ETC中心请求OBU的激活数据,需要上送的数据有:本OBU的ID、OBU的版本号、OBU的类型、ETC的用户ID、当前需要激活的车辆的车辆ID。
随后,ETC中心会根据所收到的请求参数返回注册激活数据,其中包括:OBU与卡片的激活数据,这些数据都是经过加密的,当手机收到这些数据后,再通过蓝牙指令写入机具中即可激活成功。
最后,当机具确认激活成功后,需要向ETC中心发送确认激活的指令即可完成一次OBU激活。
上海ETC APP简要介绍
基于此,我们设计并制作了上海ETC APP,此APP可以快便快捷的帮助用户完成ETC注册、激活、挂失、解挂、启用、禁用、ETC检测、账单查询等常用功能,此APP的功能设计如下图所示:
如上,便能与车载蓝牙单远建立连接,之后按照协议发送以及收取蓝牙指令便能完成具体的ETC业务,如:注册、激活、挂失、解挂等操作。
其中,主要功能有:
发行服务:
发行服务即注册ETC,包括:开户人身份信息录入,车辆信息录入,支付账户签约绑定和OBU二发和激活。
发行服务在本产品中为“注册ETC”模块。包括:身份信息录入,车辆信息录入,支付账户签约,车户绑定和OBU二发并激活共5功能点。
使用场景:车主新购或过户迁入(前装OBU一同迁入)车辆需发行,非车主(包括借入者)使用ETC缴费需要发行。
售后服务:
ETC售后服务功能包括:支付账户,启用禁用,ETC更换,ETC检测,ETC解绑,账单信息和发票开具。
支付账户
支持开户人进行发起支付账户签约、车户绑定和车户解绑。
ETC解绑
解除开户人与车辆,开户人与扣款账户,车辆同扣款账户的绑定关系。
使用场景:车辆过户迁出(前装OBU一起迁出);车辆报废(前装OBU一起报废);车辆借给他人。
启用停用
停用为暂停使用ETC缴费;启用为恢复使用ETC缴费。
使用场景:
停用:车辆遗失,车辆借出等暂停使用ETC缴费。
启用:找回遗失车辆,借出车辆等恢复使用ETC缴费。
ETC更换
4S店更换OBU设备后,对旧OBU设备注销,对新OBU二次发行和激活。
ETC检测
通过蓝牙连接OBU,如存在数据信息错误自动修正,并支持OBU重新激活功能。不能解决硬件故障。
使用场景:ETC扣款失败;前装OBU故障,维修后需要重新激活;前装OBU脱落,固定后重新激活。
账单信息
账单包含行车,加油,停车等相关ETC账单。
发票开具
提供跳转票根网功能。
个人信息
用户查看个人信息,车辆信息,支付账户信息等。
结束语:车载蓝牙OBU单元与智能手机进行通讯,方便了用户申办ETC,是一项便捷的服务,基于低功耗蓝牙协议,厂商实现了自已的通讯及业务协议,十分方便、便于维护。
参考文献
1、ETC设备蓝牙应用协议检测系统的设计与实现
逯静辉 薛金银张北海 《公路交通科技:应用技术版》2020年
2、基于蓝牙智能手机的OBU社会化发行研究
逯静辉 薛金银张北海 《公路交通科技:应用技术版》2020年
3、ETC车载单元低功耗蓝牙通信模式适应性分析
殷亚君 《中国交通信息化》2017年
4、BLE低功耗蓝牙技术开发指南
金纯... 国防工业出版社2016年
5、Blue Rubber Bleb Nevus Syndrome
Y Someda A Shoji T Tsuji 《NishiNihonHifuka》1987年
6、低功耗蓝牙BLE协议
杨一聪 《企业技术开发(学术版)》2019年