前两节中,我们首先直接用实际例程,体验了MicroPython中蓝牙BLE的实际运行效果,接着分析了其主要的程序代码逻辑,详见[MicroPython蓝牙BLE例程实操(一) ]和[MicroPython蓝牙BLE例程实操(二) ]。
其中,构建蓝牙BLE广播报文的函数——advertising_payload是在单独的模块(.py文件)中自己实现的。由此,也从另外一个角度反映出,MicroPython只提供了蓝牙BLE的“低阶”接口:“低阶”到广播报文都需要自己实现,而非系统模块集成。当然,考虑到MicoPython作为一个通用的平台,又运行于资源有限的微控制器上,其只负责最核心的功能,而将业务场景有关的代码实现剥离出来由用户自己实现,似乎也是无可厚非的了。
两个蓝牙设备想要建立连接,首先需要外设设备向外广播,然后中心设备才能搜索到该设备,再发起连接请求。外设设备的广播报文中包含设备的相关信息,比如设备名称,设备具有的服务UUID等等,中心设备可以根据这些信息决定其是不是自己关心的设备,以及要不要发起对该设备的连接请求。
基本的广播数据包格式如下:
![9036ba685fdfd3d69dd9fb408b22162a.png](https://img-blog.csdnimg.cn/img_convert/9036ba685fdfd3d69dd9fb408b22162a.png)
每个广播数据包都是31字节,数据包中又分为有效(significant)数据部分和无效(non-significant)数据部分。其中,无效数据部分全为零,仅仅是为了凑够31字节而存在。而有效数据部分&