BLE MESH(三)

  • 一、在nRF5 SDK中为Mesh示例配置承载器
  • 二、可用示例
  • 三、要开始使用nRF Mesh移动应用程序评估示例,请完成以下三个配置阶段:
  • 四、配置步骤
    • 第一步:nRF Mesh的配置
    • 第二步:使用nRF Mesh来绑定节点
    • 第三步:使用nRF Mesh设置发布和订阅
  • 五、真机配置
    • 1、client
    • 2、server
    • 3、provisioner

一、在nRF5 SDK中为Mesh示例配置承载器

MESH示例的nRF5 SDK可以使用两种提供的配置承担者来提供,不使用OOB身份验证方法或使用静态OOB身份验证方法。
请参阅下表,了解哪个示例与[PB-ADV]或[PB-GATT]或两者一起工作。

Example / Bearer PB-ADV PB-GATT
@ref examples_beaconing -
@ref examples_dfu -
@ref examples_dimming
@ref examples_enocean_switch
@ref examples_light_switch
@ref examples_light_lightness
@ref examples_light_lc_server
@ref examples_light_ctl
@ref examples_lpn -
@ref examples_provisioner n/a n/a
@ref examples_sdk_coexist -
@ref examples_pb_remote* -
@ref examples_scene
@ref examples_sensor
@ref examples_serial* -

1、所有这些示例都使用16字节静态OOB值。静态OOB值存储在’ STATIC_AUTH_DATA ‘中,它定义在’
example_common.h '中。
2、examples_pb_remote:使用PB-ADV与静态OOB身份验证方法。但是,它使用了与其他示例不同的16字节静态OOB值。
原因是为了防止使用PB远程客户端供应周围的所有设备。
3、examples_serial:使用PB-ADV。然而,它可以通过静态准备程序来准备,如果相同的1

二、可用示例

下面的例子提供了这个SDK:

1、examples_enocean_switch:演示如何在蓝牙MESH生态系统中实现第三方设备,即EnOcean-to-Mesh转换器。 EnOcean交换机使用BLE通告报文发送按钮状态。 这些数据包可以被捕获,并且可以用来生成等效的蓝牙MESH消息来控制其他蓝牙MESH节点。
EnOcean是一种无线通讯技术,主要频段:315MHz、868MHz、902MHz(在中国大陆主要是868MHz)的民用开放频段。

2、examples_beaconing:实现自定义信标广告,展示了如何发送和接收自定义数据包使用nRF5 SDK for Mesh。

3、examplees_sdk_coexist:演示了nRF5 SDK特性如何可以同时使用nRF5 SDK for Mesh。

4、examples_dfu:展示了如何使用专用MESHDFU框架通过蓝牙MESH更新设备的固件。

5、examples_dimming:演示了如何使用[通用级模型]api 在应用中实现调光灯和相应的调光开关。

6、examples_light_lightness:演示了如何使用[光的亮度模型]。

7、examples_light_lc_server:演示了如何使用[光LC设置服务器模型]

8、examplees_light_ctl:演示了如何使用[光CTL模型]

9、examples_lpn:演示了低功耗节点特性。

10、examples_provisioner:演示了供应过程,可以通过其他功能进行扩展。

11、examples_remote:演示了使用远程供应来在供应器的无线电范围之外提供设备。

12、examplees_scene:演示了如何使用[场景模型]

13、examplees_sensor:演示了如何使用[传感器模型]

14、examples_serial:演示了如何使用串行接口创建蓝牙MESH连接设备。

15、examples_light_switch_README是一个蓝牙MESH生态系统示例,其中包含一些较小的示例:客户机、服务器和代理服务器。

三、要开始使用nRF Mesh移动应用程序评估示例,请完成以下三个配置阶段:

  • [nRF MESH配置]
  • [使用nRF MESH绑定节点]
  • [使用nRF Mesh设置发布和订阅]

四、配置步骤

第一步:nRF Mesh的配置

要在nRF mesh移动应用程序中提供蓝牙MESH示例,请完成以下步骤:

  1. 擦除flash, 擦除开发板上的flash并对SoftDevice进行编程。
  2. 打开nRF Mesh移动应用程序。出现主应用程序窗口。
  3. 添加新节点。应用程序开始寻找未供应的节点并在屏幕上列出它们。
  4. 通过为每个节点完成以下步骤来提供每个节点:
    1. 点击节点名连接到它。
    2. 确定节点。
    3. 准备节点并选择所需的OOB选项。应用程序启动供应过程。完成后,您将收到一个通知。
  5. 当提供所有节点时,请注意服务器节点的地址。当@ref nrf-mesh-mobile-app-publication“设置发布地址”时需要它们。

