開發 nRF54L15 低功耗藍芽模組,以 Zephyr 範例程式說明
前一文章講解nRF54L15模組在VS Code環境的開發,本文則說明藍芽程式的開發。在SDK中,與藍芽相關功能的範例放在\ncs\v3.1.1\zephyr\samples\bluetooth目錄,如下所示。我們選擇peripheral範例程式,並添加build configuration後,開啟prj.conf檔案,裡面定義了藍芽服務的參數,如下方圖所示。
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的屬性(Notify、Read、Write)。
除了藍芽所定義的服務之外,下圖是這設備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 *))函數可以讀回當下的藍芽位址。




留言