0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

【EsDA應(yīng)用】藍(lán)牙客戶端節(jié)點(diǎn)詳解

ZLG致遠(yuǎn)電子 ? 2023-05-12 10:18 ? 次閱讀

藍(lán)牙作為一種近距離無線通信技術(shù),被廣泛使用在汽車,智能家居和醫(yī)療等領(lǐng)域中。本文主要介紹如何通過EsDA開發(fā)套件,快速實(shí)現(xiàn)藍(lán)牙客戶端的訂閱以及讀寫等操作。82e0f6f4-ef9f-11ed-ba01-dac502259ad0.jpg 簡介

藍(lán)牙是一種近距離無線通信技術(shù),可以免費(fèi)運(yùn)行在2.4G頻段,所以通常廣泛使用在物聯(lián)網(wǎng),移動(dòng)終端和智能家居等行業(yè)中。我們EsDA大家族里面自然也有對(duì)藍(lán)牙功能的實(shí)現(xiàn),且只需要很短的時(shí)間就可實(shí)現(xiàn)藍(lán)牙通信,功能好用簡單又便捷。

本文主要基于MPC-ZC1的開發(fā)板,以及可將節(jié)點(diǎn)進(jìn)行拖拽連接的圖形化設(shè)計(jì)工具AWFlow Designer,著重對(duì)UIS8910DM平臺(tái)的板載藍(lán)牙的配套節(jié)點(diǎn)以及示例進(jìn)行講解。藍(lán)牙節(jié)點(diǎn)一共分為配置節(jié)點(diǎn)類型ble_server,ble_client2個(gè),客戶端節(jié)點(diǎn)類型ble_client_in,ble_client_out,ble_client_subscribe3個(gè)以及服務(wù)端節(jié)點(diǎn)類型ble_server_adv,ble_server_service2個(gè);因本文篇幅的原因所以主要圍繞著客戶端節(jié)點(diǎn)的使用,以下進(jìn)行詳細(xì)介紹。

82e0f6f4-ef9f-11ed-ba01-dac502259ad0.jpg ?節(jié)點(diǎn)簡介1. 配置節(jié)點(diǎn)1.1 ble_client節(jié)點(diǎn)1.1.1 屬性8302886e-ef9f-11ed-ba01-dac502259ad0.png

掃描類型:啟動(dòng)掃描時(shí)需要的掃描類型配置:

值為0表示被動(dòng)掃描(僅僅接收廣播,不會(huì)發(fā)送掃描請(qǐng)求);

值為1時(shí)表示主動(dòng)掃描(發(fā)送掃描請(qǐng)求數(shù)據(jù)給廣播的服務(wù)端,服務(wù)端收到后會(huì)返回掃描響應(yīng)數(shù)據(jù))。

  • 掃描窗口的時(shí)間:掃描窗口時(shí)間的配置;
  • 掃描間隔的時(shí)間:掃描間隔時(shí)間的配置;

注意:掃描窗口時(shí)間必須小于掃描間隔時(shí)間。

掃描過濾策略:掃描過濾策略的配置:

1表示只處理地址在白名單中的數(shù)據(jù)包,以及發(fā)給自己的可連接定向廣播;

2表示處理所有非定向廣播和可解析私有地址以及發(fā)給自己的可連接定向廣播;

3表示處理地址在白名單中和可解析私有地址以及發(fā)給自己的可連接定向廣播。

  • 目標(biāo)服務(wù)端設(shè)備名稱:目標(biāo)服務(wù)端設(shè)備本地名稱;

SMP配對(duì)模式與參數(shù):

SMP配對(duì)模式

參數(shù)

安全等級(jí)排名

SECURE_CONNECTION_PASSKEY

KEYBOARD_DISP

最高

SECURE_CONNECTION_JUSTWORK

NOIN_NOOUT

次之

LEGACY_PASSKEY

KEYBOARD_DISP

第三

LEGACY_JUSTWORK

NOIN_NOOUT

最低

  • 掃描超時(shí)時(shí)間:表示持續(xù)掃描,直到與指定服務(wù)端建立連接。如果值不為0,則開啟掃描后使能掃描定時(shí)器,超時(shí)后如果仍未與指定服務(wù)端建立連接,則掃描停止。單位ms

配置節(jié)點(diǎn)無輸入輸出

2. 客戶端節(jié)點(diǎn)

2.1 ble_client_in節(jié)點(diǎn)

2.1.1 屬性

8317ceea-ef9f-11ed-ba01-dac502259ad0.png

  • BLE客戶端配置:綁定一個(gè)ble_client藍(lán)牙客戶端的配置節(jié)點(diǎn);
  • 服務(wù)UUID:需要讀的服務(wù)UUID。若服務(wù)UUID為自定義的16字節(jié)如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個(gè)字節(jié)0xff11;