1、如果自动配置坏了,手动获取合成数据,添加应用键,然后再执行以下步骤。
2、可以使用手机版nRF Mesh软件配置也可使用nrf5_SDK_for_Mesh_v5.0.0_src\examples\provisioner程序固件烧录到nRF52840、nRF52833和nRF52832上进行测试。
3、所有这些示例都使用16字节静态OOB值。静态OOB值存储在’STATIC_AUTH_DATA ‘中,它定义在’ example_common.h '中。
4、如果使用nrf5_SDK_for_Mesh_v5.0.0_src\examples\provisioner固件烧录到板子上充当配置者这些步骤都会自动操作。(包括第一步、第二步、第三步)配置者会持续扫描未配置的节点,然后根据之前配置过的节点地址来递增配置。

第二步:使用nRF Mesh来绑定节点

将蓝牙MESH节点与nRF mesh移动应用绑定,请完成以下步骤:
1、在服务器节点上,将相应示例中指定的服务器模型实例与相同的APP KEY绑定:

  1. 点击服务器节点名称。打开节点配置菜单。
  2. 在展开的元素部分中,点击模型实例名。
  3. 在绑定APP KEY键的区域,点击绑定APP KEY的按钮,然后点击APP KEY字段。密钥现在被绑定了。

2、每个服务器板节点重复执行步骤1。
3、在客户端节点上,将对应示例中指定的客户端模型实例与相同的APP KEY绑定:

  1. 在提供的节点列表中,点击客户端节点名称。打开配置菜单。
  2. 在展开的元素部分中,点击第一个客户机模型实例名。
    3.在绑定APP KEY的区域,点击绑定APP KEY的按钮,然后点击APP KEY字段。密钥现在被绑定了。

4、应用程序返回到模型实例菜单。

这一步骤主要是绑定APP KEY。server和client必须是保持一致才能互相通信。

第三步:使用nRF Mesh设置发布和订阅

通过nRF Mesh移动应用设置节点间的发布规则,需要完成以下步骤:
1、在客户端节点上,在客户端模型实例菜单的发布部分,点击设置发布
2. 点击发布地址字段。出现一个下拉菜单。
3. 选择以下地址类型之一,设置客户端模型的发布地址:

  • 单播地址 – 您需要完成以下步骤:

    1. 单击“确定”。提供任何服务器节点的地址注明@ref nrf-mesh-mobile-app-provisioning“在配置过程的末尾”。
    2. 应用更改。—分组—您需要完成以下步骤:
      ①. 分组。选择要订阅的现有组或创建一个新组。
      ②. 应用客户机节点的更改。
    3. 在服务器节点上,将服务器模型实例菜单的订阅地址设置为所选组地址。
    4. 对服务器节点应用更改。

4、如果您正在评估传感器示例,那么也为服务器节点配置publish,如[传感器示例页面](@ref fast_cadence_example_testing_app)所述。服务器节点的配置步骤与客户端节点的步骤1-3相同(切换服务器和客户端角色)。

1、客户端的发布地址和服务器的订阅地址需要一致,服务器的发布地址和客户端的订阅地址需要一致。 2、一旦你用nRF
Mesh完成了发布和订阅的设置,你就可以开始与这些板子交互了,就像在每个示例页面的相关部分中描述的那样。

五、真机配置

1、provisioner使用nrf5_SDK_for_Mesh_v5.0.0_src\examples\provisioner程序来自动配置
2、client使用nrf5_SDK_for_Mesh_v5.0.0_src\examples\light_switch\client程序
3、server使用nrf5_SDK_for_Mesh_v5.0.0_src\examples\light_switch\server程序

1、client

