mesh蓝牙 网络地址如何写死

有设置节点网络地址的接口吗,找遍工程也只发现配网完成接收到网络地址。

static void prov_complete(uint16_t net_idx, uint16_t addr, uint8_t flags, uint32_t iv_index),

在adv_vendor_self_provision工程网络地址写死为1,如果我想要根据mac地址来自己定网络地址该怎么设置。


您好,是用的哪种方式配网呢。

如果是中心节点配网,未配网节点无法选择自己的网络地址,因为未配网节点无法得知网络中已存在哪些网络地址,而中心节点保存了所有节点的网络地址,故未配网节点要被动接受中心节点的分配。

如果是自配网方式,如在adv_vendor_self_provision工程中,例程代码中固定为1,在代码:const uint16_t self_prov_addr = 0x0001;处设置。自配网的函数为 bt_mesh_provision(self_prov_net_key, self_prov_net_idx, self_prov_flags, self_prov_iv_index, self_prov_addr, self_prov_dev_key);

标准mesh中网络地址是16位的,如果需要根据MAC地址自己定网络地址,可以自拟算法,将6字节的MAC地址转换到2字节的网络地址self_prov_addr中,注意规避网络地址重复的情况。在已配网的情况下,也可以调用bt_mesh_reset重置一下mesh网络信息,再次运行到bt_mesh_provision配网函数时修改网络地址参数。我司另有非标准的库及自配网demo,用6字节MAC地址替换掉2字节网络地址,配合芯片自带的硬件MAC,可以规避网络地址重复,需要的话留个邮箱获取。


只有登录才能回复,可以选择微信账号登录