特征值UUID:需要讀的特征值UUID。若特征值UUID為自定義的16字節(jié)如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個(gè)字節(jié)0xff01。

2.1.2 輸入

  • payload:可以使用“timer”節(jié)點(diǎn)作為前級(jí)節(jié)點(diǎn),定時(shí)讀取數(shù)據(jù)。

2.1.3 輸出

  • characteristic_uuid:將讀取到的指定特征值的UUID輸出;
  • payload:將讀取到的指定特征值的數(shù)組指針輸出。類型為uint8_t類型的指針;
  • payloadLength:將讀取到的指定特征值的數(shù)據(jù)長度輸出;
  • desc_num:將讀取到的指定特征值的描述符個(gè)數(shù)輸出。如果存在多個(gè)描述符,則存在多個(gè)名稱為“desc_uuid_%d”、“desc_value_%d”和“desc_value_length_%d”的屬性,其中%d指代當(dāng)前是第幾個(gè)描述符;
  • 舉例:該特征存在2個(gè)描述符,則存在以下名稱的屬性: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:第一個(gè)描述符的UUID,若為第二個(gè)描述符的UUID也可表示為desc_uuid_1。以此類推;
  • desc_value_0:第一個(gè)描述符的值指針,若為第二個(gè)描述符的值也可表示為desc_value_1。以此類推;
  • desc_value_length_0:第一個(gè)描述符的值的數(shù)據(jù)長度,若為第二個(gè)描述符的值的數(shù)據(jù)長度也可表示為desc_value_length_1。以此類推。

2.2 ble_client_out節(jié)點(diǎn)

2.2.1 屬性832bdb2e-ef9f-11ed-ba01-dac502259ad0.png

  • BLE客戶端配置:綁定一個(gè)ble_client藍(lán)牙客戶端的配置節(jié)點(diǎn);
  • 服務(wù)UUID:需要讀的服務(wù)UUID。若服務(wù)UUID為自定義的16字節(jié)如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個(gè)字節(jié)0xff11;
  • 特征值UUID:需要讀的特征值UUID。若特征值UUID為自定義的16字節(jié)如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個(gè)字節(jié)0xff01。

2.2.2 輸入

payload:需要寫入的數(shù)據(jù),字符串類型。可以使用fscript節(jié)點(diǎn)對(duì)payload進(jìn)行設(shè)置

payloadLength:需要寫入的數(shù)據(jù)長度。

sink類型節(jié)點(diǎn)沒有輸出功能

2.3 ble_client_subscribe節(jié)點(diǎn)

2.3.1 屬性

834144d2-ef9f-11ed-ba01-dac502259ad0.png

  • BLE客戶端配置:綁定一個(gè)ble_client藍(lán)牙客戶端的配置節(jié)點(diǎn);
  • 服務(wù)UUID:需要讀的服務(wù)UUID。若服務(wù)UUID為自定義的16字節(jié)如0000 ff 11 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個(gè)字節(jié)0xff11;
  • 特征值UUID:需要讀的特征值UUID。若特征值UUID為自定義的16字節(jié)如0000 ff 01 0000 1000 800000 80 5f 9b 34 fb,則傳入第3、4兩個(gè)字節(jié)0xff01;
  • 訂閱模式:值為0表示禁能通知和指示,值為1表示使能通知,值為2表示使能指示。

pump類型節(jié)點(diǎn)無輸入數(shù)據(jù)

2.3.2 輸出

  • payload:訂閱的特征值的數(shù)據(jù)內(nèi)容;
  • payloadLength:訂閱的特征值的數(shù)據(jù)長度;
  • characteristic_uuid:訂閱的特征值的UUID。

82e0f6f4-ef9f-11ed-ba01-dac502259ad0.jpg ?示例講解1. 硬件準(zhǔn)備

如下圖所示,準(zhǔn)備一塊MPC-ZC1開發(fā)板,并按照下圖所示連接好硬件。用于下載流圖的USB Type-C口另外一端接到PC機(jī)上。

83680838-ef9f-11ed-ba01-dac502259ad0.png

2. 軟件準(zhǔn)備

目前MPC-ZC1開發(fā)板作為客戶端,對(duì)BLE調(diào)試寶(手機(jī)app)服務(wù)端(外圍模式)提供的服務(wù)進(jìn)行訂閱、讀寫等操作,依下圖所示可根據(jù)用戶需求隨意設(shè)置服務(wù)UUID、特征值UUID、特征數(shù)據(jù)以及通知數(shù)據(jù),最后點(diǎn)擊開啟廣播,服務(wù)端BLE調(diào)試寶的配置就設(shè)置完成了。

