Re: BLE_MESH的一些问题
Posted: Tue May 21, 2019 12:03 pm
Wangcheng wrote: ↑Tue May 21, 2019 11:09 am问题2: 是的,地址包含单播地址,组地址,虚拟地址,未分配地址(Unassigned Address) 4种。chenluhui2019 wrote: ↑Tue May 21, 2019 1:04 am谢谢支持Wangcheng wrote: ↑Mon May 13, 2019 7:08 am
Hi chenluhui,
问题1:
方案可行,但是不建议这样操作,在手机app(provisioner)上实现?
补充: 一般开发网关有两种方式:方式1 APP作为网关(比如我们提供的EspBleMesh App),方式2 不要APP,直接用设备作为网关(比如我们提供的ble_mesh_provisioner demo),它们都具备将设备配置入网的能力。
设备配置入网后网络中就有Provisioner,Node1,Node2,Node3 .Provisioner 知道Node1,Node2,Node3的地址。Node1,Node2,Node3知道Provisioner 的地址。它们两者之间可以使用单播地址(设备地址)进行通讯。
说明: 代理节点从一种承载层接收消息并将消息通过另一种承载层重新发送,目的是将只支持 GATT 承载层的通讯设备接入到蓝牙 mesh 网络中,比如手机 App。承载层一般包含广播承载层及GATT承载层等。
问题2:采用的是设备地址(单播地址)通讯的。
问题3:你可以通过Vendor model来写心跳,也可以采用Health Server相关的Model,Health Model相关的API在esp_ble_mesh_health_model_api.h
问题4:暂时没有功能,你可以把它当做普通按键使用
问题5:provisioner 知道节点的地址,可以采用vender model的方式发送自定义消息.
问题6:多个provisioner共享网络中的消息,你需要自己想一个机制去获取网络中的信息,比如采用一个节点存放网络中所有节点的地址。
问题7:你是在哪个app上进行操作的?
问题8:在NRF的手机app里,右下角“Setting”里有个“Network Key”,修改它就意味着修改了provisioner的Netkey,provisioner配置其它设备入网时会把这个netkey分配给入网的节点。
问题2:采用的是设备地址(单播地址)通讯的。
==》意思是,ble_mesh_client_model和ble_mesh_node在设置了remote_addr值之后,就算两个node之间没有发布订阅关系也能用单播地址通讯?
问题5:provisioner 知道节点的地址,可以采用vender model的方式发送自定义消息.
==》我是否可以理解成:因为都是软件栈,手机APP里可以模拟成client,通过GATT代理(proxy)特性来向server(node)发送消息。
vendor model有分client和server吗?
问题6:多个provisioner共享网络中的消息,你需要自己想一个机制去获取网络中的信息,比如采用一个节点存放网络中所有节点的地址。
==》那是否需要根据NRF的源码做修改,使得多个provisioner(手机)里面关于node的数据通过任意方式(比如云端)同步,就能做到任意手机都能充当provisoner。
问题7:你是在哪个app上进行操作的?
==》我是在NRF的app上操作的,我看了代码,ESP_BLE_MESH_NODE_PROV_RESET_EVT没有做任何处理,可能是这个功能还没写,所以不会是的Node->device
问题8:在NRF的手机app里,右下角“Setting”里有个“Network Key”,修改它就意味着修改了provisioner的Netkey,provisioner配置其它设备入网时会把这个netkey分配给入网的节点。
==》修改它就意味着修改了provisioner的Netkey:Provisioner和Node的netkey在组网后应该都是一样的,您这里说的意味着修改了provisioner的Netkey,那provisioner的Netkey改了,不是全网的Netkey都变掉了吗?
问题9:组网后,netkey是否可以在代码里获取得到?我看手机app上能显示netkey?
问题10:贵司reset node的操作执行函数是否还未做出来?现在无法实现node->device的操作,只能复位开发板
问题11:ble_mesh_client_model似乎不能在ESP32_PICO_KIT板子上跑,会不断的报错重启。
如果我两块板子(node)都烧写ble_mesh_client_model的代码,那都有client和server存在了,都绑上一样的appkey,就可以实现互发消息了对吧?
另外:贵司的esp32可以和Nodic或者其他厂家的组网吗?贵司ble_mesh的sdk正式版本何时能提供呢?
问题5: 可以这样理解,Vendor model 和 SIG model其实差不多,SIG model 采用官方定义的消息进行通讯,SIG model 采用自定义的消息进行通讯。
问题6: 只有网络资源是共享的,理论是可行的。 你可以将网络资源存到云端,也可以将网络资源存储到网络中的某个设备中。
问题7: 目前还没有标准的方法,不过也是可以实现这个功能的。
问题8:如果 provisioner 拥有多个 Netkey ,provisioner 在配置设备时,可以选择使用哪个NetKey分配给设备。provisioner 可以使用不同的Netkey和网络中的节点进行通讯。每个节点的Netkey都是provisioner分配的。
问题9:provisioner会发送 Provisioning data 消息给节点,该消息包含 Network Key,Key Index ,Flags,IV Index,Unicast Address信息。 你可以尝试在协议栈中mesh_main.c中的bt_mesh_provision中函数找到这些值。
问题7与10: 在 ESP_BLE_MESH_NODE_PROV_RESET_EVT 下调用API : esp_ble_node_prov_enable
问题11:这个我们会尽快答复你。