1.设备(Device)

未配网的支持蓝牙Mesh的设备,比如一个刚买回来的灯。也称为“未配网的设备”(unprovisioned devices)。

2.节点(Nodes)

已经完成配网,成为蓝牙mesh中的一部分的设备,成为节点。

3.元素(element)

在设备中可以根据寻址访问到的实体。比如现在有一个插排有三个插孔,这个插排就是一个节点(Node)。如果想到单独控制这个插排的插孔,就需要有三个元素,每个元素对应一个插孔。这样在控制的时候就可以根据元素来进行寻址控制。

4.消息(messages)

如果一个节点需要获取或者控制别的节点,或一个节点想要上报状态时,就需要发送对应类型的消息。在蓝牙Mesh里定义了很多种类型的消息,每种消息都有对应的操作码(opcode)。而根据是否需要应答,消息也分为“需要应答(ack)”和“不需要应答(unack)”。需要应答的消息被目标节点接收到后,需要回复“我收到啦”,告诉发送方信息已经被接收到。如果发送方没有收到应答,则发送方会进行重发。而不需要应答的消息,发出去后就不再管了。

5.地址(address)

地址就跟家里的门牌号是一样的。蓝牙mesh里边定义了四种类型的地址,未分配地址(unassigned address)、单播地址(unicast address)、组播地址(group address)和虚拟地址(virtual address)。而具体的地址分配范围,可以查看第一篇文章。蓝牙Mesh学习总结一(蓝牙Mesh介绍)_qq_34981的博客-CSDN博客

未分配的地址就是还没有进入mesh网络的设备地址。该地址不能用于网络数据的传输。

单播地址是唯一性的地址,可以根据改地址识别到具体的元素。这个地址是在配网的时候分配给设备的。一个mesh网络中可以有32767个单播地址。比如上文说到的一个三孔插排,那每一个插孔,就有一个单播地址。

组播地址是一个包含一个或多个元素的广播地址。组播地址可以有蓝牙SIG来定义(SIG Fixed Group Address),也可以动态分配。目前SIG定义了4个组播地址(All-provies 0xFFFC、All-friends 0xFFFD、All-relays 0xFFFE、All-nodes 0xFFFF)。比如现在一个房间里边有多个灯,如果想要同时控制这个房间里的所有灯的同时亮灭,就需要把这个房间里的灯都分配到一个组里边,根据组播地址来进行控制。组播地址一般被用于元素模型的订阅(Subscribe)和发布(Publish)地址。

虚拟地址一般用法与组播地址类似,虚拟地址是通过Label UUID生成,由0x8000开始到0xBFFF结束,Label有16字节构成,其地址空间无限大,可以弥补组播地址的空间约束性。也可以认为虚拟地址是组播地址的一个扩展。虚拟地址可以使用128位的标签label UUID逻辑上来表示,因为UUID太长,所以使用哈希值来表示这些UUID。一共有16384个哈希值,每个哈希值代表一串虚拟地址。虚拟地址不用集中管理,增加了随意性。

6.发布和订阅(publish / subscribe)

在蓝牙Mesh里面发消息的动作叫做发布(publish)。节点发布消息到单播地址、组播地址或者虚拟地址。节点有兴趣接受这些数据的可以订阅这些地址。

比如上图,开关1发布消息给组播地址“kitchen”,灯1灯2灯3都注册到了"kitchen"这个地址,因此他们都能收到kitchen的消息,就是开关1可以控制灯123。灯3还另外注册到了“Dining room”地址,开关2发布消息到“Dining room”,所以,开关2可以控制灯3。这样做的好出是当需要一些节点添加、删除或者替换的时候,其他节点不用重新配置。比如新买了一个开关,把它配网以后发布到“Kitchen”,那么灯123同样可以被新的开关所控制。

7. 状态(states)

指一个元素(element)下的状态,比如上文中的例子,一个三孔插座,每个插孔就是一个元素(element),而每个插孔的开关,就是一个状态(state)。状态是一个特定类型的值,也对应着相关的动作。比如收到ON的状态,则执行打开动作。

