SYD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机、32位ARM Cortex-M0处理器、128kB Flash存储器、以及丰富的数字接口。SYD8801片上集成了Balun无需阻抗匹配网络、高效率DCDC降压转换器,适合用于可穿戴、物联网设备等。具体可咨询:http://www.sydtek.com/

本文转载于:https://mp.weixin.qq.com/s/nzF6r4z67mgPLBPDdWKyuQ

这里只是为了方便学习,绝无抄袭之意!

解密蓝牙mesh系列 | 第七篇

原创2017-10-19 小码哥蓝牙技术联盟

蓝牙mesh网络

市场上的低功耗蓝牙设备

低功耗蓝牙

低功耗蓝牙(Bluetooth Low Energy)是一项相当成功的无线技术。如今已经很难找到不支持低功耗蓝牙的智能手机或平板电脑了。可以说它是可穿戴技术兴起的关键因素。在医疗设备、智能家居设备、传感器等很多设备中,低功耗蓝牙的身影随处可见

目前有数十亿支持低功耗蓝牙的设备已投入使用。那么,这些设备都能成为蓝牙mesh网络的一员吗?这也是本文将会回答的问题。知道你已经迫不及待,早想对着电脑屏幕、平板电脑或手机大喊“天呐,快告诉我吧!”, 我就不卖关子啦:

答案就是YES。

低功耗蓝牙设备只要具有正确的低功耗蓝牙功能和一些附加软件,就能加入蓝牙mesh网络中。以智能手机为例,可能只需要一个可以与蓝牙mesh网络对话的普通应用程序(App)就足够了。换句话说,这是任何开发者都能编写的应用程序。

未来充满无限可能性,现在就让我们一探究竟吧!

承载层(bearer layer)

要了解非mesh低功耗蓝牙设备如何成为蓝牙mesh网络的一员,我们需要回顾一下蓝牙mesh协议栈(见 《解密蓝牙mesh系列 第二篇》)。

图 1 – 蓝牙mesh协议栈

蓝牙mesh网络采用低功耗蓝牙作为其射频通信协议栈。而具体如何使用,则是蓝牙mesh网络协议栈最底层的承载层需要负责的工作。

目前定义了两个承载层:广播承载层 (advertising bearer)和GATT承载层 (GATT bearer)。蓝牙mesh网络设备默认使用的是广播承载层,它负责在低功耗蓝牙广播数据包内收发蓝牙mesh数据包。

具有低功耗蓝牙协议栈、能够进行广播和扫描的设备具有基本的、必备的低功耗特性,因此能够支持广播承载层、乃至完整的蓝牙mesh网络协议栈。

既不支持也无法升级使用广播承载层的设备,则必须使用GATT承载层。使用GATT承载层时需要将蓝牙mesh协议数据单元(PDU)封装在代理协议(Proxy Protocol)中,我们将在下文中对此进行详细介绍。

节点与特性

成为蓝牙mesh网络中一员的设备被称为节点(Node)。很多种产品类型都能够成为节点:照明灯、灯具开关、温控器、窗锁、占用传感器等。然而,无论产品类型如何,节点都可能提供某些超出其产品本身功能的特定蓝牙mesh网络服务。

蓝牙mesh规格定义了节点可能拥有的特性。具有这些特性中的一个或多个,即表示节点可以在网络中扮演相应的特殊角色。定义的特性包括:

中继(Relay)

中继节点可通过广播承载层,接收并重新发送蓝牙mesh消息。中继特性能让蓝牙mesh消息在设备之间实现多次跳跃,传送距离可超过两台设备之间直接进行无线电传输的范围,从而覆盖整个网络。

好友(Friend)

好友节点能够存储发往相关低功耗节点的消息,随后再进行转发。

低功耗节点 (LPN)

低功耗节点功率受限,可借助好友节点的支持,在蓝牙mesh网络中有效地运作,借此大幅降低空占比。

代理(Proxy)

代理节点可通过承载层(广播承载层或GATT承载层)接受信息,并通过另一个广播承载层或GATT承载层重新发送消息。

