目录

使用配网器配网方式:

在之前的文章中介绍了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-所有节点。

蓝牙mesh组网实践(选择性配网与自配网参数分析)的更多相关文章

  1. SIG蓝牙mesh笔记2_mesh组成

    目录 SIG 蓝牙 mesh 组成 mesh网络概述 网络和子网 设备和节点 devices & nodes 入网 mesh中的几个概念 智能插座例子 SIG 蓝牙 mesh 组成 mesh网 ...

  2. [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)

      1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...

  3. 常见无线组网分析(NB-IOT组网和Mesh组网)

      NB-IOT LoRa Zigbee WIFI 蓝牙 组网方式 基于现有蜂窝组网 基于LoRa网关 基于Zigbee网关 基于无线路由器 居于蓝牙Mesh的网关 网络部署方式 节点 节点 + 网关 ...

  4. 蓝牙mesh网络技术的亮点

    蓝牙mesh网络技术的亮点 The highlights of Bluetooth mesh networking technology 导言 蓝牙是当今最主要的低功耗无线技术之一,对无线设备用户和开 ...

  5. 蓝牙mesh介绍

    了解一下关于蓝牙Mesh的知识. 蓝牙mesh网络使用,并且依赖于低功耗蓝牙(BLE).低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈. 蓝牙BR / EDR能够实现一台设备到另一台设备的连接和通信 ...

  6. 解密蓝牙mesh系列

    解密蓝牙mesh系列 https://mp.weixin.qq.com/s/KdVhkgcmHIboA0xPFqFCgQ 1.NRF52832 & NRF52840 BLE mesh 协议栈 ...

  7. 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇

    本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...

  8. 关于蓝牙Mesh您必须知道的七件事

    蓝牙技术联盟于7月19日正式宣布,蓝牙(Bluetooth)技术开始全面支持Mesh网状网络.全新的Mesh功能提供设备间多对多传输,并特别提高构建大范围网络覆盖的通信能力,适用于楼宇自动化.无线传感 ...

  9. [转]用apache反向代理解决单外网ip对应内网多个web主机的问题

    用apache反向代理解决单外网ip对应内网多个web主机的问题 转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的. 来源地址:http://www.itshantou ...

  10. 通过外网IP访问内网

    外网服务器:外网IP1,内网IP192.168.2.156 内网服务器:内网IP192.168.2.206 通过访问外网服务器8083端口,转发到内网服务器的8083端口. 在外网服务器设置映射规则: ...

随机推荐

  1. angular组件共用服务打印日志父子组件传值2创建服务注入

  2. angular8实现前端携带cookie发送给后端+nodejs获取前端发送的cookie

    1.前端测试代码angular8 // 测试代码 testCookie() { const url = 'http://10.11.11.11:3000/test/cookie' const para ...

  3. Kubernetes(k8s)密码管理:Secret

    目录 一.系统环境 二.前言 三.Secret概览 四.Secret 的类型 五.各种类型的secret使用实例 5.1 创建kubernetes.io/service-account-token类型 ...

  4. MyBatis的使用七(处理表与表之间的关系)

    本文主要讲述mybatis的处理表与表之间的关系 一. 介绍t_emp和t_dept表 1. t_emp表结构 2. t_dept表结构 二. 数据表的关系 1. 阐明关系 一个部门可以有多个员工,但 ...

  5. 关于C#中async/await的用法

    一直对c#中async/await的用法模模糊糊,不太清晰,今天写了一下Demo彻底明确一下async/await的用法,以免因为对其不了解而对后期的业务产生影响(比如事务导致的锁表等等). 1. 首 ...

  6. QuartzNet在winform中使用(目前版本3.6)

    界面图"没有什么技术含量~   不过还是有部分人不太了解的 接下来一一解析下,勿q 使用步骤: 1.初始化帮助类 QuarztHelper x = new QuarztHelper(); 2 ...

  7. react无效渲染优化--工具篇

    壹 ❀ 引 本文属于我在公司的一篇技术分享文章,它在我之前 React性能优化,六个小技巧教你减少组件无效渲染一文的基础上进行了拓展,增加了工具篇以及部分更详细的解释,所以内容上会存在部分重复,以下是 ...

  8. v-html渲染页面的时候 css样式无效

    感谢: https://www.cnblogs.com/niuxiaoxian/p/9443873.html 当我们用v-html渲染页面的时候会发现样式并没有添加上,如下 复制代码 <temp ...

  9. Vue29 自定义事件及消息总线

    1 简介 组件自定义事件是一种组件间的通信方式,方向是 子组件====>父组件. 使用场景:A是父组件,B是子组件,如果要把B的数据传给A,可以使用props加回调函数实现或者自定义事件实现. ...

  10. Java前后端请求Content-Type与接受方式

    1.Get Get方法没有请求体,所以加不加Content-Type没有意义. 参数通过拼接到Url来加入 url?key=value&key2=value2 SpringMVC后台如何获取参 ...