1. 背景

之前大多数BLE设备都是进行一对一的数据通信。这是一种点对点的网络拓扑类型,在蓝牙核心规范中被称为”微微网“(piconet)。
假设一个智能手机与一个心率检测器建立了一个点对点的连接,这样它们之间就可以传输数据了,蓝牙的一个优点就是可以让设备建立多个连接,所以这个智能手机可以再与另一个运动追踪设备建立连接。此时,手机可以同另外两个设备进行通信,而这两个设备之间无法直接进行通信。
与上述情况相反的是,mesh拥有多对多的网络拓扑类型。每台设备都可以与网络中的其他设备进行通信。设备之间的通信以消息的形式传递,一台设备可以将某一台设备发来的消息中继到另一台设备,这样就可以扩展端到端的通信范围,这个范围远超过一个单独设备蓝牙无线电所覆盖的范围。

2. 设备和节点

mesh网络中的单台设备称为节点(node),网络外的设备称为“未开通配置设备”(unprovisioned devices)。将某台“未开通配置设备”接入网络成为网络节点的过程称为“开通配置”(provisioning)。例如,新买的带有mesh功能的蓝牙灯,需要进行简单配置才能将其加入家中原有的蓝牙mesh网络中,这样就可以通过家里的电灯开关与调光器对其进行控制了。这个过程就是“开通配置”。
“开通配置”过程是每台新设备都要经历的,在这个过程中,新设备会获取一系列的密钥,同时告知“启动配置设备”(provisioner device, 通常是智能手机或者平板电脑)有新设备加入到网络中。其中有一个密钥叫做网络密钥,即NetKey,这个是为了提高mesh的安全性,后续会讲解。

3. 元素

有些节点由多个独立的部分组成,每一个部分都可以进行单独的控制。在蓝牙mesh中,这些独立的部分称为元素(element)。如图1,网络中的一个灯节点,它有5个元素,每个LED灯泡有一个元素。每个节点至少拥有一个元素,称为主元素(Primary Element)。节点中的每个元素都有一个唯一确定的地址,称为单播地址(unicast address),这样每个元素都可以独立寻址。

4. 消息

当某个节点需要获取其他节点的状态时,或需要以某种方式控制其他节点,它会发送消息(message)。如果某节点需要向其他节点汇报状态,它也会发送消息。在mesh网络中,所以通信都是以消息的形式传递的。协议规范中定义了多种消息类型,每种消息类型都有自己唯一的操作码。
对于应答与否的方面,消息可以分为两种类型:需要应答和不需要应答。需要应答的消息要求接收节点接收到消息后返回一条响应信息。这条响应信息有两个作用:

  1. 告知消息发送方,消息已接收。
  2. 返回消息接收方需要告知发送方的某些数据。
    需要应答的消息如果没有得到响应,则可能会被发送多次,所以这种消息必须具有幂等性。幂等性意味着这种消息不论到达接收节点多少次,与其到达接收节点一次产生的效果都是相同的。否则如果因为某些意外,消息多次到达接收节点,则有可能使接收节点的状态变得不确定。
    不需要应答的消息不要求接收者发送响应消息。
    某个特定类型的消息可以对一个或多个状态值进行操作。消息也可以分为3类:GET、SET、STATUS,对应于蓝牙mesh网络支持的3种操作。
    GET消息可以用来向一个或多个节点请求状态值,之后,相应节点会返回STATUS信息,告知请求的状态值。
    SET消息可以改变既定状态的值,有些SET消息需要应答,要求返回一条STATUS消息,有些消息不需要应答。
    STATUS消息可以用来应答GET消息,也可以用来应答SET消息或者通过某元素中的定时器定时发送。
    我们可以通过消息操作码(opcode)识别到特定状态。另一方面,我们也可以在通用属性相关消息中使用16位属性ID来直接引用属性。

5. 地址

消息必须从一个地址发送到另一个地址。蓝牙mesh协议中定义了3种地址(不包括未分配地址)
单播地址用于唯一确定单个元素。在“开通配置”过程中,会将单播地址赋给设备。
群组地址是一种多播地址,它可以代表一个或多个元素。群组地址要么是动态分配的,要么是蓝牙技术联盟预先定义的(SIG固定群组地址)。蓝牙技术联盟已经定义了4个固定群组地址,即All-proxies,All-friends,All-relays及All-nodes。我们可以通过配置应用程序来建立动态群组地址,这些地址反映了一栋建筑的某些实体分配,例如为大楼里的每一个房间定义一个群组地址。
虚拟地址可以赋给一个或多个元素,横跨一个或多个节点。虚拟地址与128位UUID的形式类似,任何元素都可以与其相关联,它更像一个标签。
虚拟地址可以在出厂前就进行预先配置,然后用于某些特定场景,例如使某个厂商制作的投影仪的寻址更加方便。

6. 状态和属性

元素可能处在各种条件下,在蓝牙mesh中称之为状态(state)。一个元素可以有多个状态,每个状态都是一组特定值。状态与特定的行为有关,不能在其他地方重用。
例如,蓝牙mesh定义了通用开关状态来形容某个电灯可能存在的状态,为其赋值1,电灯打开,为其赋值0,电灯关闭。
属性(property)与状态类似,它们都包含与元素相关的数值,但在其他方面二者存在显著差异。
熟悉BLE的朋友应该了解特性(characteristic),它们是一种没有与特定行为相联系的数据类型,这样它们就很容易得到重(chong)用。利用上面提到的属性,可以将特性与具体含义相联系。有一点需要特别注意,这里的属性(property)与BLE协议栈中的属性(attribute)是完全不同的,为了防止混淆,我们也可以将前者翻译成“性质”(property)。

