目录

使用配网器配网方式:

在之前的文章中介绍了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. 【LeetCode链表#9】图解:两两交换链表节点

    两两交换链表中的节点 力扣题目链接(opens new window) 给定一个链表,两两交换其中相邻的节点,并返回交换后的链表. 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 思路 ...

  2. 对象的反序列化流_ObjectInputStream类

    对象的反序列化流_ObjectInputStream类 ObjectInputStream反序列化流,将之前使用ObjectOutputStream序列化的原始数据恢复为对象. 构造方法 public ...

  3. Windows10下yolov8 tensorrt模型加速部署【实战】

    Windows10下yolov8 tensorrt模型加速部署[实战] TensorRT-Alpha基于tensorrt+cuda c++实现模型end2end的gpu加速,支持win10.linux ...

  4. 9月21日内容总结——计算机基础知识、typora软件的安装与软件内的部分markdown语法

    今日内容总结 目录 今日内容总结 一.路径 1.绝对路径 2.相对路径 二.计算机的本质 三.计算机的五大组成部分 1.控制器 2.运算器 PS:CPU=控制器+运算器 3.存储设备 4.输入设备 5 ...

  5. 为什么 Linux 需要虚拟内存(转载)

    为什么 Linux 需要虚拟内存 原文链接: https://draveness.me/whys-the-design-os-virtual-memory/ 操作系统中的 CPU 和主内存(Main ...

  6. axios设置全局headers

    需求:每次请求的时候都设置token为headers非常不方便 axios提供配置全局headers 这里我主要使用的是加 一个token验证 Global axios defaults axios. ...

  7. 计算机网络基础09 TCP/IP

    https://www.jianshu.com/p/066d99da7cbd 1 概念 TCP/IP[TCP(传输控制协议)和IP(网际协议)]提供点对点的链接机制,将数据应该如何封装.定址.传输.路 ...

  8. Jest + React 单元测试最佳实践

    我们是袋鼠云数栈 UED 团队,致力于打造优秀的一站式数据中台产品.我们始终保持工匠精神,探索前端道路,为社区积累并传播经验价值. 前言 单元测试是一种用于测试"单元"的软件测试方 ...

  9. 一文详解SpEL表达式注入漏洞

    摘要:本文介绍了SpEL表达式以及常见的SpEL注入攻击,详细地介绍了部分漏洞攻击实例以及常用的漏洞检测与防御手段. 本文分享自华为云社区<SpEL表达式注入漏洞分析.检查与防御>,作者: ...

  10. C语言排序 冒泡 选择 快排

    冒泡排序 冒泡排序是一种简单的排序算法,其基本思想是重复地交换相邻两个元素,将较大的元素向右"冒泡",较小的元素向左"沉淀",从而将序列中的最大元素逐渐移到最后 ...