消息与状态之前有一些联系,比如消息有SET、GET和STATUS类型。GET就是获取一个或多个节点的特定状态。当节点收到GET消息后,就发送包含对应状态的STATUS消息。SET消息分为有应答和无应答两种。如果节点收到有应答的SET消息,执行SET的状态后,回复STATUS消息。如果收到无应答的SET,则只执行SET的状态,不回复消息。而STATUS消息除了通过SET和GET获取之外,设备还可以主动上报。比如一个温度传感器,就每隔一段时间自动上报一条STATUS消息。

不同的状态之间可能会有一些关系,比如说一个状态的变化会造成另外状态的触发,这种关系叫做状态绑定。状态的绑定可以是跨model的,也可以是跨元素的。比如灯光亮度状态和开关状态,当把亮度状态改为0,也就触发了开关的“关”状态。

8 属性(priperties)

mesh中元素的属性与BLE中properties的属性大致相同,不同的是mesh中的属性可以让接收者识别出对应的是哪个元素。

绝大部分的mesh消息都是对状态进行操作,只有特别的和属性相关的消息,才会对属性进行操作,而且需要制定16位的属性ID。

9 模式(models)

model定义了一个节点的基本功能。一个节点可以包含多个model。model包含节点所需要的的所有状态。消息会对这些状态进行操作,从而产生相应的行为。

mesh应用使用“发布-订阅(publish-subscribe)”的典型的“服务器-客户端(client-derver)”的架构。在mesh里面,并没有沿用传统的端到端的“profile”的概念,而是定义了三种不同的模式,Client,Server和Control。

Server model定义了states,状态转换state transitions,状态绑定state bindings和包含了哪些消息,当然也同样定义了与这些消息,状态,状态转换相关的行为Behaviors。

而Client model没有定义任何的状态status,但是定义了要收发哪些消息。这些消息是为了GET、SET或者获取在Server models里面定义的状态。比如一个灯元素,Server model中定义和存放灯的状态ON/OFF。而开关定义一个对应的Client model来进行控制。

有一些设备需要执行比较多的操作,比如一个灯光控制器,它可以根据采集外部的光亮变化来控制某些灯的开关。这种情况下,就需要既获取一些元素的状态,同时也需要控制别的元素。这种model在mesh网络中被称为control model(其实就是一个server和client模式的结合)。如下图

10 配网(Provisioning)

配网的全过程包括大概5个步骤:1.Beaconing.2 Invitation.3 Exchanging public Keys.4.Authentication.5.Distribution of the Provisioning Data。

第一步,通过广播包,通知配网者(provisioner)自己需要进行配网。第二步,配网者(provisioner)听到这个Beacon以后,发送一个配网邀请PDU(Protocol Data Unit).需要配网的设备收到邀请后会发送自己的一些配网能力(Provisioning capablities)。第三步,公开交互公钥。第四部,互动随机数的认证。认证完成后,从公钥和设备的私钥中派生出session key。后续的配网信息交互过程就通过session key加密。第五步,分发配网信息。分配给节点地址和Netkey等信息。

11 生命周期TTL(time to live)

Mesh的网络层发送的数据包中,有一个字段TTL,占用7bit。数值从0-127。

0:尚未转发,也不会转发

1:可能已经被转发,但不会被转发

2-126:可能已经被转发,可以被转发

127:还没有被转发,可以被转发

当TTL的值大于1时,每次中继转发后该值会减一,其中一个中继收到的TTL是1的时候就不会再转发。所以最多被转发126次。而TTL值为0,即用在LPN和friend节点之间,不会被中继。

