更改

跳转至: 导航搜索

NRF52832DK-Mesh组网实验

添加2,924字节2020年3月24日 (二) 17:04
②扫描
3、根据我们下面拆分的组网流程,对照依次的实验说明,进行mesh组网流程的分步学习。前期实验部分我们主要讲解节点设备,配置者设备功能我们使用手机app完成,目的是减少大家的学习难度,配置者设备我们会放在最后一个实验给大家做介绍。
①广播——了解节点设备的广播功能,分为两个部分:PB①广播(通信TX)——了解节点设备的广播功能,分为三个部分:PB-ADV以及Unprov Beacon,也用于后面的数据通信的TX发送。ADV和Unprov Beacon,PB-GATT的广播,以及core_tx_adv发送数据。
②扫描——了解节点设备的扫描功能,用于数据通信的RX接收。②扫描(通信RX)——了解节点设备的扫描功能,用于数据通信的RX接收。
③入网验证——了解节点设备接入网络的验证过程,实验中使用的是PB-GATT去配置的,包含了:交换公共密钥,完成验证(是否有带外OOB)。
⑤元素——了解节点设备的元素以及模型获取以及index的分配。
⑥模型通信——了解模型的订阅subscription和发布publish功能。 ⑦模块创建——了解模型的功能和创建方法。⑥模型——了解模型的功能和创建方法,模型的订阅subscription和发布publish功能。
== Light_switch测试实验 ==
4、至此我们的mesh组网的lightswitch实验测试完成。
== ①广播 ①广播(通信TX) ==
有关广播部分,我们需要给大家讲解三个方面,分别如下:
2、Unprov Beacon,这个是广播一个未被配置的beacon,就是一个特殊形式的广播数据包,用于声明自己是未经配置的设备。
3、core_tx_adv,这个是我们用于发送数据的部分,我们将需要发送的数据通过advData广播出去。3、PB-GATT,这个是mesh中的GATT承载层,用于我们启动配置过程(当前手机app就是使用PB-GATT,也就是连接之后,通过GATT服务去发送配置信息)。 4、core_tx_adv,这个是我们用于发送数据的部分,我们将需要发送的数据通过advData广播出去。
=== PB-ADV ===
Unprov Beacon说明请查看“BLE-Mesh技术揭秘”第5.5及5.5.1章节。
上面我们有说到PB-ADV是承载层用于配置节点的功能,而Unprov Beacon则是我们的节点设备用于声明自己未经配置,所以这两个其实是一脉相承的(这里要注意,Unprov Beacon是设备与我们用户交互的唯一途径,所以是一定要有的)。Beacon则是我们的节点设备用于声明自己未经配置,所以这两个其实是一脉相承的。
紧接着上面的nrf_mesh_prov_bearer_adv_interface_get()函数,其中的prov_bearer_interface_t结构体包含的是处理承载层的API函数,在这个结构体当中有一个.listen_start = prov_bearer_adv_listen,是用于开始监听传入的配置链接的功能,在这个函数中我们可以看到send_unprov_beacon()函数。
[[文件:PB-ADV-04.png|边框|居中|无框|1200x1200像素]]
send_unprov_beacon()函数是用于发送Unprov Beacon数据的函数,在这个函数中我们调用prov_beacon_unprov_build函数去创建用于广播的Unprov Beacon数据包,然后调用advertiser_interval_set函数去设置广播的间隔,最后调用advertiser_packet_send函数去将我们的数据包发送出去。
[[文件:PB-ADV-05.png|边框|居中|无框|1200x1200像素]]这里我们再最后看一下prov_beacon_unprov_build()函数,这个函数是生成我们的Unprov Beacon的数据包, === PB-GATT ===PB-GATT说明请查看“BLE-Mesh技术揭秘”第8.1章节。 和PB-ADV一样的,我们从main文件中的start()函数,追踪到mesh_provisionee_prov_start(),可以看到在使能宏定义MESH_FEATURE_PB_GATT_ENABLED的情况下,可以追踪到nrf_mesh_prov_bearer_gatt_init()以及nrf_mesh_prov_bearer_gatt_interface_get()函数。[[文件:PB-GATT-01.png|边框|居中|无框|1200x1200像素]]首先我们看一下nrf_mesh_prov_bearer_gatt_init()函数,这个是初始化并设置PB-GATT服务(通过Mesh GATT接口)的函数。对比我们使用nrf master control panel手机APP连接之后获取到的服务,可以看到其中的PB-GATT的服务以及特征值。 再往下的mesh_gatt_init()函数,这个就不给大家分析了,是和我们普通的BLE一样的方式去注册一个服务。[[文件:PB-GATT-04.png|边框|居中|无框|1200x1200像素]][[文件:PB-GATT-03.png|边框|居中|无框|1200x1200像素]][[文件:PB-GATT-02.png|边框|居中|无框]]在nrf_mesh_prov_bearer_gatt_interface_get()函数中,我们可以看到prov_bearer_interface_t结构体,这个结构体下面提供了我们配置承载层需要的API函数(这个是和上方的PB-ADV是一样的)。[[文件:PB-GATT-05.png|边框|居中|无框|1200x1200像素]]和Unprov Beacon类似的,当我们开始监听配置链接的时候,会触发.listen_start = listen_start_cb的回调,在这个回调中我们触发FSM(有限状态机)的事件E_LISTEN_START,然后调用link_evt_send()去post顺序承载事件。[[文件:PB-GATT-06.png|边框|居中|无框|1200x1200像素]]然后我们来到状态机列表m_pb_gatt_fsm_transition_table[],可以看到E_LISTEN_START事件ID代表的动作ID是A_LISTEN_START。而最终我们的A_LISTEN_START动作,执行的是a_listen_start函数功能(这其中涉及的代码逻辑,暂时先不说明,大家可以自己查看源码的引用)。[[文件:PB-GATT-07.png|边框|居中|无框|1200x1200像素]][[文件:PB-GATT-08.png|边框|居中|无框|1200x1200像素]]然后我们继续追踪a_listen_start(),可以看到其中调用了mesh_adv_params_set函数设置了我们广播的超时时间MESH_ADV_TIMEOUT_INFINITE以及广播间隔NRF_MESH_PROV_BEARER_GATT_UNPROV_BEACON_INTERVAL_MS,调用mesh_adv_data_set函数设置了我们的广播数据内容,最后调用mesh_adv_start函数启动广播。这部分函数的源码在mesh_adv.c下面,都是具体的代码处理,没有逻辑的引用,相对是比较容易的,大家可以自行查阅源码内容。[[文件:PB-GATT-09.png|边框|居中|无框|1200x1200像素]][[文件:PB-GATT-10.png|边框|居中|无框|1200x1200像素]]
== ②扫描 ==
[[分类:NRF52832DK]]
[[分类:实验手册]]
510
个编辑

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

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

导航菜单