蓝牙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-所有节点。
蓝牙mesh组网实践(选择性配网与自配网参数分析)的更多相关文章
- SIG蓝牙mesh笔记2_mesh组成
目录 SIG 蓝牙 mesh 组成 mesh网络概述 网络和子网 设备和节点 devices & nodes 入网 mesh中的几个概念 智能插座例子 SIG 蓝牙 mesh 组成 mesh网 ...
- [蓝牙前沿应用] 照明即平台 —— 通过蓝牙增强服务提高照明投资回报率(蓝牙MESH、定位AoA、AoD)
1.照明即平台(LAAP) 随着照明设施向LED转型,他们也在利用类似于蓝牙MESH的技术,创建一个可连接的照明平台,作为他们建筑的中枢神经系统.这些系统除了提供先进的照明控制,还建立了一个增强版 ...
- 常见无线组网分析(NB-IOT组网和Mesh组网)
NB-IOT LoRa Zigbee WIFI 蓝牙 组网方式 基于现有蜂窝组网 基于LoRa网关 基于Zigbee网关 基于无线路由器 居于蓝牙Mesh的网关 网络部署方式 节点 节点 + 网关 ...
- 蓝牙mesh网络技术的亮点
蓝牙mesh网络技术的亮点 The highlights of Bluetooth mesh networking technology 导言 蓝牙是当今最主要的低功耗无线技术之一,对无线设备用户和开 ...
- 蓝牙mesh介绍
了解一下关于蓝牙Mesh的知识. 蓝牙mesh网络使用,并且依赖于低功耗蓝牙(BLE).低功耗蓝牙技术是蓝牙mesh使用的无线通信协议栈. 蓝牙BR / EDR能够实现一台设备到另一台设备的连接和通信 ...
- 解密蓝牙mesh系列
解密蓝牙mesh系列 https://mp.weixin.qq.com/s/KdVhkgcmHIboA0xPFqFCgQ 1.NRF52832 & NRF52840 BLE mesh 协议栈 ...
- 百度APP移动端网络深度优化实践分享(三):移动端弱网优化篇
本文由百度技术团队“蔡锐”原创发表于“百度App技术”公众号,原题为<百度App网络深度优化系列<三>弱网优化>,感谢原作者的无私分享. 一.前言 网络优化解决的核心问题有三个 ...
- 关于蓝牙Mesh您必须知道的七件事
蓝牙技术联盟于7月19日正式宣布,蓝牙(Bluetooth)技术开始全面支持Mesh网状网络.全新的Mesh功能提供设备间多对多传输,并特别提高构建大范围网络覆盖的通信能力,适用于楼宇自动化.无线传感 ...
- [转]用apache反向代理解决单外网ip对应内网多个web主机的问题
用apache反向代理解决单外网ip对应内网多个web主机的问题 转载一个有独立外网IP,需内网服务器对外发布的例子,是应用apache虚拟主机的. 来源地址:http://www.itshantou ...
- 通过外网IP访问内网
外网服务器:外网IP1,内网IP192.168.2.156 内网服务器:内网IP192.168.2.206 通过访问外网服务器8083端口,转发到内网服务器的8083端口. 在外网服务器设置映射规则: ...
随机推荐
- 推荐一款在浏览器编辑`Blazor`的`IDE`
不知道是否有Blazor用户羡慕过React或者Vue用户,在一些组件库中,它们就提供了在当前的组件预览对于组件的实时编辑并且预览? 比如semi-design的这种 在比如codepen这种 由于B ...
- angular 引入服务报错global is not defined----angular11引入service报错Can't resolve '@core/net/aa/aa.service' in 'D:\pro'
先来说第一个问题:angular 引入服务报错global is not defined 今天遇到一个问题: 我以为是代码问题,排查很久没找到问题所在 angular 引入服务报错global is ...
- centos7笔记本使用iptables服务,将笔记本模拟成为出口路由器 PPPOE拨号+NAT+端口映射
郑州洪水,闲置在家,捣鼓捣鼓 centos7笔记本使用iptables服务,将笔记本模拟成为出口路由器 PPPOE拨号+NAT+端口映射 环境: 1.笔记本单网口,无法做路由网关,手里有个闲置的USB ...
- 移动 WEB 布局方式之 rem 适配布局 ---- 苏宁首页案例制作
一.技术选型 二.搭建相关文件夹结构 三.设置视口标签以及引入初始化样式 四.设置公共common.less 文件 common.less //设置常见的屏幕尺寸大小,修改里面的html 文字大小 / ...
- 12月7日内容总结——jQuery查找标签、操作标签、事件和动画效果,Bootstrap页面框架的介绍和使用讲解
目录 一.jQuery查找标签 基本选择器 层级选择器 基本筛选器 属性选择器 表单筛选器 筛选器方法 二.操作标签 样式操作(class操作) 位置操作 尺寸 文本操作 创建标签 属性操作 文档处理 ...
- evil 控制窗口大小,比快捷键方便
下面是vim原本的支持的键 可以用于 emacs evil ,evil 用这个比用快捷键还方面些 1.纵向调整 :res[ize] num 指定当前窗口为num列num行 :res[ize] +num ...
- Node版本管理工具 - Nvm的下载、安装配置与使用
1.业务背景 不同时期的项目使用的Node版本也不一样,随着版本的更新一直在使用的Node版本也在不断升级,本文介绍一个Node版本的管理工具,可自由切换版本. 2.Nvm下载与安装 1)下载 下载地 ...
- UBUNTU18.04安装Pangolin
https://github.com/stevenlovegrove/Pangolin
- ctf 菜鸟杯
web签到 首先最里面的是ctfshow-QQ群:,而他需要进行cookie传参,因此我们需要在cookie传入CTFshow-QQ群=a,然后就要以POST方式传入a的值,我们传入a=b,而b是以G ...
- 使用 Three.js 的 3D 制作动画场景
推荐:将 NSDT场景编辑器 加入你的3D开发工具链. 由于 GSL 语法的复杂性,对于许多开发人员来说 WebGL 是一个未知的领域.但是有了 Three.js,在浏览器中 3D 的实现变得简单.下 ...