BLE Mesh (9) —— Mesh beacons
前面说的都是在 node 已经入 mesh 网以后的行为,那么一个 node 是怎么入 mesh 网的呢?这里就要分为两个部分来介绍了,一边是,自报家门希望入网的节点,另一边是把这个希望入网的节点拉入伙的设备;
这里我们称,自报家门的节点的行为叫做 Mesh beacons;
另一边,将自报家门节点拉入网络的这个叫做 Provisioner;
本章先讨论 Mesh beacons;
当一个 node 希望加入 mesh 网络,那么首先它需要在空口中通过 ADV 呼喊,并根据指定的格式报告他的自身情况;
1、格式
这个格式直接承载在 ADV 上,也就是 【Length】 +【AD Type】 + 【Payload】 的格式;
其中的 Len 代表了 Payload 的长度;
Type 是 AD Type,这里的 AD Type 指定是 «Mesh Beacon» AD Type 这个是值是多少呢?查看蓝牙的官方网站:
https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile/
可以发现它的值是 0x2B:
0x2B «Mesh Beacon» Mesh Profile Specification Section 3.9
接下来看 Beacon Type:
未入网的设备(node),我们称之为 Unprovisioned Device,所以这里,如果希望被加入 mesh 网络,那么需要设置成为 0x00
注意:Mesh beacon 的 ADV 需要的类型是 non-connectable and non-scannable undirected 类型,即,不可连接,不可扫描,非定向的 ADV
2、Unprovisioned Device beacon
一个希望入网的设备,需要按照第一节的介绍,发送 non-connectable and non-scannable undirected 类型的 ADV,同时 ADV 上承载的数据需要满足 1 中的要求;只有发送这样的 ADV,才能够被 Provisioner (能够邀请其他节点入网的那个 node)发现;那么先来看看这个 Unprovisioned Device beacon 的 Adertising Data Payload 组成(注意,这里只看 Adertising Data Payload 部分,因为前面的 Advertising Data Header 部分已经确定):
可以看到 octet 0 是 0x00,即 Beacon Type 的 Unprovisioned Device beacon 的表达值;
接着跟了一个设备的 Device UUID 用于标记当前 Advertising 的唯一设备号;
OOB Information 用于在加入 mesh 网络过程中指明可用的 OOB data:
OOB:Out of Band 带外的意思,就是不通过 LE 来传输东西,有些东西,比如 Key 这些;
URI Hash:是可选的部分;
当一个设备发出这种 Advertising 的呐喊的时候,Provisioner 识别后,便可以邀请它入网;