83c71a1c-ef9f-11ed-ba01-dac502259ad0.png

隨之修改手機(jī)本地藍(lán)牙(服務(wù)端設(shè)備)名稱,后期此名稱用來配置ble_client節(jié)點(diǎn)的屬性參數(shù)目標(biāo)服務(wù)端設(shè)備名稱。

83e8033a-ef9f-11ed-ba01-dac502259ad0.png

3. EsDA業(yè)務(wù)開發(fā)本示例主要是將MPC-ZC1開發(fā)板作為藍(lán)牙客戶端,對(duì)BLE調(diào)試寶(藍(lán)牙服務(wù)端)指定服務(wù)下指定的特征值數(shù)據(jù)進(jìn)行讀寫以及訂閱的操作,具體實(shí)現(xiàn)如下圖。本例程只對(duì)服務(wù)端提供的一個(gè)服務(wù)的特征值進(jìn)行了訂閱和讀寫操作,根據(jù)實(shí)際需求,可支持對(duì)多個(gè)指定服務(wù)下的指定特征值進(jìn)行讀寫和訂閱的操作。

83ff28d0-ef9f-11ed-ba01-dac502259ad0.png

3.1 添加節(jié)點(diǎn)并繪制流圖添加timer,ble_client_in,ble_client_out,ble_client_subscribe,fscript節(jié)點(diǎn)如下圖所示。

84125ea0-ef9f-11ed-ba01-dac502259ad0.png

3.2 配置節(jié)點(diǎn)

周期性的去讀取藍(lán)牙服務(wù)端指定服務(wù)下指定的特征值的特征數(shù)據(jù)。

雙擊ble_client_in節(jié)點(diǎn)的前驅(qū)timer節(jié)點(diǎn),打開屬性面板設(shè)置定時(shí)周期(ms),MPC-ZC1開發(fā)板周期性的去讀取BLE調(diào)試寶指定服務(wù)下指定的特征值數(shù)據(jù)。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。

8427bb06-ef9f-11ed-ba01-dac502259ad0.png

雙擊ble_client_in節(jié)點(diǎn)中的BLE客戶端配置,本屬性配置在一份流圖上只需要配置一次即可,后面ble_client_out以及ble_client_subscribe節(jié)點(diǎn)的屬性BLE客戶端配置都會(huì)鏈接到同一個(gè)ble_server,不需再次重復(fù)配置所以后面不再贅述。這里可以只修改屬性值:目標(biāo)服務(wù)端設(shè)備名稱,需注意的是此處的參數(shù)與服務(wù)端提供的信息需一致。修改完后點(diǎn)擊右上角的更新即可保存屬性配置。843ddb8e-ef9f-11ed-ba01-dac502259ad0.png雙擊ble_client_in節(jié)點(diǎn),修改需要讀取指定的服務(wù)UUID和特征值UUID。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。84505656-ef9f-11ed-ba01-dac502259ad0.png

雙擊ble_client_in節(jié)點(diǎn)的后繼fscript節(jié)點(diǎn),主要內(nèi)容是對(duì)讀取的特征值UUID進(jìn)行輸出以及將服務(wù)端指定的服務(wù)UUID及特征值UUID下的特征內(nèi)容進(jìn)行輸出。

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)

周期性的去寫入藍(lán)牙服務(wù)端指定服務(wù)下指定的特征值的特征數(shù)據(jù)。

雙擊ble_client_out節(jié)點(diǎn)的前驅(qū)*2的timer節(jié)點(diǎn),打開屬性面板設(shè)置定時(shí)周期(ms),MPC-ZC1開發(fā)板周期性的去寫入BLE調(diào)試寶指定服務(wù)下指定的特征值數(shù)據(jù)。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。

84641fec-ef9f-11ed-ba01-dac502259ad0.png

因ble_client_out節(jié)點(diǎn)作為sink類型節(jié)點(diǎn),所以fscript節(jié)點(diǎn)即為他的前驅(qū)節(jié)點(diǎn)。雙擊fscript,主要功能實(shí)現(xiàn)是設(shè)置ble_client_out節(jié)點(diǎn)的輸入數(shù)據(jù):payload(要寫入的數(shù)據(jù)),payloadLength(需要寫入的數(shù)據(jù)長度)。

msg.payload = "123456789"set(msg.payloadLength, u8("9"))