①、mesh_stack_provisioning_data_store() //函数是最开始配置的,配置的项目主要是起始地址和netkey、devkey,netkey地址是配置器根据随机数计算出来的整个网络公用一个,devkey是每个设备有一个不能重复,都是配置者决定的,是随机的。
②、handle_composition_data_get () //函数主要是返回给配置者一些厂商ID\版本ID\重放保护缓存的大小等自身支持的信息。能走到这一步必须是通过了OOB验证的。
③、handle_appkey_add() // 添加APPKEY,保存到flash中
④、handle_model_app_bind_unbind () // 添加服务(模型)绑定,主要是绑定模型句柄,以便使用的时候能识别是否合法,是否注册绑定。(执行了三次)

1、将元素地址0x100的模型ID=0x0002绑定appkey_handle=0,model_handle=1 //运行状况服务器模型的模型ID
2、将元素地址0x101的模型ID=0x1001绑定appkey_handle=0,model_handle=2 //通用的onoff客户端模型id。
3、将元素地址0x102的模型ID=0x1001绑定appkey_handle=0,model_handle=3 //通用的onoff客户端模型id

⑤、handle_config_model_publication_set () // 添加模型的发布地址(执行了三次)

1、将元素地址0x0100上的运行状况服务器的’发布’地址设置为 0x0001, model_handle:0x1,
publish_address_handle:0xFFFF
2、将元素地址0x0101上的Generic OnOff客户端的’发布’地址设置为0xC003, model_handle:0x2, publish_address_handle:0xFFFF (客户端发布组地址奇数)
3、将元素地址0x0102上的Generic OnOff客户机的’发布’地址设置为0xC002, model_handle:0x3, publish_address_handle:0xFFFF (客户端偶数发布组地址)

⑥、handle_config_model_subscription_add () // 添加模型的订阅地址(执行了两次)

1、将元素地址0x0101上的Generic OnOff客户端的订阅地址设置为0xC005, model_handle:0x2, subaddress:0x2
2、将元素地址0x0102上的Generic OnOff客户端的订阅地址设置为0xC004, model_handle:0x3, subaddress:0x4

> //通过以上步骤client就已经在这个网络中准备好了,他能接收同一netkey和同一appkey下发布地址为0xC005和0xC004的设备发布的信息,他能发送给0xC003和0xC002设备信息。
#define GENERIC_ONOFF_CLIENT_MODEL_ID 0x1001            /** 通用的onoff客户端模型id */          //通过access_model_add函数绑定的
#define HEALTH_SERVER_MODEL_ID        0x0002            /** 运行状况服务器模型的模型ID */           //客户端是provisioner(配置器)0x0003
#define CONFIG_SERVER_MODEL_ID        0x0000            /** 配置服务器型号ID。*/                    //客户端是provisioner(配置器)0x0001

2、server

1、mesh_stack_provisioning_data_store 函数是最开始配置的,配置的项目主要是起始地址和netkey,netkey地址是配置器根据随机数计算出来的。
2、handle_composition_data_get 函数主要是返回一些厂商ID\版本ID\重放保护缓存的大小等自身支持的信息。
3、handle_appkey_add 添加APPKEY,保存到flash中
4、handle_model_app_bind_unbind 添加服务(模型)绑定,主要是绑定模型句柄,以便接收的时候能识别是否合法,是否注册绑定。(执行了四次)

1、将元素地址201的模型ID=0x0002绑定appkey_handle=0,model_handle=1 //运行状况服务器模型的模型id。
2、将元素地址201的模型ID=0x1000绑定appkey_handle=0,model_handle=2 //通用onoff服务器模型id
3、将元素地址201的模型ID=0x1203绑定appkey_handle=0,model_handle=4 //场景服务器型号id
4、将元素地址201的模型ID=0x1204绑定appkey_handle=0,model_handle=5 //场景设置服务器模型id

5、handle_config_model_publication_set //根据之前绑定的模型来确定现在添加的是谁的发布地址。(执行了四次)

1、将元素地址0x201上的运行状况服务器的’发布’地址设置为 0x0001,model_handle:0x1
2、将元素地址0x201上的通用onoff服务器的’发布’地址设置为 0xC004,model_handle:0x2
3、将元素地址0x201上的场景服务器模型的’发布’地址设置为 0xC004,model_handle:0x4
4、将元素地址0x201上的场景设置服务器模型的’发布’地址设置为 0xC004,model_handle:0x5

6、handle_config_model_subscription_add //根据之前绑定的模型来确定现在添加的是谁的订阅地址。(执行了三次)