代理节点(Proxy Node)

图 2 – 代理节点

非mesh低功耗蓝牙设备成为蓝牙mesh网络成员的过程中,代理节点是关键。代理节点的根本目的是执行承载层转换。它能够实现从广播承载层到GATT承载层的转换,反之亦然。因此,不支持广播承载层的设备可通过GATT连接来收发各类蓝牙mesh消息。

节点可通过在特性字段中设置代理特性位(proxy feature bit),来表示自身可用作代理节点。特性字段是所有节点都具有的成分数据状态的一部分。

蓝牙mesh代理服务

代理节点(Proxy Node)可实施称为mesh代理服务的GATT服务,即本文中的“代理服务器(Proxy Server)”。mesh代理服务包含两个GATT特性:mesh代理数据输入和mesh代理数据输出。代理客户端(Proxy Client) 使用“GATT Write Without Response”子程序,将代理协议(见下图)PDU写入mesh代理数据输入特性,并从GATT通知中的mesh代理数据输出特性接收代理协议PDU。这就是互联GATT设备通过代理节点在蓝牙mesh网络中进行数据交换的机制。

图 3 – 代理服务器与代理客户端

发现代理节点

低功耗蓝牙设备使用GAP广播来帮助其他设备发现自己。蓝牙mesh代理节点使用完全相同的技术,即通过“GAP可连接型广播(connectable advertising)数据包”,对自身的可用性、可作为代理节点的角色、及其身份进行广播。

GAP广播数据包中包含各类字段,称为广播类型(AD Type)。核心规格附录中对广播类型进行了定义。代理节点会在广播数据包中包含以下字段:

广播类型

注释

标识

表示通用可被发现模式(General Discoverable Mode)

完整的16位服务UUID列表

不完整的16位服务UUID列表

包括mesh代理服务的UUID

服务数据

包含与mesh代理服务相关的数据,可识别该代理是在为哪个网络或节点所提供服务

表 1 – mesh代理广播

服务数据广播类型的内容还需经过进一步检查。

服务数据字段

注释

识别类型

此字段中的值能够正确解释“识别参数”字段的内容。

0x00:网络ID(Network ID)类型

0x01:节点标识(Node Identity)类型

识别参数

可以是网络ID或节点标识,具体取决于识别类型

网络ID是从网络密钥(NetKey – 参照《解密蓝牙mesh系列 | 第六篇》)派生而来的唯一公共标识符。节点标识由代理服务器节点的单播地址和网络标识符的组合派生而来,例如启用该标识的子网的网络ID。

如果代理服务器是多个子网的成员,则它将对包含每个子网的网络ID广播数据包进行交替操作,每次处理一个广播数据包。

节点标识广播的主要用途是将启动配置设备(Provisioner)快速连接至刚刚完成启动配置的节点,从而完成新节点的配置。

代理协议

代理客户端和代理服务器使用代理协议进行通信,并向对方发送代理PDU。这些PDU就像是存放各类蓝牙mesh PDU的容器。

蓝牙mesh接入消息使用核心蓝牙mesh协议栈,因此消息包含在网络PDU内。网络PDU可被封装在代理PDU中。

蓝牙mesh配置文件规格中定义了各种Beacon,包括未经启动配置的设备Beacon、以及安全网络Beacon。可通过代理协议将蓝牙mesh Beacon纳入网络。

启动配置过程涉及其自身协议,且启动配置PDU也可在代理PDU内进行交换

最后,代理客户端和代理服务器可以交换特殊的代理配置消息,这些消息也可被封装于代理PDU中。

大多数类型的mesh数据可使用代理协议进行交换,因此可通过连接至代理节点的GATT客户端进行收发。

不同设备代理PDU的大小各异,PDU的大小是根据低功耗蓝牙属性协议(ATT)的最大传输单元(MTU)进行动态设置的,这是通过GATT连接来传输代理PDU的基础。此外,代理协议可以将完整的蓝牙mesh消息封装在代理PDU或多段消息的各个段中,借此来容纳较长的蓝牙mesh消息。

