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