簡(jiǎn)介
前面文章講解了ble_client的相關(guān)節(jié)點(diǎn)和業(yè)務(wù)處理,有興趣的可以跳轉(zhuǎn)鏈接【EsDA應(yīng)用】藍(lán)牙客戶(hù)端節(jié)點(diǎn)詳解去查看。
本文主要基于MPC_ZC1開(kāi)發(fā)板以及可將節(jié)點(diǎn)進(jìn)行拖拽連接的圖形化設(shè)計(jì)工具AWFlow Designer,著重對(duì)UIS8910DM平臺(tái)的板載藍(lán)牙的配套節(jié)點(diǎn)以及示例進(jìn)行講解。本文除了對(duì)ble_server設(shè)備端節(jié)點(diǎn)進(jìn)行詳細(xì)闡述還有以MPC_ZC1開(kāi)發(fā)板做藍(lán)牙服務(wù)器的相關(guān)應(yīng)用業(yè)務(wù)介紹如:定義支持的服務(wù),發(fā)布服務(wù)器以便遠(yuǎn)程客戶(hù)端可連接,響應(yīng)讀取和寫(xiě)入請(qǐng)求等。節(jié)點(diǎn)介紹
因藍(lán)牙服務(wù)端節(jié)點(diǎn)中的屬性數(shù)量過(guò)多,所以本節(jié)只介紹幾個(gè)重點(diǎn)屬性,其他的屬性?xún)?nèi)容詳見(jiàn)AWFlow Designer上相關(guān)節(jié)點(diǎn)的幫助文檔。
1. 配置節(jié)點(diǎn)1.1 ble_server創(chuàng)建BLE服務(wù)端設(shè)備,保存用戶(hù)傳入的廣播配置。1.1.1 屬性- 發(fā)現(xiàn)模式:值為0表示不可發(fā)現(xiàn)模式;值為1表示有限可發(fā)現(xiàn)模式;值為2表示普通可發(fā)現(xiàn)模式。
- 廣播類(lèi)型:值為0表示可連接的非定向廣播;值為1表示可連接的定向廣播;值為2表示不可連接的非定向廣播;值為3表示可掃描的非定向廣播。
- 廣播信道:廣播通道映射在37、38、39通道通信。值為0時(shí)表示通道37被使用,值為1時(shí)表示通道38被使用,值為2時(shí)表示通道39被使用。
-
廣播的過(guò)濾策略:
值為0時(shí)表示處理所有設(shè)備的掃描和連接請(qǐng)求;
值為1時(shí)表示處理所有設(shè)備的連接請(qǐng)求和只有白名單上的設(shè)備的掃描請(qǐng)求;
值為2時(shí)表示處理所有設(shè)備的掃描請(qǐng)求和只有白名單上的設(shè)備的連接請(qǐng)求;
值為3時(shí)表示只處理在白名單上的設(shè)備的掃描和連接請(qǐng)求。
-
SMP配對(duì)模式的參數(shù):
smp_pair_mode |
io_cap |
安全等級(jí) |
SECURE_CONNECTION_PASSKEY |
KEYBOARD_DISP |
最高 |
SECURE_CONNECTION_JUSTWORK |
NOIN_NOOUT |
次之 |
LEGACY_PASSKEY |
KEYBOARD_DISP |
第三 |
LEGACY_JUSTWORK |
NOIN_NOOUT |
最低 |
- 支持的服務(wù)個(gè)數(shù):支持提供的服務(wù)個(gè)數(shù),需要與流圖中添加的服務(wù)數(shù)量一致。* 配置節(jié)點(diǎn)無(wú)輸入輸出。
- BLE服務(wù)端配置節(jié)點(diǎn):關(guān)聯(lián)到的BLE服務(wù)端配置節(jié)點(diǎn)。
- 服務(wù)UUID:支持提供服務(wù)的UUID。支持2個(gè)字節(jié)或16個(gè)字節(jié),按照小端模式依次用逗號(hào)隔開(kāi)。
- 支持服務(wù)的特征相關(guān)屬性:
特征值的格式 |
特征聲明的性質(zhì) |
特征值的權(quán)限 |
短UUID |
廣播屬性 |
可讀 |
修補(bǔ)長(zhǎng)度 |
讀屬性 |
可寫(xiě) |
寫(xiě)通知 |
不帶回復(fù)的寫(xiě)屬性 |
讀取認(rèn)證 |
組 |
帶回復(fù)的寫(xiě)屬性 |
讀取授權(quán) |
沖突通知 |
通知屬性 |
讀取加密 |
追加寫(xiě) |
指示屬性 |
讀取認(rèn)證文件 |
|
簽名認(rèn)證的寫(xiě)屬性 |
寫(xiě)認(rèn)證 |
|
擴(kuò)展屬性 |
寫(xiě)授權(quán) |
|
|
寫(xiě)加密 |
|
|
寫(xiě)認(rèn)證文件 |
|
|
只允許經(jīng)典藍(lán)牙訪(fǎng)問(wèn) |
-
payload:輸入數(shù)據(jù)。傳入特征值數(shù)據(jù),可以使用“fscript”節(jié)點(diǎn)作為前級(jí)節(jié)點(diǎn),設(shè)置需要寫(xiě)入的數(shù)據(jù)。
-
payloadLength:輸入數(shù)據(jù)。傳入特征值數(shù)據(jù)的長(zhǎng)度,可以使用“fscript”節(jié)點(diǎn)作為前級(jí)節(jié)點(diǎn),設(shè)置需要寫(xiě)入的數(shù)據(jù)長(zhǎng)度,最大不超過(guò)255。
2.2.1 屬性
-
BLE服務(wù)端配置節(jié)點(diǎn):關(guān)聯(lián)到的BLE服務(wù)端配置節(jié)點(diǎn)。
- 藍(lán)牙本地設(shè)備名稱(chēng):藍(lán)牙服務(wù)端本地設(shè)備的名稱(chēng),代碼里自動(dòng)將此參數(shù)加入到廣播數(shù)據(jù)包的類(lèi)型為09的小數(shù)據(jù)包中。
廣播數(shù)據(jù)包最長(zhǎng)31個(gè)字節(jié),而這31個(gè)字節(jié)又被拆分成很多小數(shù)據(jù)包,每個(gè)小數(shù)據(jù)包代表一類(lèi)廣播數(shù)據(jù)。
每個(gè)小數(shù)據(jù)包是由:length(數(shù)據(jù)長(zhǎng)度)+type(類(lèi)型)+data(數(shù)據(jù)內(nèi)容)構(gòu)成的。
-
需要廣播的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)長(zhǎng)度:表示需要廣播的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)長(zhǎng)度(數(shù)據(jù)內(nèi)容的字節(jié)長(zhǎng)度+1)。因?yàn)楦袷绞莄sv,所以多個(gè)數(shù)據(jù)包的數(shù)據(jù)長(zhǎng)度按順序用逗號(hào)來(lái)隔開(kāi)。
-
需要廣播的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)類(lèi)型:表示需要廣播的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)長(zhǎng)度(數(shù)據(jù)內(nèi)容的字節(jié)長(zhǎng)度+1)。多個(gè)數(shù)據(jù)包的數(shù)據(jù)類(lèi)型按順序用逗號(hào)來(lái)隔開(kāi)。
-
掃描響應(yīng)的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)內(nèi)容:表示掃描響應(yīng)的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)內(nèi)容。多個(gè)數(shù)據(jù)包的數(shù)據(jù)內(nèi)容按順序用逗號(hào)來(lái)隔開(kāi)。
-
掃描響應(yīng)的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)類(lèi)型:表示掃描響應(yīng)的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)類(lèi)型,多個(gè)數(shù)據(jù)包的數(shù)據(jù)類(lèi)型按順序用逗號(hào)來(lái)隔開(kāi)。具體的廣播數(shù)據(jù)包類(lèi)型詳細(xì)信息可在網(wǎng)上進(jìn)行查閱。
-
數(shù)據(jù)類(lèi)型為09表示本地設(shè)備名稱(chēng)即屬性藍(lán)牙本地設(shè)備名稱(chēng),現(xiàn)已被后續(xù)代碼自動(dòng)處理加入到了廣播數(shù)據(jù)包中。計(jì)算長(zhǎng)度時(shí)需注意,如若廣播數(shù)據(jù)包超過(guò)最長(zhǎng)31個(gè)字節(jié)的內(nèi)容,則截?cái)唷?/span>
-
掃描響應(yīng)的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)內(nèi)容:表示掃描響應(yīng)的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)內(nèi)容。多個(gè)數(shù)據(jù)包的數(shù)據(jù)內(nèi)容按順序用逗號(hào)來(lái)隔開(kāi)。
如:需要廣播的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)長(zhǎng)度為0x02;需要廣播的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)類(lèi)型為:0x01;需要廣播的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)內(nèi)容為:0x06。那么算上藍(lán)牙本地設(shè)備名稱(chēng):(BLE-ZC1)0x42,0x4c,0x45,0x2d,0x5a,0x43,0x31,
那么最終的廣播數(shù)據(jù)包為0x08(數(shù)據(jù)長(zhǎng)度),0x09(數(shù)據(jù)類(lèi)型),
0x42,0x4c,0x45,0x2d,0x5a,0x43,0x31(數(shù)據(jù)內(nèi)容BLE-ZC1),
0x02(數(shù)據(jù)長(zhǎng)度),0x01(數(shù)據(jù)類(lèi)型),
0x06(數(shù)據(jù)內(nèi)容),
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
-
ble_server_adv節(jié)點(diǎn)的輸入并無(wú)實(shí)際意義的輸入,由ble_server_service節(jié)點(diǎn)作為前級(jí)節(jié)點(diǎn),進(jìn)入當(dāng)前節(jié)點(diǎn)的on_data虛函數(shù)中開(kāi)啟廣播。
* sink類(lèi)型節(jié)點(diǎn)無(wú)輸出功能
??業(yè)務(wù)處理
定義支持的服務(wù):由ble_server_service節(jié)點(diǎn)添加服務(wù)UUID和特征值UUID以及特征值數(shù)據(jù);發(fā)布服務(wù)器,以便遠(yuǎn)程客戶(hù)端可連接:由ble_server_adv節(jié)點(diǎn)開(kāi)啟廣播(在一個(gè)運(yùn)行程序中不能多次開(kāi)啟廣播)后服務(wù)端藍(lán)牙準(zhǔn)備完成,開(kāi)始等待客戶(hù)端藍(lán)牙設(shè)備連接;以及后續(xù)的響應(yīng)讀取和寫(xiě)入請(qǐng)求。實(shí)現(xiàn)框圖如下所示。
1. 資源準(zhǔn)備
硬件上依舊如【EsDA應(yīng)用】藍(lán)牙客戶(hù)端節(jié)點(diǎn)詳解使用MPC_ZC1開(kāi)發(fā)板作為服務(wù)器去廣播數(shù)據(jù),軟件上使用可拖拽連線(xiàn)的圖形化設(shè)計(jì)工具AWFlow Designer去設(shè)計(jì)流圖以及手機(jī)app(BLE調(diào)試寶)作為客戶(hù)端進(jìn)行藍(lán)牙通信。2. 添加節(jié)點(diǎn)并繪制流圖
添加timer,gpio,trigger,fscript,ble_server_service和ble_server_adv節(jié)點(diǎn)到畫(huà)布中,如下圖所示。
3. 配置節(jié)點(diǎn)添加多個(gè)藍(lán)牙服務(wù)端的服務(wù)和特征值數(shù)據(jù),并開(kāi)啟藍(lán)牙廣播。需注意的是本藍(lán)牙模塊在程序運(yùn)行時(shí)不能重復(fù)多次開(kāi)啟藍(lán)牙廣播,否則會(huì)打開(kāi)藍(lán)牙失敗。
雙擊gpio節(jié)點(diǎn)的前驅(qū)timer節(jié)點(diǎn),打開(kāi)屬性面板設(shè)置定時(shí)周期(ms),定時(shí)去讀取gpio的引腳電平狀態(tài)。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。
雙擊gpio節(jié)點(diǎn),配置屬性如下圖所示,根據(jù)需求選擇所需的gpio引腳,本章節(jié)使用的是P4.5,并設(shè)置為浮空輸入,用戶(hù)可根據(jù)自身需求設(shè)置該gpio引腳號(hào)。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。
雙擊gpio的后繼節(jié)點(diǎn)fscript,功能代碼內(nèi)容的主要目的是讓后續(xù)的trigger節(jié)點(diǎn)只能被觸發(fā)一次,因P4.5的引腳默認(rèn)是低電平,且trigger節(jié)點(diǎn)被觸發(fā)只能收到msg.trigger_stop屬性消息,所以具體代碼如下。
if (msg.payload == 1) {
msg.trigger_stop = "reset";
}
雙擊trigger節(jié)點(diǎn),本節(jié)點(diǎn)主要目的是只一次觸發(fā)多個(gè)后繼節(jié)點(diǎn),所以在此選擇等待被重置模式(Wait_to_be_reset_mode)在trigger被觸發(fā)前,不傳遞任何的消息給后繼節(jié)點(diǎn)。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。
雙擊第一欄的fscript節(jié)點(diǎn),本節(jié)點(diǎn)作為ble_server_service節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),所以具體內(nèi)容即ble_server_service的輸入組:payload(傳入的特征值數(shù)據(jù)),payloadLength(傳入的特征值數(shù)據(jù)的長(zhǎng)度)。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。
msg.payload = "hello";
set(msg.payloadLength, u16("5"));
雙擊第一欄的ble_server_service節(jié)點(diǎn)中的屬性:BLE服務(wù)端配置節(jié)點(diǎn)旁的鉛筆圖標(biāo),屬性:BLE服務(wù)端配置節(jié)點(diǎn)在本流圖中只需要配置一遍即可,后續(xù)不再闡述。需注意的是支持的服務(wù)個(gè)數(shù)的屬性值必須與本流圖中所添加的服務(wù)個(gè)數(shù)數(shù)量一致,其他屬性參數(shù)可用demo流圖默認(rèn)值。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。雙擊第一欄的ble_server_service節(jié)點(diǎn),只需要確定需要添加的服務(wù)UUID和特征值UUID,其他參數(shù)視具體情況而定,也可使用默認(rèn)的參數(shù)值。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。
雙擊第二欄的fscript節(jié)點(diǎn),其內(nèi)容與第一欄的fscript節(jié)點(diǎn)大體一致,都是作為ble_server_service節(jié)點(diǎn)的前驅(qū)節(jié)點(diǎn),所以具體內(nèi)容即ble_server_service的輸入組:payload(傳入的特征值數(shù)據(jù)),payloadLength(傳入的特征值數(shù)據(jù)的長(zhǎng)度)。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。
msg.payload = "server";
set(msg.payloadLength, u16("6"));
雙擊第二欄的ble_server_service節(jié)點(diǎn),其屬性與第一欄的ble_server_service節(jié)點(diǎn)大體一致,需要添加的服務(wù)UUID和特征值UUID不同,其他參數(shù)視具體情況而定,也可使用默認(rèn)的參數(shù)值。服務(wù)UUID:
0xf5,0x89,0x9b,0x5f,0x80,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0xfe,0x18,0x00,0x00
特征值UUID:
0xf5,0x89,0x9b,0x5f,0x80,0x00,0x00,0x80,0x00,0x10,0x00,0x00,0xfe,0xff,0x11,0x11
最后雙擊ble_server_adv節(jié)點(diǎn),自行設(shè)置藍(lán)牙本地設(shè)備名稱(chēng),以及需要廣播的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)長(zhǎng)度,類(lèi)型,內(nèi)容和掃描的每個(gè)小數(shù)據(jù)包的數(shù)據(jù)長(zhǎng)度,類(lèi)型,內(nèi)容。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。
4. 下載驗(yàn)證
下載流圖后可在BLE調(diào)試寶點(diǎn)擊藍(lán)牙服務(wù)選項(xiàng)對(duì)流圖提供的service進(jìn)行訪(fǎng)問(wèn),點(diǎn)擊每個(gè)service的左側(cè)箭頭,展開(kāi)對(duì)各個(gè)service提供的特征進(jìn)行查看,還可對(duì)支持操作的特性進(jìn)行讀寫(xiě)。
每次操作都會(huì)有相應(yīng)的日志信息,注意各服務(wù)UUID的聯(lián)系,實(shí)時(shí)日志如下所示。
BLE調(diào)試寶向特征值UUID為0x1111fffe寫(xiě)入12 34 56,作為服務(wù)端板子的串口打印可顯示收到的相應(yīng)數(shù)據(jù)如下。
技術(shù)交流群長(zhǎng)按識(shí)別如下二維碼可加入“EsDA嵌入式系統(tǒng)設(shè)計(jì)自動(dòng)化交流群”,與志同道合的朋友交流,并有專(zhuān)業(yè)技術(shù)人員為您答疑解惑,如有問(wèn)題可以咨詢(xún)小致微信:zlgmcu-888。
-
致遠(yuǎn)電子
+關(guān)注
關(guān)注
13文章
408瀏覽量
31340
原文標(biāo)題:【EsDA應(yīng)用】藍(lán)牙服務(wù)端節(jié)點(diǎn)詳解
文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論