需要注意的一点是,任何蓝牙mesh节点(而非只有代理节点)都可以实施代理协议,从而支持基于GATT连接的直接交互。这在启动配置(provisioning)场景中非常有用。

关于代理协议的更多信息,包括代理PDU的格式,可参考蓝牙mesh配置文件规格: https://www.bluetooth.com/specifications/mesh-specifications

代理过滤器和代理配置

代理客户端可通过对代理服务器所应用的过滤器进行配置,对接收到的网络流量进行精确的控制。过滤器采用白名单和黑名单的形式,同时这些名单会指定各自的目标地址列表。列表中的地址可能是其所支持的地址类型的任意组合,即单播、群组或虚拟地址。如果消息的目标地址未包含在白名单过滤器中,则消息会被代理服务器的代理过滤器(Proxy Filter)滤掉。同样,如果消息的目的地包含在黑名单过滤器中,也会被滤过。

代理配置(Proxy Configuration)消息在代理客户端和代理服务器之间进行交换,并实现代理过滤器的配置。

使用低功耗蓝牙智能手机或平板电脑启动配置

通常使用智能手机或平板电脑执行启动配置流程,以将新设备添加至蓝牙mesh网络。大多数此类设备不会实施完整的蓝牙mesh网络协议栈,而且与蓝牙mesh网络进行的所有交互(包括启动配置)都很可能会使用代理协议。如前所述,启动配置PDU可被封装于代理PDU中,因此可通过代理服务器节点、利用GATT连接进行交换。蓝牙mesh配置文件规格中将采用代理协议的启动配置协议称为PB-GATT。

在上期《解密蓝牙mesh系列 | 第六篇》中介绍了启动配置流程,本系列后续文章中将进一步深挖有关启动配置安全性的细节问题。

借助代理节点使用代理协议时需要注意什么?

智能手机等设备要想通过代理节点、借助代理协议与蓝牙mesh网络通信,则必须扫描并连接至代理节点。换句话说,它必须支持GAP中央设备的角色。

此外,必须首先对智能手机进行启动配置。如果未经启动配置,任何设备都无法与蓝牙mesh网络中的节点进行交互。

结论

通过GATT、代理协议和蓝牙mesh代理节点对当前市场上的低功耗蓝牙设备提供支持,这绝对值得上新闻头条了!它为人们手中已有的海量设备打开了通往蓝牙mesh网络世界的大门,光是想想就觉得令人兴奋了呢!你也有同感吗?留言告诉我吧~

蓝牙技术联盟EMEA技术项目经理

Martin Woolley

小码哥

点击“阅读原文”, 下载超全mesh技术概览

阅读原文

截图;

