更改

跳转至: 导航搜索

NRF52832DK-Mesh组网实验

添加4,664字节2020年4月1日 (三) 17:29
Generic On Off Server
=== Generic On Off Server ===
我们来看下Generic 接下来我们来看下Generic On Off Server的Server服务,这个服务和上方的两个服务不太一样,他不是我们的特殊必要服务,是一个通用的模型(用于具体的功能数据的处理,这里是用于开关功能)。借用这个服务模型,我们给大家介绍一下如何创建一个符合BLE MESH协议的模型。 我们看下模型的初始化方法,在generic_onoff_server_init()函数中,首先我们使用access_model_add_params_t定义一个模型分配参数的结构体init_params,在这个结构体当中,我们要给定: 1、model_id(模型的ID),这个是mesh协议规定好的,我们可以查看“归档资料\8-蓝牙协议手册和芯片手册\蓝牙mesh协议手册\《MshMDLv1.0.1.pdf》”的第7.3章节有归纳 2、element_index(元素索引),这个看我们准备将这个服务添加到哪一个元素下,这里我们因为只有一个主元素,所以我们的元素索引为0 3、p_opcode_handlers(操作码列表,指令码列表),这个也是mesh协议规定好的,我们可以查看“归档资料\8-蓝牙协议手册和芯片手册\蓝牙mesh协议手册\《MshMDLv1.0.1.pdf》”的第7.1章节归纳,具体的操作码的功能及要求,大家需要对应这个pdf手册,自己查看一下,对于一个模型ID,我们不一定要注册所有的属于它的opcode,只要注册我们需要使用的即可 4、opcode_count(操作码数量),准备注册的操作码的数量 5、p_args(通用参数指针),用于参数的传递 6、publish_timeout_cb(发布超时时间),发布的定时器到期,会进入此回调,我们可以做一些处理(例如重新发送数据等等)。如果我们的模型不支持定期发布,可以将此值设置为NULL。 当我们配置好模型的参数结构体之后,会调用access_model_add()函数去初始化模型并添加到元素,同时会返回给我们用于存储此模型的句柄指针p_server->model_handle。 因为我们的onoff模型,需要订阅消息,所以我们需要调用access_model_subscription_list_alloc()函数,携带我们的模型句柄去分配模型的订阅列表。[[文件:ConfigOnoff-0601.png|边框|居中|无框|1200x1200像素]]看完模型的初始化注册之后,我们来看下模型包含的opcode操作码,可以看到在m_opcode_handlers[]操作码列表中包含了三个opcode。这三个opcode我们可以看下他的定义,以及对照一下《MshMDLv1.0.1.pdf》第7.1章节的归纳,可以看到是一一对应的关系。具体这三个opcode的功能,大家可以查看手册中的说明,或者直接看下他们对应的功能处理函数。[[文件:Onoff-02.png|边框|居中|无框|1200x1200像素]][[文件:Onoff-03.png|边框|居中|无框|1200x1200像素]][[文件:Onoff-04.png|边框|居中|无框|1200x1200像素]]接下来我们看下GENERIC_ONOFF_OPCODE_SET与GENERIC_ONOFF_OPCODE_SET_UNACKNOWLEDGED对应的handle_set,可以看到在这个函数的最后,我们会去调用status_send()函数去发送数据。[[文件:Onoff-05.jpgpng|边框|居中|无框|1200x1200像素]]然后我们看下status_send()函数,在这个函数中,我们最终会调用access_model_publish来发布我们的数据,或者使用accsee_model_reply来回复数据。 这两个函数再往下就是我们之前在广播部分讲解的packet_alloc_and_tx函数去发送广播数据了,这个有不清楚的,大家可以到前面去查看一下。[[文件:ConfigOnoff-1206.jpgpng|边框|居中|无框|1200x1200像素]]
==== model bind appkey ====
那么按照上方的方法注册好模型,然后我们的节点设备被成功的配置入网之后,我们如何让这个模型工作起来。 首先第一步是需要将我们的模型绑定到相应的appkey,只有这样我们的模型才能拿到用于通信的密钥,例如如下的截图当中,我们利用手机app软件nRF Mesh去给我们的Generic On Off Server模型绑定Appkey1。[[文件:Config-14.png|边框|居中|无框|1040x1040像素]][[文件:Config-06.jpg|边框|居中|无框]][[文件:Config-07.jpg|边框|居中|无框]][[文件:Config-08.jpg|边框|居中|无框]]当我们在使用app去绑定appkey的时候,在我们的代码中的体现是在config server下的opcode_handlers[]操作码列表中的CONFIG_OPCODE_MODEL_APP_BIND。[[文件:Onoff-07.png|边框|居中|无框|1200x1200像素]]我们追踪一下CONFIG_OPCODE_MODEL_APP_BIND对应的handle_model_app_bind_unbind(),这个函数比较长,这边只给大家截取了部分,在为截取到部分,还有获取元素索引的get_element_index,获取模型ID和模型handle的access_handle_get,然后才是我们的dsm_appkey_index_to_appkey_handle函数用于将appkey索引给到appkey句柄。然后调用access_model_application_bind函数去绑定模型和appkey,最终如果是成功绑定,则调用access_flash_config_store函数去存储修改的绑定信息。[[文件:Onoff-08.png|边框|居中|无框|1200x1200像素]]
==== model publish address ====
==== model subscription address ====
[[文件:Config-15.png|边框|居中|无框|1040x1040像素]]
[[文件:Config-11.jpg|边框|居中|无框]]
[[分类:NRF52832DK]]
[[分类:实验手册]]
510
个编辑

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

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

导航菜单