在先前我们已经介绍了富芮坤主从一体多链接的概念,现在,我们将深入解析其技术文档,为大家提供更详尽的说明。
网络拓扑
目前支持连接最多层数为5级,每个节点下面最多可连接16个子设备。具体级数和子设备个数可以在入网前可以通过不同的应用场景进行配置。
此组网一般使用场景为一个网络内有高于20个数量的设备需要统一管理,比如跳绳类应用,一个班级组网设备数量有60个左右。
当小于等于20个设备时,建议可以直接使用我们的一拖多功能,可以直接实现一拖20个设备。
通信协议
2.1、手机(控制端C)下发指令到设备
手机端下发指令给设备端共有3个指令,0xE1,0xE3,0xE4指令,下方会详解。
手机通过UUID为FFF1的特征将数据下发到设备。
2.1.1、0xE1指令:发送数据给对应节点
l 指令包格式说明
Type(1byte) | Node id(2byte) | Data(n byte) |
E1 | 03 00 | 12 FA 9C |
代表手机端需要发送0x12FA9C这3个字节数据给node id为0x0003的设备
l 发送查询路由表信息指令
Type(1byte) | Node id(2byte) | Data(2 byte) |
E1 | FFFF | 0000 |
此指令为固定指令,代表手机向root节点(root的node id固定为0xFFFF)请求路由表信息。客户应用层数据需要避开data数据为0x0000。
请求的路由表信息会通过E2指令返回给手机,详解见下方
2.1.2、0xE3指令:配置节点信息(debug调试使用,正常应用场景请不要使用)
0xE3指令只针对手机连接的那个节点
l 通过log打印节点信息
Type(1byte) | Data(1 byte) |
E3 | C0 |
控制端连接根节点(MULTI CON_FFFF),发送指令E3C0,可以在根节点log中打印拓扑信息
< 1>NodeCon[ 1]: <-> layer:2 slave_id: 0
< 2>NodeCon[ 2]: <-> layer:3 slave_id: 0
< 3>NodeCon[ 3]: <-> layer:3 slave_id: 100
节点0x0001处于第2层,第0个节点
节点0x0002处于第3层,节点0x0001的子节点中的第0个节点
节点0x0003处于第3层,节点0x0001的子节点中的第1个节点
l 重置节点node id
Type(1byte) | Data(1 byte) |
E3 | C1 |
2.1.3、0xE4指令:群发指令。所有节点都可以收到此数据
Type(1byte) | Data(n byte) |
E4 | 12 FA 9C |
所有设备都会收到手机端下发的3个字节数据0x12FA9C
2.2、手机(控制端C)收到设备发来的指令
设备通过UUID为FFF4的特征将数据上报给手机。
设备发送给手机的指令格式如下,其中cmd取值为0xF1,0xF4,0xF5,0xF6
Type(1byte) | Node id(2byte) | Cmd(1byte) | Data(n byte) |
2.2.1、设备上线状态上报
Type(1byte) | Node id(2byte) | Cmd(1byte) | Data(2 byte) |
E2 | FF FF | F1 | 03 00 |
代表node id为0x0003的设备组网上线成功
2.2.2、设备下线状态上报
Type(1byte) | Node id(2byte) | Cmd(1byte) | Data(2 byte) |
E2 | FF FF | F4 | 03 00 |
代表node id为0x0003的设备从网络内掉线
2.2.3、手机请求的路由表信息上报
Type(1byte) | Node id(2byte) | Cmd(1byte) | Data(n byte) |
E2 | FFFF | F5 | Route_table_info |
Data(Route_table_info):
Num:节点个数 | Index:分包标识 | Node_ID1 | Layer | LayerID | 循环(Node_ID--Layer--LayerID) |
(1bytes) | (1bytes) | (2bytes) | (1byte) | (4bytes) | 。。。。。。 |
LayerID:
[0] | [1] | [2] | [3] |
Layer2_ID | Layer3_ID | Layer4_ID | Layer5_ID |
注意:
如果需要分包的话,index从1(第一包)开始,0xFF结尾(最后一包)。如一共三包,index分别为0x01,0x02,0xFF
指令示例:
Tx:E1 FF FF 00 00
Rx:E2 FF FF F5 03 FF 01 00 03 01 00 00 00 02 00 02 01 00 00 00 03 00 02 00 00 00 00
03 :本包传输了3个节点的信息,分别是0x0001 0x0002 0x0003
FF :路由表数据只有一包
0x0001:处于第03层,第3层序号是00, 父节点是第二层序号为01的节点,即 0x0002
0x0002:处于第02层,第2层序号为01
0x0003:处于第02层, 第2层序号为00
按照数据恢复出网络拓扑结构如下图:
2.3、代码介绍
l 获取多连接组网的SDK
l 打开工程,可以到ble_multi_link.h头文件进行一些参数的配置
比如网络层级,每个节点最大连接数量等
l 首先调用ble_multi_link_init函数进行组网参数的初始化
l 当设备组网成功或者掉线后会进入multi_con_netin_cb、multi_con_netout_cb回调
l 当设备被手机连接或者手机断开会进入multi_con_control_disconnect_cb、multi_con_control_connected_cb回调
l 当设备位于中间节点时,设备连接的子节点掉线或者上线,会进入master_child_node_dropped_cb、master_child_node_online_cb回调
l 当设备接收到手机或者设备发送过来的信息时,会进入device_receive_data函数。可以在这里进行一定的数据处理
l 当设备需要发送数据给手机时,可以调用device_send_data_to_phone函数进行发送
l 当设备需要发送数据给其它设备是,可以调用device_send_data_to_device函数
l 当设备需要群发数据时,可以调用device_send_data_to_all_device函数
l 其它更多,比如获取当前设备的角色:multi_link_get_role、node id:multi_link_get_node_id、层级:multi_link_get_layer、从机连接数量:multi_link_get_slave_num等等可以到ble_multi_link.h查看函数具体说明
l 若设备需要串口透传或者发送指令,只需要实现串口部分收发,根据自己的串口协议,配合如上函数发送到对应设备即可
使用说明
1、 指定根节点:上电前先将PD7拉低,上电后即为根节点。其他节点默认上电为从节点
2、 上电后根节点自动发起组网。
3、 初始上电,根节点node id为0xFFFF,其他节点Node_ID为0。初次上电连接后,由根节点分配节点ID
4、 入网成功连接后,节点会收到入网成功的消息回调。
5、 断线自恢复,某一中间节点掉电导致掉线后,其子节点在一定时间内会自动加入网络,掉线的节点在上电后也可以自动加入网络,且node id不发生改变。
6、 手机端BLE调试软件扫描,会发现很多MULTI CON_xxxx设备,随便连接任意设备,可以向任意节点发送消息。
全部0条评论
快来发表一下你的评论吧 !