開發 nRF54L15 低功耗藍芽模組,以 Zephyr 範例程式說明

前一文章講解nRF54L15模組在VS Code環境的開發,本文則說明藍芽程式的開發。在SDK中,與藍芽相關功能的範例放在\ncs\v3.1.1\zephyr\samples\bluetooth目錄,如下所示。我們選擇peripheral範例程式,並添加build configuration後,開啟prj.conf檔案,裡面定義了藍芽服務的參數,如下方圖所示。 


BAS是定義電池的服務,HRS是定義心律的服務,IAS是定義即時告警的服務,CTS是定義目前時間的服務。編譯前,我們可以設yn決定啟用或關閉服務,設定好之後,先重新生成build config (最好執行Clean Build Configuration,再生成),然後再重新編譯所有的code。底下這個函數API是廣播設備的屬性,其中ad是屬性內容和sd是設備名稱。

bt_le_adv_start(BT_LE_ADV_CONN_FAST_1, ad, ARRAY_SIZE(ad), sd, ARRAY_SIZE(sd));

在手機端,下載nRF Connect for Mobile,安裝後打開APP。先掃描藍芽設備,看到藍芽名為Zephyr Peripheral…,就是上圖程式中定義的名稱。連線後,如下圖,顯示這設備的屬性,包含Heart Rate的屬性(NotifyReadWrite)

除了藍芽所定義的服務之外,下圖是這設備GATT的通用屬性

配置屬性的API函數,包含vnd變數與uuid

bt_gatt_find_by_uuid (vnd_svc.attrs,  vnd_svc.attr_count,  &vnd_enc_uuid.uuid);

範例中,開啟藍芽認證模式,API函數如下,其中GATT的某些欄位需要認證才能進行讀與寫。

bt_conn_auth_cb_register( &auth_cb_display );

變更BT位址

在原始範例所生成的prj.conf檔案中,定義CONFIG_BT_PRIVACY=y,意思是隨機產生一個BT位址,不過每次開機這個位址是固定的。如果想要自行配置BT位址,先要將這個定義改為n,重新編譯。程式碼要新增一段BT位址,再呼叫bt_id_create(&custom_addr, NULL)函數。注意:藍芽位址由6 bytes組成,位址的低位在前,高位在後。下面例子中,實際所看到的藍芽位址C0:00:BE:BA:FE:CA

bt_addr_le_t  custom_addr = {

      .type = BT_ADDR_LE_RANDOM,

      .a = { .val = {0xCA, 0xFE, 0xBA, 0xBE, 0x00, 0xC0} },

};

最後,bt_id_get((bt_addr_le_t*), (size_t *))函數可以讀回當下的藍芽位址。

留言

此網誌的熱門文章

[筆記] ESP32 在 VS Code 開發環境的編譯與除錯

[筆記] Raspberry Pi 樹莓派的軟體開發

初學 ESP32-S3 攝像模組的開發

[應用] 在 ESP32 Audio 開發板的 VoIP 範例

[筆記] 整理控制器 STM32 與無線晶片 ESP32 資料

[筆記] Visual Studio 遠端偵錯的設定步驟

[模組] 4G 通訊模組的應用