蓝牙Mesh学习总结三(Mesh术语解释)相关推荐

  1. ESP32_WIFI MESH学习笔记4 MESH网WIFI桥接

    ESP32_WIFI MESH学习笔记4 MESH网与WIFI桥接 前言 在PlainlessMEH库的帮助下,我们很容易就建立了一个WIFI_MESH网络,但只是一个单一网络.本文计录使用WIFI ...

  2. 蓝牙Mesh学习笔记(一)

    Mesh系统结构 1 Mesh网络分层 1.1 模型层(Model layer) 1.2 基础模型层(Foundation Model layer) 1.3 接入层(Access layer) 1.4 ...

  3. 蓝牙Mesh学习总结一(蓝牙Mesh介绍)

    1.Mesh简介 Blutooth Low Energy Mesh 是基于低功耗蓝牙技术(BLE)的网状网络解决方案.目前使用的是泛洪网状网络(flooding-based mesh network) ...

  4. ESP32 WIFI MESH学习笔记7-物联网与控制(ESP32部分)

    ESP32 WIFI MESH学习笔记 文章目录 前言 一.服务器部分 二.ESP32部分 1.引入例子 2.修改用户名称及密码 3.初始化IOT登陆信息 4.初始化 5.侦听函数 6.主函数 7.子 ...

  5. 如何学习无线电通联字母解释法和通联术语

    如何学习无线电通联字母解释法和通联术语 本人从14年接触无线电,18年开始正式学习,19年获得A证,21年下半年设台.有将近一年处于守听状态,在22年55节后开始了第一次通联.目前正在准备B证的考试. ...

  6. 安信可PB系列蓝牙模组 APP Ble Mesh组网教程

    文章目录 一.前言 二.硬件准备 三.软件准备 四.AT指令集 五.APP组网示例 六.数据通信 一.前言 本文以PB-02开发板为例,介绍PB系列蓝牙模组通过安卓"PHY Mesh&quo ...

  7. ESP32_WIFI Mesh学习笔记1---Ardino IDE 环境配置

    ESP_WIFI MESH学习笔记1-Ardino IDE 环境配置 文章目录 ESP_WIFI MESH学习笔记1---Ardino IDE 环境配置 前言 一.Arduino IDE配置问题 二. ...

  8. [Unity 学习] - 进阶篇 - Mesh基础系列1:生成网格

    [Unity 学习] - 进阶篇 - Mesh基础系列1:生成网格 本文并非原创,只是本人的学习记录,原文是由放牛的星星老师翻译Catlike系列教程 链接: https://mp.weixin.qq ...

  9. 深度学习(二)——深度学习常用术语解释, Neural Network Zoo, CNN, Autoencoder

    Dropout(续) 除了Dropout之外,还有DropConnect.两者原理上类似,后者只隐藏神经元之间的连接. 总的来说,Dropout类似于机器学习中的L1.L2规则化等增加稀疏性的算法,也 ...

最新文章

  1. 8月份Github上最热门的Python开源项目
  2. UVa11646 - Athletics Track(水题)
  3. element table批量删除_element ui 批量删除
  4. 物联网卡平台系统由几部分构成
  5. Hadoop Hive概念学习系列之hive里的扩展接口(CLI、Beeline、JDBC)(十六)
  6. 压力测试中需要掌握的几个基本概念
  7. 神仙文献管理软件Mendeley 保姆级教程
  8. spring5、springboot和springcloud的区别
  9. java扫描条形码的两种方式
  10. 重心解模糊化matlab,谁能给我个用重心法的MATLAB模糊推理程序
  11. 哈哈,电驴资源 的下载问题
  12. 计算机信函 教案模板,一年级信息技术课教案模板三篇
  13. python读取gif图片并显示_Python爬虫实现获取动态gif格式搞笑图片的方法示例
  14. 专业的在线考试系统,快考题,全面聚集多场景考试业务
  15. @value值获取不到配置文件值
  16. C语言中?:代表什么意思
  17. 不是吧阿sir,你不会还不知道Github可以当做Maven仓库吧
  18. 百度aistudio上使用yolov4训练人脸检测模型
  19. 百度被黑事件,成互联网最热话题
  20. 外壳防护等级(IP等级)

热门文章

  1. 深浪计算机设备有限公司,智能工业计算机(嵌入式工业计算机)
  2. (1.3.3)插入排序:直接插入、交换插入、折半插入
  3. 灰狼算法Matlab
  4. 批量给项目的java文件添加licence文件头
  5. java中比较两字符串是否相等
  6. 使用docx.js生成word
  7. FPGA VGA图片显示(vga_top)
  8. Linux后台运行jar命令
  9. Android Studio 模拟器无法显示的情况 这篇文章可以说是很好的解决了我的问题~
  10. 荣耀的D-Day:跨越科技硬件的“英吉利海峡”