从照明、温控、到安保设施,如何让家居和办公环境更加智能?在工业领域,如何扩充传感器网络提高工作效率并降低成本?在大型复杂环境中,如何克服操作的困难实现物资追踪?蓝牙mesh网络解决这些问题有着得天独厚的优势。
何谓蓝牙Mesh?
蓝牙Mesh开创了针对低功耗无线应用的一项全新标准。它将通信范围从单一点对点连接扩展到覆盖大范围的真实Mesh网络拓扑,例如一整栋建筑,这为家居和工业自动化应用铺平了道路。蓝牙mesh网络适用于物联网解决方案的开发人员及系统整合商,能够让多个、甚至成千上万个装置在稳定、安全的环境下进行传输。典型的家居场景包括公寓中的灯光控制或者恒温器调节。尽管蓝牙5在去年年底就发布了,但是蓝牙Mesh可以在任何支持蓝牙4.0或者更高版本的设备上实现,这意味着我们能够很快在市场上看到这项技术的应用。
蓝牙Mesh在Zephyr项目中的实施
Zephyr项目作为专为物联网设备而推出的操作系统,具有模块化、可扩展、开源等优点。目前支持ARM-Cortex-Mx,英特尔X86,ARC,新思 Nios 2和RISC-V等架构,57种主板,为广大开发者提供了丰富的选择机会。在系统不断完善的同时,Zephyr开源社区还吸引了大量开发者采用该系统进行产品设计。
物联网设备要实现互联,所采用的操作系统必须支持多种通信协议。Zephyr操作系统除了支持MQTT,SSL和本地的、优化的IPv4和IPv6双堆栈外,还支持一个完整的蓝牙低能量控制器和一个基于TinyCrypt的加密库。随着蓝牙联盟宣布支持蓝牙mesh,Zephyr操作系统在原来的基础上增加对蓝牙Mesh网络的支持,在Zephyr操作系统中的实施覆盖了蓝牙Mesh堆栈的所有层和大部分可选择功能。
以下列出了这些功能和在哪里可以找到它们的C文件:
• GATT & Advertising bearers (proxy.c & adv.c)
• 网络层(net.c)
• 下层和上层的传输层 (transport.c)
• 访问层(access.c)
• Foundation Models, Server role (health.c & cfg.c)
• 基于 PB-ADV 和 PB-GATT的配置 (prov.c)
• 低功耗节点支持 (lpn.c)
• 中继支持 (net.c)
• GATT 代理 (proxy.c)
一些值得一提的尚无法实施的功能:
• Friend支持 (初始位已经存在于friend.c中)
• Provisioner 支持(对典型Zephyr设备的价值较低)
• 基础客户端模型 (对典型Zephyr设备的价值较低)
• GATT 客户端 (对典型Zephyr设备的价值较低低值)
在未来的版本中我们会看到对一些缺失功能的补充,特别是对Friend的支持。
如何进行Zephyr操作系统的配置?
为了让基于Zephyr操作系统的设备成为功能性mesh节点,需要配置网络安全密匙以及唯一的单播地址。由于(目前)Zephyr操作系统不能充当其它设备的Provisioner,为此必须采用非Zephyr操作系统的实施方案。对于原型设计,可以在应用程序中对地址和密匙进行硬编码,这里有一个示例,可以在mesh演示程序中看到操作如何执行。
在实践中,以下选项在分配及配置基于Zephyr操作系统的设备时是可用的:
• 自我配置(只限于原型,而不是产品级应用)
• Silicon Labs Android Mesh 应用程序
• 蓝牙PTS(用于规范一致性测试)
• BlueZ meshctl工具:将会是下一个BlueZ版本的一部分 (BlueZ 5.47)
• 采用Zephyr OS集成蓝牙Mesh
Mesh网络由相当精细的概念层次结构组成,加入网络的每个设备都被称为一个节点。每个节点由一个或多个元素(elements)组成,这些元素(elements)是mesh网络中独特的可以寻址的实体。每个元素依次有一组所谓的模型,可以是标准的或者是供应商指定的。
本质上,一个模型定义了能够被发送或接收信息所影响的特定状态和行为。Mesh档案规范文件包括一些所谓的基础模型,每个Mesh节点必须支持。
Zephyr项目为这些提供了一个现有的实施,因此应用程序作者需要去做的相关内容很少。应用程序作者仍然需要做的是,要么选择实施合适的标准模型(在mesh网络规范中找到),要么在标准模型不适用时创建定制的供应商模型。
在Zephyr项目中,用BT_MESH_MODEL()宏定义模型。该应用程序提供的参数有:模型标识符、消息处理程序阵列、消息发布内容和可选择的用户数据传递到消息程序处理器。模型依次包含在其它模型数组中,它们一起形成一个元素。要初始化mesh支持,一个应用程序给bt_mesh_init() API调用设备组合(主要是一个元素数组)以及基本的功能配置信息。
为了在需要时插入基础模型(如:在主要元素上),应用程序将会用T_MESH_MODEL_CFG_SRV() 或者BT_MESH_MODEL_HEALTH_SRV() 替代 BT_MESH_MODEL()。
通过对蓝牙Mesh网络的支持,Zephyr操作系统补充了多点对多点通信协议的支持,随着蓝牙Mesh的应用范围不断扩大,Zephyr操作系统对物联网设备提供的技术支持也将更加完善。
原文作者:Johan Hedberg
原文链接:https://www.zephyrproject.org/community/blog/announcing-bluetooth-mesh-support-zephyr-project
关于Zephyr
Zephyr 项目是一款小型且可扩展的操作系统,尤其适用于资源受限的硬件系统,可支持多种架构;该系统高度开源,对于开发人员社区完全开放,开发人员可根据需要对该系统进行二次开发,以支持最新硬件、工具和设备驱动程序;该系统高度模块化平台,可轻松集成任何架构的第三方库和嵌入式设备。