蓝牙mesh组网实践(选择性配网与自配网参数分析)

目录

使用配网器配网方式:

在之前的文章中介绍了CH582单片机在蓝牙mesh组网中的两种配网方式,有介绍到:未配网设备不能选择被哪个配网器配网,配网器可以选择给哪个未配网设备配网。接下来介绍在哪里可以有选择配网。

BLE中有相对完善的黑白名单机制,可惜蓝牙mesh并没有沿用或是发展黑白名单,只能在收到配网信标时,由用户来判断是否给设备配网,也就意味着用户需要知道配网信标广播中的UUID的含义,或者说用户需要自定义UUID。

可以看看阿里的可以与天猫精灵交互的智能灯UUID是如何规定的。该UUID设置可以在天猫精灵相关的例程中见到。可以发现天猫精灵规定的UUID中的每个字节都有特定的信息。如下图↓

 

 

开启了FLASH存储功能的设备在上电后,先会检查一下FLASH中是否存储有已配网信息,若有,会恢复网络信息,无需再配网即可通信;若无配网信息,则会广播配网信标。配网器在与未配网设备直连的距离内会收到配网信标并进入配网流程。收到配网信标后进入如下函数↓

进入unprov_recv函数后就可以对UUID进行分析,在调用协议栈配网函数之前return即可。举个例子,我只想要对UUID[7]为0x01的设备进行配网,那么可以在配网之前加两行代码↓

 

判断为需要进行配网的设备后,由协议栈管理进行配网的代码为下图中的函数,执行到这一步是实际进行配网↓

 

使用自配网方式:

自配网方式需要用户对网络节点有一定的管理能力。582最新EVT中的代码中有手机配网例程,手机传递配网参数是走的BLE,芯片收到配网数据后,还是执行自配网流程,不会与配网手机进行mesh协议中的配网连接。配网器代码中也用到了自配网。配网器配网前,需要先有一个网,之后配网器才好将其他节点纳入自己的网络。配网器“先有一个网”的过程也是自配网过程。详细讲讲各参数的作用。

self_prov_net_key:网络密钥。在不连外设的自配网例程中,该16字节的网络密钥可以划分网络范围。若要组建互不相通的两个网络,需要这里的16字节的NetKey不相同。

self_prov_dev_key:设备密钥。可以加密配网器与节点间的通信,比如说可以给指定设备修改网络配置,对其他设备保密。在自配网方式中没有配网器,可以不管这个参数。

self_prov_app_key:应用密钥,与模型层的模型绑定使用。不同的模型之间应用密钥不同,则无法通信。只使用官方提供的透传模型,该参数可以不用管。数据从模型一层层地打包至成为一则广播消息的过程中需要经过AppKey和NetKey两层加密。

self_prov_net_idx:自配网NetKey的索引,这个变量只在自配网时用到。16位的索引与16字节的完整的NetKey一一对应,在传参的时候可以更简洁方便。若无需划分子网,此值保持默认值即可。需要划分子网时,需要分配更多NetKey,比如说一个节点既在主网中,又在子网中,两者各有一个NetKey,这时候用一个16位索引比如说0x0001就可以指向子网的NetKey。子网NetKey由协议栈在其他地方处理,可以理解为有一个二维数组存放更多的NetKey(实际上协议栈在底层的处理不太一样),在self_prov_net_key这个一维数组中没有体现多个NetKey,只不过self_prov_net_idx为0时指向self_prov_net_key。

self_prov_app_idx:同上,添加更多应用密钥后这个索引值会有指向其他应用密钥的作用。

self_prov_iv_index:IV值在使用自配网方式时需要与现有网络中的IV值保持一致。最好现有网络中能留个反馈途径,比如说过按下按键通过串口打印一下IV值,反馈一下当前网络中的IV值,接下来的节点按该值配网。

self_prov_addr:节点主元素的地址。仅使用例程的话,每个节点只有一个元素即主元素。若用户自行配置,在一个节点上配置多个元素比如说1个主元素和3个其他元素,那么需要预留主元素的地址之后的依次3个地址,供其他元素使用。

self_prov_flags:表示网络中的IV值正在更新。置位该标志的节点意味着其收到了IV值更新的信号,待更新,会用当前与即将更新即+1的IV值尝试解析消息。

vendor_sub_addr:订阅地址,可使用范围为0xC000~0xFEFF。添加了订阅地址后,可以理解为节点会接收某个用于组播的地址。订阅地址可以不使用,在app.c中注释掉cfg_local_net_info函数中的添加订阅地址相关代码块即可。0xFF00到0xFFFF的组播地址保留给固定用途。另有四个mesh协议中规定的组播地址:0xFFFC-所有proxy代理节点、0xFFFD-所有朋友节点、0xFFFE-所有使能转发中继功能的节点、0xFFFF-所有节点。

posted @ 2022-05-20 15:30  JayWell  阅读(2013)  评论(0编辑  收藏  举报