雙擊ble_client_out節(jié)點(diǎn),配置需要寫入數(shù)據(jù)的服務(wù)UUID和特征值UUID。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。84794b42-ef9f-11ed-ba01-dac502259ad0.png

對(duì)藍(lán)牙服務(wù)端指定服務(wù)下指定的特征值的訂閱數(shù)據(jù)進(jìn)行訂閱操作。

雙擊ble_client_subscribe節(jié)點(diǎn),配置需要訂閱的服務(wù)UUID,特征值UUID以及訂閱模式。修改完后點(diǎn)擊右上角的完成即可保存屬性配置。848ad4b6-ef9f-11ed-ba01-dac502259ad0.png雙擊ble_client_subscribe的后繼節(jié)點(diǎn)fscript,主要功能是將接收到的訂閱數(shù)據(jù)進(jìn)行輸出打印。

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 下載驗(yàn)證MPC-ZC1開發(fā)板調(diào)試口打印信息如下:849d602c-ef9f-11ed-ba01-dac502259ad0.pngBLE調(diào)試寶操作日志顯示如下:84af63d0-ef9f-11ed-ba01-dac502259ad0.png由操作日志可以看到,MPC-ZC1和手機(jī)藍(lán)牙建立連接成功、MPC-ZC1讀取特征值,開啟通知、接收MPC-ZC1寫入新的特征值數(shù)據(jù)、接收通知。至此示例實(shí)驗(yàn)已完成。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 通信
    +關(guān)注

    關(guān)注

    18

    文章

    6042

    瀏覽量

    136138
  • 藍(lán)牙
    +關(guān)注

    關(guān)注

    114

    文章

    5834

    瀏覽量

    170601
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    通過Skyvia Connect SQL終端節(jié)點(diǎn)訪問任何數(shù)據(jù)

    通過 Skyvia Connect SQL 終端節(jié)點(diǎn)訪問任何數(shù)據(jù) ? 通過 Skyvia Connect SQL 終端節(jié)點(diǎn)訪問任何數(shù)據(jù)ADO.NET 數(shù)據(jù)網(wǎng)關(guān) 使用 Skyvia Connect
    的頭像 發(fā)表于 01-02 09:31 ?76次閱讀
    通過Skyvia Connect SQL終<b class='flag-5'>端節(jié)點(diǎn)</b>訪問任何數(shù)據(jù)

    EsDA,一站式嵌入式軟件

    EsDA是一套面向工業(yè)智能物聯(lián)領(lǐng)域的嵌入式系統(tǒng)設(shè)計(jì)自動(dòng)化工具集,包含實(shí)時(shí)操作系統(tǒng)AWorksLP、低代碼開發(fā)平臺(tái)AWStudio、資源管理平臺(tái)AXPI、跨平臺(tái)GUI引擎AWTK和云服務(wù)平臺(tái)ZWS
    的頭像 發(fā)表于 09-15 08:10 ?306次閱讀
    <b class='flag-5'>EsDA</b>,一站式嵌入式軟件

    NTP網(wǎng)絡(luò)時(shí)間服務(wù)器能帶同步多少客戶端

    NTP網(wǎng)絡(luò)時(shí)間服務(wù)器能帶同步多少客戶端
    的頭像 發(fā)表于 09-04 10:43 ?470次閱讀
    NTP網(wǎng)絡(luò)時(shí)間服務(wù)器能帶同步多少<b class='flag-5'>客戶端</b>?

    如何獲取連接的TCP客戶端的ESPCONN指針?

    我?guī)缀蹰喿x了 SDK API 指南版本 1.0.1 的所有文檔 并開始了解如何添加用戶 AT 命令。 這真的很簡單,只需撥打at_cmd_array_register。 BUT! 如何獲取連接的 TCP 客戶端的 ESPCONN 指針?
    發(fā)表于 07-12 14:54

    如何同時(shí)在ESP8266上運(yùn)行TCP客戶端和TCP服務(wù)?

    我們是 esp8266 的長期用戶,并在該芯片上運(yùn)行數(shù)千臺(tái)家庭自動(dòng)化類別的現(xiàn)場設(shè)備。然而,一個(gè)小小的限制阻礙了我們開發(fā)一些更有趣和創(chuàng)新的產(chǎn)品。 要求:我們需要同時(shí)運(yùn)行 TCP 客戶端(連接
    發(fā)表于 07-08 08:26

    求助,關(guān)于ESP32C3 TCP客戶端連接斷線問題求解

    ESP32C3開啟AP模式做TCP服務(wù)器,手機(jī)做客戶端連接服務(wù)器;超過默認(rèn)最大連接數(shù)(5)以后,即使有部分客戶端斷開了,也無法再發(fā)起連接連接不上。一定需要服務(wù)器給客戶端發(fā)送數(shù)據(jù),確認(rèn)客戶端
    發(fā)表于 06-27 07:54

    藍(lán)牙作為客戶端,實(shí)現(xiàn)不了透傳是哪里出了問題?

    藍(lán)牙作為客戶端,實(shí)現(xiàn)不了透傳 AT指令過程 AT+BLEINIT=1 AT+BLESCAN=1,3 AT+BLECONN=0,"f8:a7:63:39:11:df" AT+BLESPP(透傳時(shí)提示錯(cuò)誤),請(qǐng)大神們幫我看看是漏了什么步驟嗎?
    發(fā)表于 06-24 07:22

    請(qǐng)問esp32能支持多個(gè)客戶端同時(shí)連接嗎?

    根據(jù)我現(xiàn)在的測試結(jié)果,esp32作為ble server時(shí)同時(shí)支持一個(gè)客戶端連接,前一個(gè)客戶端必須斷開藍(lán)牙連接,后一個(gè)才能連接。實(shí)際esp32能支持多個(gè)客戶端同時(shí)連接嗎?有沒有相關(guān)例程
    發(fā)表于 06-11 06:25

    TWS 藍(lán)牙耳機(jī) ESD EOS保護(hù)方案

    TWS 藍(lán)牙耳機(jī) ESD EOS保護(hù)方案
    的頭像 發(fā)表于 05-17 08:02 ?753次閱讀
    TWS <b class='flag-5'>藍(lán)牙</b>耳機(jī) <b class='flag-5'>ESD</b> EOS保護(hù)方案

    ESD管 AZ5825-01F型號(hào)ESDA05CPX參數(shù)對(duì)比

    ESD管 AZ5825-01F型號(hào)ESDA05CPX參數(shù)對(duì)比
    的頭像 發(fā)表于 05-11 08:03 ?899次閱讀
    <b class='flag-5'>ESD</b>管 AZ5825-01F型號(hào)<b class='flag-5'>ESDA</b>05CPX參數(shù)對(duì)比

    stm32 +lwip1.3.1客戶端異常導(dǎo)致網(wǎng)絡(luò)ping不通怎么解決?

    stm32上運(yùn)行l(wèi)wip作為服務(wù)器,如果客戶端異常了,發(fā)現(xiàn)在客戶端再也ping不通 網(wǎng)絡(luò)如果異常,交換機(jī)掛了,重啟后,客戶端怎么都ping不通stm32 有沒有遇到同樣的問題? 不是tcp的pcb被占用,ping都不能通,lw
    發(fā)表于 04-22 07:30

    HarmonyOS開發(fā)實(shí)例:【分布式新聞客戶端

    基于柵格布局、設(shè)備管理和多端協(xié)同,實(shí)現(xiàn)一次開發(fā),多端部署的分布式新聞客戶端頁面。
    的頭像 發(fā)表于 04-17 15:57 ?889次閱讀
    HarmonyOS開發(fā)實(shí)例:【分布式新聞<b class='flag-5'>客戶端</b>】

    靜電ESD整改:原因、影響與解決方案詳解?

    靜電ESD整改:原因、影響與解決方案詳解?|深圳比創(chuàng)達(dá)電子
    的頭像 發(fā)表于 03-13 10:26 ?935次閱讀
    靜電<b class='flag-5'>ESD</b>整改:原因、影響與解決方案<b class='flag-5'>詳解</b>?

    是否可以將客戶端控件與CYW920706WCDEVAL一起使用?

    是否可以將客戶端控件與CYW920706WCDEVAL一起使用? 我想用它來發(fā)現(xiàn)藍(lán)牙 BR/EDR,然后將其與其他設(shè)備配對(duì)。 有客戶端控制的下載鏈接或文檔嗎? 另外,你有 AIROC Connect
    發(fā)表于 03-01 15:54

    如何基于EsDA開發(fā)套件快速使用射頻讀卡器模塊

    無線射頻讀寫卡技術(shù)在門禁系統(tǒng),電子支付領(lǐng)域和物聯(lián)網(wǎng)等領(lǐng)域中具有越來越廣泛的應(yīng)用。本文將基于EsDA開發(fā)套件講解如何快速上手并開發(fā)射頻讀卡器模塊的相關(guān)業(yè)務(wù),為開發(fā)者大大縮短了學(xué)習(xí)和開發(fā)時(shí)間成本。項(xiàng)目
    的頭像 發(fā)表于 01-11 08:24 ?725次閱讀
    如何基于<b class='flag-5'>EsDA</b>開發(fā)套件快速使用射頻讀卡器模塊