打开主菜单

谷雨文档中心 β

更改

BLE技术揭秘

删除23字节2019年8月15日 (四) 18:13
无编辑摘要
[[文件:BLE技术-虚拟主从机.png|居中|无框|750x750像素]]
==== '''步骤一:上电初始化步骤1:上电初始化''' ====
主机、从机上电后(不分先后顺序),首先进行协议栈初始化和相关功能调用,如下图所示。
[[文件:BLE技术-交互流程1-初始化.png|居中|无框|750x750像素]]
* 从机设备,从机初始化时,需要设置设备名称,广播相关参数,从机Profile等。从机一般会立即开启广播,也可以等待一个事件来触发广播,例如按键触发。
==== '''步骤二:主机扫描从机步骤2:主机扫描从机''' ====
按键按下,触发主机扫描从机,此时,主机显示屏打印Scanning正在扫描。此刻的从机仍然处于广播状态。[[文件:BLE技术-交互流程2-扫描.png|居中|无框|750x750像素]]
==== 步骤三:发现从机设备 步骤3:发现从机设备 ====
当主机扫描到从机时,可以返回已扫描到的从机相关信息,例如可以提取到下图中的从机设备名称,从机MAC地址,从机的RSSI信号值等数据。
因此,有些应用在从机的广播包或者扫描回应包中添加自定义字段,这样就可以被主机通过扫描的方式拿到数据。[[文件:BLE技术-交互流程3-发现设备.png|居中|无框|750x750像素]]
==== 步骤四:发送连接请求 步骤4:发送连接请求 ====
当主机扫描到从机后,通过MAC地址向从机发送连接请求。低功耗蓝牙的连接速度非常快,100ms左右即可成功连接上。如果从机的广播比较大,则会影响连接的速度。
从机在未收到连接请求之前仍然处于自由的广播状态。[[文件:BLE技术-交互流程4-发送连接请求.png|居中|无框|750x750像素]]
==== 步骤五:成功连接从机 步骤5:成功连接从机 ====
当从机收到连接请求后,双方成功建立连接,此时双方的状态均变为已连接状态。
然后主机可以调用协议栈提供的接口函数来获取从机的服务。[[文件:BLE技术-交互流程5-完成连接.png|居中|无框|750x750像素]]
==== 步骤六:获取从机服务 步骤6:获取从机服务 ====
获取从机服务通常是在连接成功后就立即执行的,因为只有获取从机的服务后,才能与其通信。下图是主机向从机发送获取服务的请求。
此刻,从机处于已连接状态。响应服务获取请求是在底层自动完成,上层无需理会。[[文件:BLE技术-交互流程6-获取服务.png|居中|无框|750x750像素]]
==== 步骤七:成功获取服务 步骤7:成功获取服务 ====
如下图所示,主机成功获取到从机的服务,例如获取到UUID为0xFFF0的Services,该Service有两个特征值,分别是具有读写属性的0xFFF1,以及具有通知属性的0xFFF2。
读写属性是指主机可以读写该特征值的内容。而通知属性是指从机可以通过该特征值向主机发送数据。[[文件:BLE技术-交互流程7-已获取服务.png|居中|无框|750x750像素]]
==== 步骤八:主机向从机发送数据 步骤8:主机向从机发送数据 ====
主机通过特征值0xFFF1,主动向从机发送自定义数据Hello,当数据成功发送后,主机状态变为:数据已发送。从机将收到主机发来的数据,从机状态变为收到数据。[[文件:BLE技术-交互流程8-主机Write数据.png|居中|无框|750x750像素]]
==== 步骤九:从机向主机发送数据 步骤9:从机向主机发送数据 ====
从机可以通过Norify的方式主动向主机发送数据,例如下图,从机通过特征值0xFFF2发送了一条Notify通知,数据内容为:1234[[文件:BLE技术-交互流程9-从机Notify数据.png|居中|无框|750x750像素]]
==== 步骤十:发送断开请求 步骤10:发送断开请求 ====
主机和从机任何一方均可以发起断开连接的请求,对方收到后,状态将变为已断开。[[文件:BLE技术-交互流程10-请求断开.png|居中|无框|750x750像素]]
==== 步骤十一:成功断开连接 步骤11:成功断开连接 ====
从机收到主机发来的断开请求,此刻状态变为已断开。[[文件:BLE技术-交互流程11-已断开.png|居中|无框|750x750像素]]
2,367
个编辑