转载 解密蓝牙mesh系列 | 第七篇【低功耗蓝牙】【承载层(bearer layer)】【节点与特性】【代理节点(Proxy Node)】【蓝牙mesh代理服务】【发现代理节点】【代理协议】相关推荐

  1. 转载 解密蓝牙mesh系列 | 第五篇 【好友(Friend)和低功耗节点(LPN)】【友谊(Friendship)参数】【友谊建立】【友谊(Friendship)消息传送】【安全性】【友谊终止】

    YD8801是一款低功耗高性能蓝牙低功耗SOC,集成了高性能2.4GHz射频收发机.32位ARM Cortex-M0处理器.128kB Flash存储器.以及丰富的数字接口.SYD8801片上集成了B ...

  2. 奋斗的小孩系列 FPGA学习altera系列: 第七篇 添加激励及功能仿真操作

    奋斗的小孩系列 FPGA学习altera系列: 第七篇 添加激励及功能仿真操作 作者:奋斗的小孩 郝旭帅(转载请注明出处) 大侠好,欢迎来到FPGA技术江湖,江湖偌大,相见即是缘分.大侠可以关注FPG ...

  3. “睡服”面试官系列第七篇之map数据结构(建议收藏学习)

    目录 1map 1.1含义和基本用法 1.2实例的属性和操作方法 1.2.1size属性 1.2.2set(key, value) 1.2.3get(key) 1.2.4has(key) 1.2.5d ...

  4. java安卓开发 项目实例_Java系列--第七篇 基于Maven的Android开发实战项目

    本篇是基于<Android应用案例开发大全,吴亚峰等著>的项目开发实例源码,其中有些图片,我做了一些修改,用于个人学习,请勿用于商业. 1, 日程管理专家 mvn archetype:ge ...

  5. javascript运动系列第七篇——鼠标跟随运动

    前面的话 运动除了直线运动和曲线运动两种运动形式外,还有一种运动形式是鼠标跟随运动,而这种跟随运动需要用到三角函数的相关内容或者需要进行比例运算.本文将以几个小实例来介绍鼠标跟随运动的相关内容 眼球转 ...

  6. 蓝牙mesh — 解密蓝牙mesh系列文章汇总

    写在前面:转自"蓝牙技术联盟"微信公众号,只为方便学习~相信小码哥和凯哥会理解的~ (转载文章,如有不妥,通知后我会立即删除) 解密蓝牙mesh系列 往期回顾: 1.解密蓝牙mes ...

  7. Android蓝牙开发系列文章-蓝牙mesh(一)

    在<Android蓝牙开发系列文章-策划篇>中我们对蓝牙专题的内容进行整体规划,现在让我们一点点揭开他的面纱~ 本文是关于蓝牙mesh的首篇文章,由好友CSDN博主yk150915提供,在 ...

  8. Android蓝牙开发系列文章-蓝牙设备类型知多少?

    在写<Android蓝牙开发系列文章-蓝牙音箱连接>时,计划细化出一篇讲解蓝牙设备类型的文章,现在它来了~ 阅读其他内容,可以点击<Android蓝牙开发系列文章-策划篇>,或 ...

  9. Android蓝牙开发系列文章-蓝牙音箱连接

    经过一段时间的折腾,我的Android Studio终于可以正常工作了,期间遇到的坑记录在了文章<创建Android Studio 3.5第一个工程遇到的坑>. 我们在<Androi ...

最新文章

  1. Plyr – 简单,灵活的 HTML5 媒体播放器
  2. linux下批量修改文件名的方法
  3. 代码量减少90%,Java程序员必会的工具库
  4. 程序员羽化之路--假如需要一百万个对象
  5. Jakarta EE中的规范范围
  6. 前端学习(2035)vue之电商管理系统电商系统之形成折线图
  7. 近期国际版概念(5月19日益盟消息回顾)
  8. 操作系统:图文详解 内存映射
  9. 王爽《汇编语言》笔记(详细)
  10. 【游戏开发创新】用Unity等比例制作广州地铁,广州加油,早日战胜疫情(Unity | 地铁地图 | 第三人称视角)
  11. [数据库系统]关系代数表达式的优化算法
  12. 当程序员变成软件项目经理
  13. Excel函数与公式
  14. 这届年轻人,为什么越挣钱越穷?
  15. 2019,入职互联网公司的好时机,你抓住了没?
  16. JavaSE:抽象(abstract)
  17. css自定义盒子形状及动画应用
  18. FatTree胖树拓扑结构
  19. Appium 点击操作梳理
  20. 程序员为维持游戏开发被迫炒股,一年内反赚1600万;雷军退任天星银行董事会主席;华为开源Karmada将捐赠CNCF...

热门文章

  1. python网络爬虫学习资料
  2. 5年1万亿:揭秘中行供应链金融关键词
  3. ubuntu如何关联qq邮箱(亲测可用)
  4. 澳洲服务器拳头账号怎么注册,云顶之弈手游澳服账号怎么注册 澳洲服拳头账号注册方法分享...
  5. 标书导出html,小白不会做标书?老手有这些经验要告诉你!
  6. pdf数据脱敏 如何恢复_不小心删除了磁盘分区,如何将数据恢复?
  7. webpack编译出错You may need an appropriate loader to handle this file type.
  8. CloudXNS探索之旅
  9. URAL 1348. Goat in the Garden 2[求点到线段的距离]
  10. [渝粤教育] 西南科技大学 网站建设与维护 在线考试复习资料