在先前我們已經(jīng)介紹了富芮坤主從一體多鏈接的概念,現(xiàn)在,我們將深入解析其技術(shù)文檔,為大家提供更詳盡的說明。
目前支持連接最多層數(shù)為5級,每個節(jié)點下面最多可連接16個子設(shè)備。具體級數(shù)和子設(shè)備個數(shù)可以在入網(wǎng)前可以通過不同的應(yīng)用場景進行配置。
此組網(wǎng)一般使用場景為一個網(wǎng)絡(luò)內(nèi)有高于20個數(shù)量的設(shè)備需要統(tǒng)一管理,比如跳繩類應(yīng)用,一個班級組網(wǎng)設(shè)備數(shù)量有60個左右。
當(dāng)小于等于20個設(shè)備時,建議可以直接使用我們的一拖多功能,可以直接實現(xiàn)一拖20個設(shè)備。
通信協(xié)議
2.1、手機(控制端C)下發(fā)指令到設(shè)備
手機端下發(fā)指令給設(shè)備端共有3個指令,0xE1,0xE3,0xE4指令,下方會詳解。
手機通過UUID為FFF1的特征將數(shù)據(jù)下發(fā)到設(shè)備。
2.1.1、0xE1指令:發(fā)送數(shù)據(jù)給對應(yīng)節(jié)點
l 指令包格式說明
Type(1byte) | Node id(2byte) | Data(n byte) |
E1 | 03 00 | 12 FA 9C |
代表手機端需要發(fā)送0x12FA9C這3個字節(jié)數(shù)據(jù)給node id為0x0003的設(shè)備
l 發(fā)送查詢路由表信息指令
Type(1byte) | Node id(2byte) | Data(2 byte) |
E1 | FFFF | 0000 |
此指令為固定指令,代表手機向root節(jié)點(root的node id固定為0xFFFF)請求路由表信息??蛻魬?yīng)用層數(shù)據(jù)需要避開data數(shù)據(jù)為0x0000。
請求的路由表信息會通過E2指令返回給手機,詳解見下方
2.1.2、0xE3指令:配置節(jié)點信息(debug調(diào)試使用,正常應(yīng)用場景請不要使用)
0xE3指令只針對手機連接的那個節(jié)點
l 通過log打印節(jié)點信息
Type(1byte) | Data(1 byte) |
E3 | C0 |
控制端連接根節(jié)點(MULTI CON_FFFF),發(fā)送指令E3C0,可以在根節(jié)點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
節(jié)點0x0001處于第2層,第0個節(jié)點
節(jié)點0x0002處于第3層,節(jié)點0x0001的子節(jié)點中的第0個節(jié)點
節(jié)點0x0003處于第3層,節(jié)點0x0001的子節(jié)點中的第1個節(jié)點
l 重置節(jié)點node id
Type(1byte) | Data(1 byte) |
E3 | C1 |
2.1.3、0xE4指令:群發(fā)指令。所有節(jié)點都可以收到此數(shù)據(jù)
Type(1byte) | Data(n byte) |
E4 | 12 FA 9C |
所有設(shè)備都會收到手機端下發(fā)的3個字節(jié)數(shù)據(jù)0x12FA9C
2.2、手機(控制端C)收到設(shè)備發(fā)來的指令
設(shè)備通過UUID為FFF4的特征將數(shù)據(jù)上報給手機。
設(shè)備發(fā)送給手機的指令格式如下,其中cmd取值為0xF1,0xF4,0xF5,0xF6
Type(1byte) | Node id(2byte) | Cmd(1byte) | Data(n byte) |
2.2.1、設(shè)備上線狀態(tài)上報
Type(1byte) | Node id(2byte) | Cmd(1byte) | Data(2 byte) |
E2 | FF FF | F1 | 03 00 |
代表node id為0x0003的設(shè)備組網(wǎng)上線成功
2.2.2、設(shè)備下線狀態(tài)上報
Type(1byte) | Node id(2byte) | Cmd(1byte) | Data(2 byte) |
E2 | FF FF | F4 | 03 00 |
代表node id為0x0003的設(shè)備從網(wǎng)絡(luò)內(nèi)掉線
2.2.3、手機請求的路由表信息上報
Type(1byte) | Node id(2byte) | Cmd(1byte) | Data(n byte) |
E2 | FFFF | F5 | Route_table_info |
Data(Route_table_info):
Num:節(jié)點個數(shù) | Index:分包標(biāo)識 | Node_ID1 | Layer | LayerID | 循環(huán)(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結(jié)尾(最后一包)。如一共三包,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個節(jié)點的信息,分別是0x0001 0x0002 0x0003
FF :路由表數(shù)據(jù)只有一包
0x0001:處于第03層,第3層序號是00, 父節(jié)點是第二層序號為01的節(jié)點,即 0x0002
0x0002:處于第02層,第2層序號為01
0x0003:處于第02層, 第2層序號為00
按照數(shù)據(jù)恢復(fù)出網(wǎng)絡(luò)拓撲結(jié)構(gòu)如下圖:
2.3、代碼介紹
l 獲取多連接組網(wǎng)的SDK
l 打開工程,可以到ble_multi_link.h頭文件進行一些參數(shù)的配置
比如網(wǎng)絡(luò)層級,每個節(jié)點最大連接數(shù)量等
l 首先調(diào)用ble_multi_link_init函數(shù)進行組網(wǎng)參數(shù)的初始化
l 當(dāng)設(shè)備組網(wǎng)成功或者掉線后會進入multi_con_netin_cb、multi_con_netout_cb回調(diào)
l 當(dāng)設(shè)備被手機連接或者手機斷開會進入multi_con_control_disconnect_cb、multi_con_control_connected_cb回調(diào)
l 當(dāng)設(shè)備位于中間節(jié)點時,設(shè)備連接的子節(jié)點掉線或者上線,會進入master_child_node_dropped_cb、master_child_node_online_cb回調(diào)
l 當(dāng)設(shè)備接收到手機或者設(shè)備發(fā)送過來的信息時,會進入device_receive_data函數(shù)??梢栽谶@里進行一定的數(shù)據(jù)處理
l 當(dāng)設(shè)備需要發(fā)送數(shù)據(jù)給手機時,可以調(diào)用device_send_data_to_phone函數(shù)進行發(fā)送
l 當(dāng)設(shè)備需要發(fā)送數(shù)據(jù)給其它設(shè)備是,可以調(diào)用device_send_data_to_device函數(shù)
l 當(dāng)設(shè)備需要群發(fā)數(shù)據(jù)時,可以調(diào)用device_send_data_to_all_device函數(shù)
l 其它更多,比如獲取當(dāng)前設(shè)備的角色:multi_link_get_role、node id:multi_link_get_node_id、層級:multi_link_get_layer、從機連接數(shù)量:multi_link_get_slave_num等等可以到ble_multi_link.h查看函數(shù)具體說明
l 若設(shè)備需要串口透傳或者發(fā)送指令,只需要實現(xiàn)串口部分收發(fā),根據(jù)自己的串口協(xié)議,配合如上函數(shù)發(fā)送到對應(yīng)設(shè)備即可
使用說明
1、 指定根節(jié)點:上電前先將PD7拉低,上電后即為根節(jié)點。其他節(jié)點默認上電為從節(jié)點
2、 上電后根節(jié)點自動發(fā)起組網(wǎng)。
3、 初始上電,根節(jié)點node id為0xFFFF,其他節(jié)點Node_ID為0。初次上電連接后,由根節(jié)點分配節(jié)點ID
4、 入網(wǎng)成功連接后,節(jié)點會收到入網(wǎng)成功的消息回調(diào)。
5、 斷線自恢復(fù),某一中間節(jié)點掉電導(dǎo)致掉線后,其子節(jié)點在一定時間內(nèi)會自動加入網(wǎng)絡(luò),掉線的節(jié)點在上電后也可以自動加入網(wǎng)絡(luò),且node id不發(fā)生改變。
6、 手機端BLE調(diào)試軟件掃描,會發(fā)現(xiàn)很多MULTI CON_xxxx設(shè)備,隨便連接任意設(shè)備,可以向任意節(jié)點發(fā)送消息。
-
通信協(xié)議
+關(guān)注
關(guān)注
28文章
839瀏覽量
40210 -
指令
+關(guān)注
關(guān)注
1文章
606瀏覽量
35611 -
網(wǎng)絡(luò)拓撲
+關(guān)注
關(guān)注
0文章
98瀏覽量
11342
原文標(biāo)題:【技術(shù)專區(qū)】富芮坤主從一體多鏈接通信協(xié)議說明
文章出處:【微信號:FREQCHIP,微信公眾號:FREQCHIP 富芮坤】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論