更改

跳转至: 导航搜索

NRF52832DK-Mesh组网实验

添加5,576字节2020年3月27日 (五) 17:23
③入网验证
经过前两章的学习,我们对于BLE MESH的广播及扫描的代码流程已经有了一定的了解,也就是已经大概的明白了数据的发送和接收的流程。
那么从这一章节开始,我们将会给大家展示,如何配置一个节点设备入网。配置者设备,我们使用的是手机APP:BLE MESH。那么从这一章节开始,我们将会给大家展示,如何配置一个节点设备入网。配置者设备,我们使用的是手机APP:nRF Mesh。
我们从main文件中的start()函数开始,来看一下入网的代码处理及其流程。在start()函数中我们最后是调用的mesh_provisionee_prov_start()函数来启动的节点配置功能,我们来查看一下它所携带的参数prov_start_params。这部分的参数都是比较重要的,有携带的是设备的信息的、有携带认证密码的,有回调返回的,所以我们会挨个介绍一下。
[[文件:Prov-01.png|边框|居中|无框|1200x1200像素]]
首先携带的是static_auth_data,这个是我们带外OOB认证的密码。如果我们在使用nRF Mesh去进行身份验证的时候,选择使用Static OOB,那么当我们在进行PB-GATT的连接过程中,会弹出一个新的窗口,要求我们去输入这个静态的128bit的OOB密钥。
[[文件:Prov-02.png|边框|居中|无框|1200x1200像素]]
[[文件:Prov-14.png|边框|居中|无框]]
[[文件:Prov-15.png|边框|居中|无框]]
接下来携带的是provisioning_complete_cb()回调函数,这个函数处理的是节点设备成功的被配置入网,在这里我们可以获取到我们的节点设备被分配的node_Address。
[[文件:Prov-03.png|边框|居中|无框|1200x1200像素]]
然后携带是device_identification_start_cb()回调函数,这个回调函数是用于通知开发者,我们的节点设备当前已经开始配置。
[[文件:Prov-04.png|边框|居中|无框|1200x1200像素]]
再然后携带的是URI【统一资源标识符(Uniform Resource Identifier,URI)】,这个是用于标识我们的设备类型的,这个数据会通过AES-CMAC算法加密后添加到我们的Unprov Beacon数据的末尾。
 
这里我们是light switch的server设备,所以我们定义URI是EX_URI_LS_SERVER。
[[文件:Prov-05.png|边框|居中|无框|1200x1200像素]]
分析完携带的参数之后,我们继续来查看mesh_provisionee_prov_start()函数。在这个函数中,我们首先是定义了一下prov_caps,也就是配置支持的OOB功能。然后我们调用nrf_mesh_generate_keys()函数去生成有效的密钥对等待使用。
 
再然后是调用nrf_mesh_prov_init()函数去初始化prov配置信息的结构体参数,里面有结构体本身m_pro_ctx,需要配置的参数公钥m_public、私钥m_private,以及我们刚刚定义的oob功能prov_caps,最后还携带了一个事件回调函数prov_ect_handler。
 
接下来是PB-ADV以及PB-GATT的处理过程,这个前面已经讲解过,这里不再赘述。
 
最后我们调用provisionee_start()函数去开启配置。
[[文件:Prov-06.png|边框|居中|无框|1200x1200像素]]
我们继续来追踪一下provisionee_start()函数,在这个函数中我们调用nrf_mesh_prov_listen()函数去开启侦听承载层的消息。这里我们需要侦听PB-ADV以及PB-GATT两个。
[[文件:Prov-07.png|边框|居中|无框|1200x1200像素]]
然后在nrf_mesh_prov_listen()函数中,我们调用prov_provisionee_listen()函数携带我们刚刚传入的nrf_mesh_prov_ctx_t结构体,以及p_bearer、URI、oob_info_source等参数信息,继续向下传递。
[[文件:Prov-08.png|边框|居中|无框|1200x1200像素]]
最终我们来查看下prov_provisionee_listen()函数,在这个函数中我们传递了p_bearer->p_callbacks给m_prov_callbacks回调,然后调用p_bearer->p_interface->listen_start()函数去启动PB-ADV以及PB-GATT的侦听。
[[文件:Prov-09.png|边框|居中|无框|1200x1200像素]]
当我们在侦听之后,接收到任何配置相关的消息,都将通过m_prov_callbacks()函数回调传递给我们处理,大家可以自行看下其中4个不同的功能函数,具体处理的都是什么消息。
[[文件:Prov-10.png|边框|居中|无框|1200x1200像素]]
在prov_provisionee_listen()函数中,我们可以看到回调函数指针m_prov_callbacks指向的是p_bearer->p_callbacks,我们一路向上查找,最终可以找到这个p_bearer->p_callbacks函数就是指的prov_evt_handler()函数。所以其实我们用户可以在这一层去查看比较重要的配置事件返回,而不需要到上面的m_prov_callbacks中这样偏底层的地方去查看。
 
在这个回调函数中,我们可以看到mian文件中注册的prov_device_identification_start_cb、prov_device_identification_stop_cb、provisioning_aborted_cb的返回。
[[文件:Prov-11.png|边框|居中|无框|1200x1200像素]]
那么除了上方已经存在的几个回调,我们可以看到mian文件中的start()函数下的prov_start_params参数,还缺少一个配置完成的回调prov_complete_cb()。
 
这个回调的返回方式比较特殊,和上方其他的都不同,是由SD(softdevice)直接从底层返回给我们的。注册这个回调的函数是NRF_SDH_STATE_OBSERVER,返回的回调函数是sd_state_evt_handler。其中触发的事件NRF_SDH_EVT_STATE_ENABLED,这个是在mian文件中的initialize()函数下的ble_stack_init()函数中就被触发的,这个大家可以自行查看一下,不太重要,因为都是nordic底层处理好的消息。
[[文件:Prov-13.png|边框|居中|无框|1200x1200像素]]
[[文件:Prov-12.png|边框|居中|无框|1200x1200像素]]
以上整个配置流程的处理,不太好分步展示相应的现象,这个大家可以自己使用SES在线仿真的方式去调试一下流程,这里我们直接给大家展示整个流程打印出的相应的信息,以及nRF Mesh中暂时出来的现象。
[[文件:Prov-16.png|边框|居中|无框|1200x1200像素]]
[[文件:Prov-17.png|边框|居中|无框]]
 
== ④设备信息分配 ==
[[分类:NRF52832DK]]
[[分类:实验手册]]
510
个编辑

本PDF由谷雨文档中心自动生成,点击下方链接阅读最新内容。

取自“http://doc.iotxx.com/特殊:移动版差异/2753

导航菜单