在先前我們已經介紹了富芮坤主從一體多鏈接的概念,現在,我們將深入解析其技術文檔,為大家提供更詳盡的說明。
網絡拓撲
目前支持連接最多層數為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設備,隨便連接任意設備,可以向任意節點發送消息。
-
通信協議
+關注
關注
28文章
879瀏覽量
40297 -
指令
+關注
關注
1文章
607瀏覽量
35692 -
網絡拓撲
+關注
關注
0文章
101瀏覽量
11373
原文標題:【技術專區】富芮坤主從一體多鏈接通信協議說明
文章出處:【微信號:FREQCHIP,微信公眾號:FREQCHIP 富芮坤】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論