BLE 项目开发中,都需要定义 BLE 的业务协议,即设备与 APP 交互的功能协议,而这块功能通常是由板端来做的,但有时也会因各种原因就由 APP 端来定义,下面以定义蓝牙扩香器的BLE业务协议为例展开说明。
BLE 是智能硬件的一种通讯方式,通过 BLE 连接,APP 和智能硬件就可以进行自定义的交互了。交互的体验如何,很大程度上取决于 BLE 业务协议定的好不好,以及板端软件、APP 的代码质量如何。
一、前言
要定义 BLE 的业务协议,首先要充分了解项目的功能点,即做好需求分析,一份好的 BLE 的业务协议,需要满足以下条件:
- 功能定义,覆盖所有功能,条理清晰
- UUID 定义适当,不要太多也不要太少
- 字段数据定义适当,字节、位使用得当
- 良好的兼容
- 可扩展
在通常的项目中,手机端会当会 BLE 的中心设备,而设备当作外围设备。
二、功能定义,覆盖所有功能,条理清晰
功能定义 涉及 需求分析,一定要注意描述清硬件、APP 这两方的行为,比如一个按键被触摸后,硬件会有哪些响应,有没有按键音,有的话应该是什么声音;之后硬件需要启动什么功能,这个功能启动时需不需要向 APP 发送哪些消息;通过一遍又一遍的阅读项目文档或者体验竞品 APP, 整理出功能点。有些功能的开发可能还需要在销售后通过和用户的交互来最终确认是否迭代;但是作为需求文档,最好是能做到一开始就有一个整体的规划;定义调试和测试功能接口。
三、UUID定义适当,不要太多也不要太少
蓝牙低功耗(BLE)是为省电而设计,其省电原理是因为通过特征值进行读写的时候,自定义的特征值一次最大传输的数据量为 20 字节;由于一次传输的数据量很小,所以,非常省电。
服务和特征(service andcharacteristic)
- 每个设备都会有 1 个或者多个服务
- 每个服务里都会有 1 个或者多个特征,特征就是具体键值对,提供数据的地方
- 每个特征属性分为:读,写,通知等等
在进行操作蓝牙设备前,建议先下载一个蓝牙工具 LightBlue,它可以辅助我们的开发,特别是在竞品分析的时候。
UUID 定义适当,不要太多也不要太少,少了 APP 处理复杂且会数据乱窜,多了,影响板端的性能。
四、字段数据定义适当,字节、位使用得当
因 BLE 最大传输的数据量为 20 字节,当然启用MTU除外(依赖于手机系统的版本),所以当数据多的时候,可以有效的利用数据的位运算。
如星期表示:
星期表示方法: BIT7 ~ BIT0
BIT7: Don't Care
BIT[6:1]: Saturday ~ Monday
BIT0: Sunday
如上所述,就可以表示出某一天的事件,如闹钟设置等。
五、良好的兼容
扩香器有单腔和多腔设备,在定义协议的时候,都要考虑到,不可单腔定一套双腔定一套,要做到兼容
区分设备:通过 BLE 数据广播包中的 manufacture 自定义字段数据来区分:
- 单腔:0x01
- 三腔:0x02
六、可扩展
字节定义要考虑以后的扩展,避免增加一个数据就得大改,要字段足够的情况下,可以预留 1-2 个字节为以后做兼容。