1、将元素地址0x201上的通用onoff服务器的’订阅’地址设置为 0xC002,model_handle:0x2,subaddress:0x2
2、将元素地址0x201上的场景服务器模型的’订阅’地址设置为 0xC002,model_handle:0x4, subaddress:0x2
3、将元素地址0x201上的场景设置服务器模型的’订阅’地址设置为 0xC002,model_handle:0x5, subaddress:0x2

7、配置器会针对服务器会配置两种类型地址,一种发布地址是0xC005,订阅地址是0xC003, 一种发布地址是0xC004,订阅地址是0xC002,(上述一种)这两种在发送给客户端的时候无区别,因为客户端配置了两个订阅地址分别是0xC004和0xC005,但是客户端发送的时候就会有一个接收不到,因为客户端有两个发布地址是可以切换的。

8、在access_incoming_handle函数中回来会扫描所有模型,查看当前接收到的数据时候有效,并且模型是否绑定,然后执行对应的模型回调函数。例如开关灯的回调函数是在generic_onoff_server_init()注册,具体函数数组是m_opcode_handlers,根据对应的操作码来执行对应的函数。
9、如果本设备没有订阅对应的发布地址就会收不到任何消息连access_incoming_handle函数都进不去。

#define SCENE_SERVER_MODEL_ID            0x1203      /** 场景服务器型号id */                    //通过access_model_add函数绑定的
#define SCENE_SETUP_SERVER_MODEL_ID     0x1204      /** 场景设置服务器模型id */
#define GENERIC_ONOFF_SERVER_MODEL_ID   0x1000      /** 通用onoff服务器模型id */
#define GENERIC_DTT_SERVER_MODEL_ID     0x1004      /** 通用DTT服务器型号id */
#define HEALTH_SERVER_MODEL_ID          0x0002      /** 运行状况服务器模型的模型ID。 */      //客户端是provisioner(配置器)0x0003
#define CONFIG_SERVER_MODEL_ID          0x0000      /** 配置服务器型号ID。 */               //客户端是provisioner(配置器)0x0001

3、provisioner

/**本例中使用的组地址数目。 */
#define GROUP_ADDR_COUNT             (4)#define CLIENT_PUB_GROUP_ADDRESS_EVEN (0xC002)
#define CLIENT_PUB_GROUP_ADDRESS_ODD  (0xC003)#define SERVER_PUB_GROUP_ADDRESS_EVEN (0xC004)
#define SERVER_PUB_GROUP_ADDRESS_ODD  (0xC005)#define PROVISIONER_ADDRESS           (0x0001)
#define CLIENT_INITIAL_ADDRESS        (0x0100)
#define ONOFF_SERVER_INITIAL_ADDRESS  (0x0201)
#define LEVEL_SERVER_INITIAL_ADDRESS  (0x0301)
#define LL_SERVER_INITIAL_ADDRESS     (0x0401)
#define LC_SERVER_INITIAL_ADDRESS     (0x0501)
#define CTL_SERVER_INITIAL_ADDRESS    (0x0601)
#define CTL_LC_SERVER_INITIAL_ADDRESS (0x0701)
#define SENSOR_INITIAL_ADDRESS        (0x0801)//使用到的模型ID:
#define CONFIG_CLIENT_MODEL_ID  0x0001                  /** 配置客户端模型id */                        //通过 access_model_add 函数绑定的
#define CONFIG_SERVER_MODEL_ID  0x0000                  /** 配置服务器型号ID。 */
#define HEALTH_CLIENT_MODEL_ID  0x0003                  /** 运行状况客户端模型的模型ID。 */
#define HEALTH_SERVER_MODEL_ID  0x0002                  /** 运行状况服务器模型的模型ID。 */

两个主要的函数:
prov_evt_handler() //配置事件
config_step_execute() //配置步骤执行

附:
nRF5 SDK for Mesh地址:https://www.nordicsemi.com/Products/Development-software/nRF5-SDK-for-Mesh/Download?lang=en#infotabs
nRF MESH安卓app:https://download.csdn.net/download/qq_40537092/57057462
BLE MESH组网(一)简介
BLE MESH组网(二)友谊功能和设备管理
BLE MESH组网(三)普通BLE如何添加到网络
BLE MESH组网(四)安全概述
BLE MESH组网(五)配置BLE MESH
BLE MESH组网(六)配置BLE MESH

