很疑惑,普通节点自身不存储整个网络里其他节点的信息,那么如何使一个普通节点向其他节点发送消息呢?
又或者说,这种需求不大,没有相应的功能,需要用户自行编写逻辑.
很疑惑,普通节点自身不存储整个网络里其他节点的信息,那么如何使一个普通节点向其他节点发送消息呢?
又或者说,这种需求不大,没有相应的功能,需要用户自行编写逻辑.
您好,mesh网络的数据包都走广播,本身就支持普通节点之间互相传数据,前提是普通节点知道向某个地址发包。
如果目标地址是单播地址,那么发包方需要先知道收包方的地址,那需要中心节点转达,或是其他手段比如说组播和全体广播来得知收包方地址;
如果目标地址是组播地址,那么可以利用地址订阅的功能来实现,订阅地址一般由管理员或是代码里预先配置好,比如说ABC三个节点都订阅了组播地址X,那么节点D可以直接向地址X发包,ABC三个节点都可以收到。
最近在使用MESH中,发现不同于BLE连接, 走广播层的MESH网络在配网节点RESET后,网络中的普通节点该怎样识别配网者掉线问题呢?想到一种使用心跳包的机制,但是通过广播层这种多对多的机制,并不适用。请问有更好的解决方案么,还是说在常见的方案中,需求并不大
心跳包可以加,不过鉴于mesh网络的小吞吐量,心跳包的频次不可太高,故判断掉线的实时性不会很好,要根据实际节点数量和发包频次来安排,比如说100个普通节点+一个中心节点,安排每个普通节点1s一次心跳包,那么中心节点承载不了的,可以考虑5分钟一次心跳包或者更久的间隔;中心节点收到心跳包给普通节点回包,普通节点没有拿到回包则判断中心节点异常或是通信异常。
对于目标节点有周期性发包的情况,本节点也可以读LPR来间接判断目标节点有没有掉线。比如说A节点会收到B节点周期性的包,已经记录在A节点的RPL中;A节点可以每隔一段时间查看RPL中B节点的包序列号是否有增长来间接判断B节点的在线情况。中心节点一般使用0x01作为网络地址;RPL获取接口函数:bt_mesh_rpl_list_get。
好的,感谢大佬
CH57X有没有heartbeat模型