7. 模型

模型将之前提到的概念组合在一起,定义了元素的功能。当前蓝牙mesh规范中一共定义了3类模型。
第一种是服务器模型(server model),定义了一系列的状态、状态转换、状态绑定以及模型中元素可以收发的消息。同时它也定义了与消息、状态、状态转换相对应的行为。
第二种是客户端模型(client model)没有定义任何状态,它只定义了几种消息。可以利用这些消息来对相应服务器模型中的状态进行操作,如GET、SET和STATUS。
第三种是控制模型(Control model)包含一个服务器模型和一个客户端模型。服务器模型可以用来与其他客户端进行通信,而客户端模型可以用来与其他服务器模型进行通信。
可以通过扩展某个模型来创建新的模型。不过有一种模型不能扩展,这种模型称为root模型。
模型不能被改变,也就是说不能向模型中加入或移除相关行为。实现新模型的唯一方法就是扩展已经存在的模型。

8. 特性

所有的节点都可以发送和接收mesh消息,但是也可以单独赋予某些节点额外的特性,使其拥有某些特定功能。一共有四种特性可以选择:中继(Relay)、代理(Proxy)、友(Friend)和低功耗(Low Power)特性。每个节点都可以支持以上四种特性中的0个或者多个,而且随时可以取消已经配置好的特性。

蓝牙mesh基础(基本概念)相关推荐

  1. 自己动手实现蓝牙MESH应用系列 | 第一篇:蓝牙MESH基础概念介绍

    文章目录 1. 前言 2. 概述 2.1. 蓝牙风格(Flavors) 2.2. mesh网络的动机 2.3. mesh网络中的消息传输方式 2.3.1. 以消息为中心的通信 - 发布/订阅(publ ...

  2. 蓝牙Mesh的基本概念

    蓝牙mesh简介 蓝牙Mesh的基本概念   蓝牙Mesh是基于ble广播进行消息传递的一种蓝牙组网通讯网络,是一种采用网络洪泛的方式无中心.无路由的对等网络.以实现蓝牙设备与蓝牙设备之间的多对多通讯 ...

  3. 蓝牙Mesh基础 (1)蓝牙Mesh简介

    蓝牙Mesh简介 蓝牙Mesh诞生 蓝牙Mesh特点 蓝牙Mesh应用场景 蓝牙Mesh诞生 蓝牙 Mesh脱胎于CSR倡导的私有协议-CSR Mesh,该技术诞生于2014年.蓝牙技术联盟于17年7 ...

  4. 蓝牙mesh基本概念讲解

    https://blog.csdn.net/JaLLs/article/details/88864829 1.蓝牙MESH基本概念 网状网(mesh) Mesh网络,就是一个多对多网络(Many to ...

  5. 蓝牙mesh网络基础

    蓝牙mesh网络基础 转载于:https://blog.51cto.com/11534544/2044130

  6. 蓝牙mesh组网实践(配网基础篇)

    转载自:蓝牙mesh组网实践(配网基础篇) - JayWell - 博客园 (cnblogs.com) 本测试基于CH582m单片机,尝试进行简单的组网. 沁恒官方EVT中提供了两种配网方式--配网器 ...

  7. 【转载】浅谈蓝牙 Mesh 组网技术

    本文转载自 Eren:https://www.erenship.com/posts/63c7.html 蓝牙技术联盟官方网址:https://www.bluetooth.com/zh-cn/ 蓝牙技术 ...

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

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

  9. 认识蓝牙mesh模型

     什么是蓝牙mesh模型? 根据蓝牙mesh术语表所述: "模型(Model)--定义的是一系列状态.状态转换.状态绑定.消息和其他相关性能的集合.节点中的元素必须支持一个或多个模型,并且模 ...

最新文章

  1. 4kyu Twice linear
  2. Python_sqlalchemy之多对多建表
  3. 区域和裁减区域-Window GDI
  4. win7系统电脑自动重启解决方法
  5. 微软在Build 2016开发者大会中发布 “认知服务”,牛津计划有正式名字啦!
  6. 容器化单页面应用中RESTful API的访问
  7. 《学习OpenCV3》第10章 滤波与卷积
  8. 使用“swap技巧”除去多余的容量
  9. mysql可以装到其他端口吗_linux下怎么在另一个端口安装高版本mysql
  10. 管家婆 凭证查找 Date exceeds maximum of 19-12-31 报错解决办法
  11. Java并发编程:03-多线程并发下载器, 支持断点下载(手写不限速的迷你版迅雷)
  12. java update是什么_javaupdate是什么_tbupdate
  13. java-net-php-python-2020ssm考研题目管理系统计算机毕业设计程序
  14. 【知识图谱】语义网络,语义网,链接数据和知识图谱
  15. Excel的官方网站
  16. ubuntu系统上安virtualbox虚拟机装win10一路踩坑
  17. 自适应流媒体传输-fmp4
  18. 快消品企业营销费用管理的困惑
  19. python运行github项目_从gitHub上拉取并运行项目
  20. 短视频程序源码高仿马蜂窝旅游头像泡泡动画

热门文章

  1. kerberos学习
  2. 2019榆次初三计算机考试时间,2019晋中中考总分是多少 录取分数线是多少
  3. 两种复试方案!这所大学发布考研复试相关通知!
  4. svg格式文件android,在Android中显示SVG文件
  5. 系统性能优化5000 字干货
  6. 手势控制arduino-wifi小车(含代码)
  7. 手把手教你安装虚拟机(官网下载VMware)
  8. Ubuntu 20.04 没有DSL连接
  9. 现代科技概论_现代科技概论课程:天文与宇宙2
  10. 得实Dascom TL-220Z 打印机驱动