docs/zh_CN/api-guides/esp-ble-mesh/ble-mesh-architecture.rst
:link_to_translation:en:[English]
本文档将介绍 ESP-BLE-MESH 的架构概览、架构实现和辅助程序。
ESP-BLE-MESH 架构概览
ESP-BLE-MESH 架构实现
ESP-BLE-MESH 辅助程序
目前,ESP-BLE-MESH 已经实现了 Mesh Profile 的大多数功能及 Mesh Model 规范中定义的所有 Client Model。未支持的功能/模型尚在开发中,会尽快提供。ESP-BLE-MESH 已通过 Bluetooth SIG 蓝牙技术联盟的 认证 <https://launchstudio.bluetooth.com/ListingDetails/76255>__。
.. figure:: ../../../_static/esp-ble-mesh-architecture.png :align: center
图 1.1 ESP-BLE-MESH 架构图
ESP-BLE-MESH 架构主要由以下 5 大部分组成:
Mesh 协议栈
Mesh Networking 负责 ESP-BLE-MESH 节点的网络消息处理等。Mesh Provisioning 负责 ESP-BLE-MESH 设备的启动配置流程。Mesh Models 负责实现 SIG 定义的模型。网络管理
特性
Mesh 承载层
广播承载层 和 GATT 承载层。承载层对于 ESP-BLE-MESH 协议栈至关重要,因为协议栈基于蓝牙低功耗技术构建而成,其必须利用承载层通过 BLE 广播通道和连接通道进行数据传输。应用程序
Mesh Models。Applications 实现了与 ESP-BLE-MESH 协议栈中的 Mesh Networking 和 Mesh Provisioning 的交互,也实现了与 Mesh Models 中一系列模型的交互。1.1.1 Mesh Networking ^^^^^^^^^^^^^^^^^^^^^
协议栈架构中的 Mesh Networking 实现了如下功能:
ble-mesh-feature-list。Mesh Networking 功能的实现是基于层级结构的。每一层的功能如表 1.1 所示:
.. list-table:: 表 1.1 Mesh Networking 框架描述 :widths: 40 150 :header-rows: 1
1.1.2 Mesh Provisioning ^^^^^^^^^^^^^^^^^^^^^^^
协议栈架构中的 Mesh Provisioning 实现了如下功能:
ble-mesh-feature-list。Mesh Provisioning 功能的实现是基于层级结构的。每一层的功能如表 1.2 所示:
.. list-table:: 表 1.2 Mesh Provisioning 框架描述 :widths: 40 150 :header-rows: 1
1.1.3 Mesh Models ^^^^^^^^^^^^^^^^^
协议栈架构中的 Mesh Models 实现了如下功能:
每一层的功能如表 1.3 所示:
.. list-table:: 表 1.3 Mesh Models 框架描述 :widths: 40 150 :header-rows: 1
网络管理 实现了如下功能:
特性 包括以下几项:
协议栈框架中的 承载层 负责 ESP-BLE-MESH 协议栈和低功耗蓝牙核心协议间的数据传输。
承载层 可视为是基于蓝牙低功耗核心协议的载体层,其实现了 ESP-BLE-MESH 协议栈数据的接收和传输。
.. list-table:: 表 1.3 Mesh 承载层描述 :widths: 40 150 :header-rows: 1
Proxy PDUs。应用层协议栈框架图中的 应用层 通过调用 ESP-BLE-MESH 协议栈提供的 API 并处理协议栈上报的事件来实现相应的功能,有一些常见应用,比如网关、照明等。
应用层和 API / 事件 之间的交互
应用层调用 API
应用层处理事件
应用层的设计基于事件设计,事件将参数传输给应用层。事件主要分为两大类。
事件通过应用层注册的回调函数进行上报,同时回调函数中也会包含对事件的相应处理。
API /事件 与 ESP-BLE-MESH 协议栈的交互
用户使用的 API 主要调用 Mesh Networking、 Mesh Provisioning 和 Mesh Models 提供的函数。
API /事件 和协议栈的交互不会跨越协议栈的层级进行操作。比如 API 不会调用 Network Layer 相关的函数。
ESP-BLE-MESH 架构的设计和实现是基于层级和模块的。具体而言,第 2.1 节(Mesh 网络的实现),第 2.2 节(Mesh 配网实现)和第 2.3 节(Mesh 层级实现)基于层级思想,第 2.4 节(网格模型的实现)基于模块思想。
层级思想: 基于层级思想,网络架构根据 Mesh Profile Specification 中指定的层级设计而成。每层都有独特的文件,文件包括该层的 API 等。具体设计如图 2.1 所示。
模块思想: 每个文件实现一个独立的功能,供其它程序调用。
.. figure:: ../../../_static/esp-ble-mesh-interface.png :align: center
图 2.1 ESP-BLE-MESH 架构实现图
ESP-BLE-MESH 架构采用分层的方式进行设计,数据包的处理所经过的层级顺序是固定的,也就是数据包的处理过程会形成一个 消息流。因此,我们可以从图 2.1 的协议栈接口图中看到消息流。
2.1.1 Mesh Networking 实现 ^^^^^^^^^^^^^^^^^^^^^^^^^^
Mesh Networking 中的文件列表和每个文件实现的功能如表 2.1 所示:
.. list-table:: 表 2.1 Mesh Networking 文件描述 :widths: 40 150 :header-rows: 1
access.c <bt/esp_ble_mesh/core/access.c>transport.c <bt/esp_ble_mesh/core/transport.c>net.c <bt/esp_ble_mesh/core/net.c>adv.c <bt/esp_ble_mesh/core/adv.c>2.1.2 Mesh Provisioning 实现 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
由于 Node/Provisioner 共存的限制,Mesh Provisioning 的实现分为两大模块。
实现 Node 启动配置的特定文件如表 2.2 所示:
.. list-table:: 表 2.2 Mesh Provisioning(节点)文件描述 :widths: 40 150 :header-rows: 1
prov_node.c <bt/esp_ble_mesh/core/prov_node.c>proxy_server.c <bt/esp_ble_mesh/core/proxy_server.c>beacon.c <bt/esp_ble_mesh/core/beacon.c>实现 Provisioner 配置功能的特定文件如表 2.3 所示:
.. list-table:: 表 2.3 Mesh Provisioning (Provisioner) 文件描述 :widths: 40 150 :header-rows: 1
prov_pvnr.c <bt/esp_ble_mesh/core/prov_pvnr.c>proxy_client.c <bt/esp_ble_mesh/core/proxy_client.c>pvnr_mgmt.c <bt/esp_ble_mesh/core/pvnr_mgmt.c>2.1.3 Mesh Models 实现 ^^^^^^^^^^^^^^^^^^^^^^
Mesh Models 用于实现节点中所包含的模型的具体功能。服务器模型主要用于维护节点状态。客户端模型主要用于获取和修改节点状态。
.. list-table:: Table 2.4 Mesh Models 文件描述 :widths: 40 150 :header-rows: 1
cfg_cli.c <bt/esp_ble_mesh/core/cfg_cli.c>cfg_srv.c <bt/esp_ble_mesh/core/cfg_srv.c>health_cli.c <bt/esp_ble_mesh/core/health_cli.c>health_srv.c <bt/esp_ble_mesh/core/health_srv.c>client_common.c <bt/esp_ble_mesh/models/client/client_common.c>generic_client.c <bt/esp_ble_mesh/models/client/generic_client.c>lighting_client.c <bt/esp_ble_mesh/models/client/lighting_client.c>sensor_client.c <bt/esp_ble_mesh/models/client/sensor_client.c>time_scene_client.c <bt/esp_ble_mesh/models/client/time_scene_client.c>generic_server.c <bt/esp_ble_mesh/models/server/generic_server.c>lighting_server.c <bt/esp_ble_mesh/models/server/lighting_server.c>sensor_server.c <bt/esp_ble_mesh/models/server/sensor_server.c>time_scene_server.c <bt/esp_ble_mesh/models/server/time_scene_server.c>2.2 Mesh Bearers 实现 ^^^^^^^^^^^^^^^^^^^^^
Mesh Bearers 在实现时充分考虑了可移植性。当 ESP-BLE-MESH 协议栈需要移植到其它平台时,用户只需要修改 :component_file:adapter.c <bt/esp_ble_mesh/core/bluedroid_host/adapter.c> 就能移植成功。
.. list-table:: 表 2.5 Mesh Bearers 文件描述 :widths: 40 150 :header-rows: 1
adapter.c <bt/esp_ble_mesh/core/bluedroid_host/adapter.c>.. note::
:component_file:adapter.c <bt/esp_ble_mesh/core/bluedroid_host/adapter.c> 是对 Mesh 网络框架中 Advertising Bearer 和 GATT Bearer 的实现。
2.3 Mesh Applications 实现 ^^^^^^^^^^^^^^^^^^^^^^^^^^
我们提供了一系列用于客户开发的应用示例,用户可以基于 :ref:esp-ble-mesh-examples 开发产品。
辅助程序指的是 ESP-BLE-MESH 协议栈中可选的功能。辅助程序的设计通常通过 :ref:CONFIG_BLE_MESH 来实现代码的裁剪。
3.1 特性 ^^^^^^^^
3.2 网络管理 ^^^^^^^^^^^^
3.3 辅助程序实现 ^^^^^^^^^^^^^^^^
采用独立模块的设计主要考虑到两个因素:
.. list-table:: 表 3.1 模块文件描述 :widths: 40 150 :header-rows: 1
lpn.c <bt/esp_ble_mesh/core/lpn.c>friend.c <bt/esp_ble_mesh/core/friend.c>net.c <bt/esp_ble_mesh/core/net.c>proxy_server.c <bt/esp_ble_mesh/core/proxy_server.c>proxy_client.c <bt/esp_ble_mesh/core/proxy_client.c>settings.c <bt/esp_ble_mesh/core/storage/settings.c>main.c <bt/esp_ble_mesh/core/main.c>