BLE MESH组网(七)真机配置相关推荐

  1. BLE MESH组网(五)配置BLE MESH

    BLE MESH(五)配置BLE MESH 前言 概述 配置协议 供应程序 信标 邀请 交换公钥 前言 2017 年 5 月,全球最臭名昭著的勒索软件 WannaCry 在全球范围内积极攻击计算机,劫 ...

  2. BLE MESH组网(六)配置BLE MESH

    BLE MESH(五)配置BLE MESH 前言 验证 输出OOB 输入对象 静态 OOB 或无 OOB 检查确认值 确认值检查 配置数据的分布 开发MESH 前言 在本文的第1 部分中,介绍了配置承 ...

  3. BLE MESH组网(四)安全概述

    BLE MESH(四)安全概述 一.安全的重要性 二.蓝牙MESH网络的安全性是强制性的 三.蓝牙MESH网络安全基础 四.关注点和安全密钥分离 五.区域隔离 六.节点移除.密钥刷新和垃圾桶攻击 七. ...

  4. BLE MESH组网(一)简介和基本概念

    BLE MESH组网(一) BLE MESH简介 BLE MESH来源 BLE MESH用处 BLE MESH的通讯方式 管理洪水 市场内蓝牙设备支持 安全性 BLE MESH协议栈模型 BLE ME ...

  5. BLE MESH组网(二)友谊功能和设备管理

    BLE MESH组网(二) Friendship功能 一.概述 1.Friendship是什么 2.Friend和LPN 3.Friend参数 4.好友建立 Friendship消息 安全 友谊终止 ...

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

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

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

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

  8. Cisco 自反ACL真机配置实例

    Cisco 自反ACL真机配置实例 某个机会下接触到Cisco的自反ACL ,自反ACL主要实现单项访问类似于防火墙基于会话的方式控制访问,自反ACL在有匹配到对应数据流时,设备自动生成一条自反ACL ...

  9. 平民价国产Android,1600左右的Broncho A1真机配置

    RT@zkxx 历史告诉我们,买android的机器其实完全可以只看硬件配置和外形.软件.ui方面,总有那么一帮能搞出最新内核最眩界面(跨厂家)且运行快速稳定rom的牛逼玩家.这点对symbian用户 ...

最新文章

  1. sketch如何做设计稿交互_交互设计师是做什么的——交互设计的历史、现状和未来...
  2. 龙邱MPU9250传感器 | 使用ESP32 模块进行测试
  3. Namenode文件系统命名空间映像文件及修改日志
  4. 美利好车的微服务实践
  5. 13.Java为什么不支持多继承
  6. numcpp速度对比_PHP和C++性能对比.pdf
  7. 字符编码、常见字符集解析(ASCII、Unicode、UTF-8、GB2312等)
  8. React-Native的TextInput组件的设置以及获取输入框的内容
  9. 你的手机浏览器不支持webgle_不支持n79频段5G手机不能买?OPPO Reno3全频覆盖消除后顾之忧...
  10. Q107:Mac系统下GDB对PBRT-V3进行debug
  11. leetcode 13 13. 罗马数字转整数 (python)
  12. 微型计算机的主频很大程度上决定了计算机的运行速度,它是指__ _.,计算机试卷4...
  13. 清理vdbench后台进程
  14. python量化投资19种方法_【Python量化投资】新手资源大合集
  15. uboot_v2016 版本中fw_printenv的编译问题
  16. 绘画软件:krita for Mac
  17. ftp服务器文件不显示,ftp服务器不显示文件夹大小
  18. GitHub加速访问、克隆和下载
  19. 2019最新天善智能python3数据分析与挖掘项目实战(完整)
  20. excel 序号下拉不能够自动(递增)排序

热门文章

  1. jQuery动态绑定事件或者原生js动态绑定事件
  2. hive-5(窗口函数)
  3. 关于KOT、KOL、KOC 理解
  4. 微信H5移动端真机调试--vConsole
  5. 英语口语笔记B1-Unit7.交通出行-04-Train travel in Europe
  6. QT 基础知识一(QT安装、创建项目、常用窗口控件使用、信号与槽机制讲解)
  7. freeipa 客户端 Kerberos认证 SSSD关系
  8. Hazelcast Jet Processor
  9. VUE3 子传父 父传子 双向传递
  10. vue.runtime.esm.js?2b0e:619 [Vue warn]: Avoid mutating a prop