前言
在蓝牙应用开发中,干得最多的就是修改参数,然后调调相关初始化接口,因为最难的协议栈相关部分芯片厂家都已经做好了的,很多厂家的DEMO可能都覆盖了你需求的全部应用了。基于原厂给的DEMO上,可以快速开发出你想要的蓝牙产品,与此同时,还需要了解开发中高频修改的点或参数。
从设备
从设备是被连接那一端设备。
广播
对于从设备而言,在连接之前要干的事情是广播,广播是为了让主设备发现并连接自己。在广播时,我们常常需要修改的参数是广播内容和广播间隔。
广播内容
广播是为了告诉附近的人自己的存在以及自己是谁,如下图。
上图是通过nRF Connect来发现附近的设备的,显示了M1_HRM这个蓝牙设备广播的内容:
- 设备名称:M1_HRM
- Device type:LE only(代表仅支持低功耗蓝牙)
- Advertising type:Legacy(Legacy:BLE 4.2 版本的 ADV;Extend:BLE 5.x 版本的 ADV)
- Appearance:Heart rate Sensor(表达的是什么类型的产品,这里是心率传感器)
- Flags:GeneralDiscoverable,BrEdrNotSupported(通用可发现,不支持经典蓝牙)
- Complete list of 16-bit Service UUIDs:0x180D(设备服务类型的唯一标识)
- Complete Local Name:M1_HRM(设备完整名字)
广播数据是开发一个从设备最先需要修改的,它代表了自己的特性以及包含了什么功能,更多广播包数据里面的数据类型可以参数蓝牙核心文档,以下展示出其中一小部分:
关于广播类型数据详细信息请看这里,进来然后找到CSS
广播间隔
广播间隔的设置会影响被发现的速度,间隔越小,被发现的概率就越大越快,同时自身的功耗也会相应增加。
补充以下两种广播间隔定义:
-
最大最小广播时间设置
-
周期广播
MTU
MTU: 最大传输单元(MAXIMUM TRANSMISSION UNIT) , 指在一个PDU(Protocol Data Unit: 协议数据单元,在一个传输单元中的有效传输数据)能够传输的最大数据量。
MTU协商一般在两个设备连接成功之后且进行大数据通信之前,比如说,主设备发出一个247个字节的MTU请求,但是从设备回应MTU是23字节,那么今后双方要以较小的值23字节作为以后的MTU),主从双方约定每次在做数据传输时不超过这个最大数据单元。
连接参数
主要修改连间隔和从机延迟。Connection Interval增长,主从设备间通信频率降低,功耗降低;Connection Interval减短,通信频率增加,功耗增加。
Slave Latency减少或者设置为 0,每次Connection Events中都需要回复Master的包,功耗会上升,数据发送速度会提高;Slave Latency加长,功耗下降,数据发送速度降低。
配对
有些设备连接后需要配对,这部分细节可能多,但是对于应用来说只需要修改个别参数。
服务配置
一个蓝牙从设备一般会有多个服务,这些服务需要开发人员自行添加,大部分设备都有的电池服务,设备信息服务。
特征配置
服务里面可以添加特征,特征有可读、可写、可通知、可指示这些属性。
发送通知或指示
当主设备请求了通知或指示,需要可以向主设备发送通知或指示。
主设备
主设备是发起连接的那一端设备。
服务发现
当主设备与从设备连接成功后,主设备发去发现从设备里面包含哪些服务及特征,如果发现了自己想要的则会做相应标记或记录下来。
使能通知或指示
当发现服务里面的特征后,且该特征具有可通知或可指示的属性,主设备可以去请求通知或属性,然后从设备就可以通过通知或属性向主设备发送数据了。
举例演示
下图是主设备连接从设备后发现服务及特征的表现:
总结
本文主要描述低功耗蓝牙开发的高频修改项,很多细节没有展开描述,如果想进一步了解,可以点进主页的 BLE协议剖析专栏。