藍牙作為一種近距離無線通信技術(shù),被廣泛使用在汽車,智能家居和醫(yī)療等領(lǐng)域中。本文主要介紹如何通過EsDA開發(fā)套件,快速實現(xiàn)藍牙客戶端的訂閱以及讀寫等操作。 簡介
藍牙是一種近距離無線通信技術(shù),可以免費運行在2.4G頻段,所以通常廣泛使用在物聯(lián)網(wǎng),移動終端和智能家居等行業(yè)中。我們EsDA大家族里面自然也有對藍牙功能的實現(xiàn),且只需要很短的時間就可實現(xiàn)藍牙通信,功能好用簡單又便捷。
本文主要基于MPC-ZC1的開發(fā)板,以及可將節(jié)點進行拖拽連接的圖形化設(shè)計工具AWFlow Designer,著重對UIS8910DM平臺的板載藍牙的配套節(jié)點以及示例進行講解。藍牙節(jié)點一共分為配置節(jié)點類型ble_server,ble_client2個,客戶端節(jié)點類型ble_client_in,ble_client_out,ble_client_subscribe3個以及服務(wù)端節(jié)點類型ble_server_adv,ble_server_service2個;因本文篇幅的原因所以主要圍繞著客戶端節(jié)點的使用,以下進行詳細介紹。
?節(jié)點簡介1. 配置節(jié)點1.1 ble_client節(jié)點1.1.1 屬性
掃描類型:啟動掃描時需要的掃描類型配置:
值為0表示被動掃描(僅僅接收廣播,不會發(fā)送掃描請求);
值為1時表示主動掃描(發(fā)送掃描請求數(shù)據(jù)給廣播的服務(wù)端,服務(wù)端收到后會返回掃描響應(yīng)數(shù)據(jù))。
- 掃描窗口的時間:掃描窗口時間的配置;
- 掃描間隔的時間:掃描間隔時間的配置;
注意:掃描窗口時間必須小于掃描間隔時間。
掃描過濾策略:掃描過濾策略的配置:
1表示只處理地址在白名單中的數(shù)據(jù)包,以及發(fā)給自己的可連接定向廣播;
2表示處理所有非定向廣播和可解析私有地址以及發(fā)給自己的可連接定向廣播;
3表示處理地址在白名單中和可解析私有地址以及發(fā)給自己的可連接定向廣播。
- 目標服務(wù)端設(shè)備名稱:目標服務(wù)端設(shè)備本地名稱;
SMP配對模式與參數(shù):
SMP配對模式 | 參數(shù) | 安全等級排名 |
SECURE_CONNECTION_PASSKEY | KEYBOARD_DISP | 最高 |
SECURE_CONNECTION_JUSTWORK | NOIN_NOOUT | 次之 |
LEGACY_PASSKEY | KEYBOARD_DISP | 第三 |
LEGACY_JUSTWORK | NOIN_NOOUT | 最低 |
- 掃描超時時間:表示持續(xù)掃描,直到與指定服務(wù)端建立連接。如果值不為0,則開啟掃描后使能掃描定時器,超時后如果仍未與指定服務(wù)端建立連接,則掃描停止。單位ms
配置節(jié)點無輸入輸出
2. 客戶端節(jié)點
2.1 ble_client_in節(jié)點
2.1.1 屬性
- BLE客戶端配置:綁定一個ble_client藍牙客戶端的配置節(jié)點;
- 服務(wù)UUID:需要讀的服務(wù)UUID。若服務(wù)UUID為自定義的16字節(jié)如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個字節(jié)0xff11;
特征值UUID:需要讀的特征值UUID。若特征值UUID為自定義的16字節(jié)如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個字節(jié)0xff01。
2.1.2 輸入
- payload:可以使用“timer”節(jié)點作為前級節(jié)點,定時讀取數(shù)據(jù)。
2.1.3 輸出
- characteristic_uuid:將讀取到的指定特征值的UUID輸出;
- payload:將讀取到的指定特征值的數(shù)組指針輸出。類型為uint8_t類型的指針;
- payloadLength:將讀取到的指定特征值的數(shù)據(jù)長度輸出;
- desc_num:將讀取到的指定特征值的描述符個數(shù)輸出。如果存在多個描述符,則存在多個名稱為“desc_uuid_%d”、“desc_value_%d”和“desc_value_length_%d”的屬性,其中%d指代當前是第幾個描述符;
- 舉例:該特征存在2個描述符,則存在以下名稱的屬性:desc_uuid_0,desc_value_0,desc_value_length_0和desc_uuid_1,desc_value_1,desc_value_length_1,desc_uuid_0;
- desc_uuid_0:第一個描述符的UUID,若為第二個描述符的UUID也可表示為desc_uuid_1。以此類推;
- desc_value_0:第一個描述符的值指針,若為第二個描述符的值也可表示為desc_value_1。以此類推;
- desc_value_length_0:第一個描述符的值的數(shù)據(jù)長度,若為第二個描述符的值的數(shù)據(jù)長度也可表示為desc_value_length_1。以此類推。
2.2 ble_client_out節(jié)點
2.2.1 屬性
- BLE客戶端配置:綁定一個ble_client藍牙客戶端的配置節(jié)點;
- 服務(wù)UUID:需要讀的服務(wù)UUID。若服務(wù)UUID為自定義的16字節(jié)如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個字節(jié)0xff11;
- 特征值UUID:需要讀的特征值UUID。若特征值UUID為自定義的16字節(jié)如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個字節(jié)0xff01。
2.2.2 輸入
payload:需要寫入的數(shù)據(jù),字符串類型??梢允褂胒script節(jié)點對payload進行設(shè)置
payloadLength:需要寫入的數(shù)據(jù)長度。
sink類型節(jié)點沒有輸出功能
2.3 ble_client_subscribe節(jié)點
2.3.1 屬性
- BLE客戶端配置:綁定一個ble_client藍牙客戶端的配置節(jié)點;
- 服務(wù)UUID:需要讀的服務(wù)UUID。若服務(wù)UUID為自定義的16字節(jié)如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個字節(jié)0xff11;
- 特征值UUID:需要讀的特征值UUID。若特征值UUID為自定義的16字節(jié)如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個字節(jié)0xff01;
- 訂閱模式:值為0表示禁能通知和指示,值為1表示使能通知,值為2表示使能指示。
pump類型節(jié)點無輸入數(shù)據(jù)
2.3.2 輸出
- payload:訂閱的特征值的數(shù)據(jù)內(nèi)容;
- payloadLength:訂閱的特征值的數(shù)據(jù)長度;
- characteristic_uuid:訂閱的特征值的UUID。
?示例講解1. 硬件準備
如下圖所示,準備一塊MPC-ZC1開發(fā)板,并按照下圖所示連接好硬件。用于下載流圖的USB Type-C口另外一端接到PC機上。
2. 軟件準備
目前MPC-ZC1開發(fā)板作為客戶端,對BLE調(diào)試寶(手機app)服務(wù)端(外圍模式)提供的服務(wù)進行訂閱、讀寫等操作,依下圖所示可根據(jù)用戶需求隨意設(shè)置服務(wù)UUID、特征值UUID、特征數(shù)據(jù)以及通知數(shù)據(jù),最后點擊開啟廣播,服務(wù)端BLE調(diào)試寶的配置就設(shè)置完成了。
隨之修改手機本地藍牙(服務(wù)端設(shè)備)名稱,后期此名稱用來配置ble_client節(jié)點的屬性參數(shù)目標服務(wù)端設(shè)備名稱。
3. EsDA業(yè)務(wù)開發(fā)本示例主要是將MPC-ZC1開發(fā)板作為藍牙客戶端,對BLE調(diào)試寶(藍牙服務(wù)端)指定服務(wù)下指定的特征值數(shù)據(jù)進行讀寫以及訂閱的操作,具體實現(xiàn)如下圖。本例程只對服務(wù)端提供的一個服務(wù)的特征值進行了訂閱和讀寫操作,根據(jù)實際需求,可支持對多個指定服務(wù)下的指定特征值進行讀寫和訂閱的操作。
3.1 添加節(jié)點并繪制流圖添加timer,ble_client_in,ble_client_out,ble_client_subscribe,fscript節(jié)點如下圖所示。
3.2 配置節(jié)點
周期性的去讀取藍牙服務(wù)端指定服務(wù)下指定的特征值的特征數(shù)據(jù)。
雙擊ble_client_in節(jié)點的前驅(qū)timer節(jié)點,打開屬性面板設(shè)置定時周期(ms),MPC-ZC1開發(fā)板周期性的去讀取BLE調(diào)試寶指定服務(wù)下指定的特征值數(shù)據(jù)。修改完后點擊右上角的完成即可保存屬性配置。
雙擊ble_client_in節(jié)點中的BLE客戶端配置,本屬性配置在一份流圖上只需要配置一次即可,后面ble_client_out以及ble_client_subscribe節(jié)點的屬性BLE客戶端配置都會鏈接到同一個ble_server,不需再次重復(fù)配置所以后面不再贅述。這里可以只修改屬性值:目標服務(wù)端設(shè)備名稱,需注意的是此處的參數(shù)與服務(wù)端提供的信息需一致。修改完后點擊右上角的更新即可保存屬性配置。雙擊ble_client_in節(jié)點,修改需要讀取指定的服務(wù)UUID和特征值UUID。修改完后點擊右上角的完成即可保存屬性配置。
雙擊ble_client_in節(jié)點的后繼fscript節(jié)點,主要內(nèi)容是對讀取的特征值UUID進行輸出以及將服務(wù)端指定的服務(wù)UUID及特征值UUID下的特征內(nèi)容進行輸出。
print("payloadLength is"+msg.payloadLength)print("characteristic_uuid is" + msg.characteristic_uuid);
rb = rbuffer_create(msg.payload, msg.payloadLength)print("length: "+ msg.payloadLength)
f = "recv ble server data is"for(var i=0; i1) { d = rbuffer_read_uint8(rb); f = join(",",f,d);}
msg.payload = fprint("data "+msg.payload)
周期性的去寫入藍牙服務(wù)端指定服務(wù)下指定的特征值的特征數(shù)據(jù)。
雙擊ble_client_out節(jié)點的前驅(qū)*2的timer節(jié)點,打開屬性面板設(shè)置定時周期(ms),MPC-ZC1開發(fā)板周期性的去寫入BLE調(diào)試寶指定服務(wù)下指定的特征值數(shù)據(jù)。修改完后點擊右上角的完成即可保存屬性配置。
因ble_client_out節(jié)點作為sink類型節(jié)點,所以fscript節(jié)點即為他的前驅(qū)節(jié)點。雙擊fscript,主要功能實現(xiàn)是設(shè)置ble_client_out節(jié)點的輸入數(shù)據(jù):payload(要寫入的數(shù)據(jù)),payloadLength(需要寫入的數(shù)據(jù)長度)。
msg.payload = "123456789"set(msg.payloadLength, u8("9"))
雙擊ble_client_out節(jié)點,配置需要寫入數(shù)據(jù)的服務(wù)UUID和特征值UUID。修改完后點擊右上角的完成即可保存屬性配置。
對藍牙服務(wù)端指定服務(wù)下指定的特征值的訂閱數(shù)據(jù)進行訂閱操作。
雙擊ble_client_subscribe節(jié)點,配置需要訂閱的服務(wù)UUID,特征值UUID以及訂閱模式。修改完后點擊右上角的完成即可保存屬性配置。雙擊ble_client_subscribe的后繼節(jié)點fscript,主要功能是將接收到的訂閱數(shù)據(jù)進行輸出打印。
rb = rbuffer_create(msg.payload, msg.payloadLength)print("length: "+ msg.payloadLength)
f = "recv subscribe data is"for(var i=0; i1) { d = rbuffer_read_uint8(rb); f = join(",",f,d);}
msg.payload = fprint("data "+msg.payload)
3.3 下載驗證MPC-ZC1開發(fā)板調(diào)試口打印信息如下:BLE調(diào)試寶操作日志顯示如下:
由操作日志可以看到,MPC-ZC1和手機藍牙建立連接成功、MPC-ZC1讀取特征值,開啟通知、接收MPC-ZC1寫入新的特征值數(shù)據(jù)、接收通知。至此示例實驗已完成。
-
通信
+關(guān)注
關(guān)注
18文章
6077瀏覽量
136487 -
藍牙
+關(guān)注
關(guān)注
114文章
5878瀏覽量
171337
發(fā)布評論請先 登錄
相關(guān)推薦
通過Skyvia Connect SQL終端節(jié)點訪問任何數(shù)據(jù)
![通過Skyvia Connect SQL終<b class='flag-5'>端節(jié)點</b>訪問任何數(shù)據(jù)](https://file1.elecfans.com/web3/M00/04/89/wKgZO2d17N6AfFKxAAAOus01Dak970.png)
EsDA,一站式嵌入式軟件
![<b class='flag-5'>EsDA</b>,一站式嵌入式軟件](https://file.elecfans.com/web2/M00/50/DA/pYYBAGLH6TyAB71EAAAPQ7KgtYA038.png)
評論