IOS 能夠鏈接 藍牙BLE設備,可是沒法發現服務(原創)

注:轉載請標明文章來源,感謝支持做者勞動!緩存

1、問題描述app

       用iphone手機上的nRF connect軟件調試藍牙通訊。iphone

       一、nRF52藍牙demo電路板,燒錄一個SDK的程序,iphone手機能夠成功鏈接及發現服務。以下圖,ui

           

      二、以後燒錄另外一個固件,發現掃描出現的藍牙名稱等信息均已經改變,可是點擊「connect」以後,仍是上次的藍牙信息。見下圖spa

            

2、緣由3d

      發現將手機重啓,或者鏈接一個其餘的藍牙設備,再去鏈接開發板,上述問題不存在。調試

      這是由於,爲改善藍牙通訊鏈接體驗,IOS設備的藍牙會保存上一次鏈接的設備的信息。咱們先後兩次燒錄固件,可是藍牙地址仍是同樣的,因此對於IOS來講,這是同一個設備, 點擊鏈接以後,直接出現了上次保存的緩存信息。code

      那咱們對於同一塊板子的解決方法就很明顯,只要兩次燒錄的固件藍牙地址不同,問題就解決了。blog

3、解決方法ip

       針對12.30版本的固件(其餘版本可能語句有不一樣,注意靈活應對)咱們在藍牙廣播初始化,增長以下代碼,用來改變藍牙地址。

      

static void advertising_init(void) { uint32_t err_code; ble_advdata_t advdata; ble_advdata_t scanrsp; ble_adv_modes_config_t options; // Build advertising data struct to pass into @ref ble_advertising_init.
    memset(&advdata, 0, sizeof(advdata)); advdata.name_type = BLE_ADVDATA_FULL_NAME; advdata.include_appearance = false; advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE; //Note: change the device address //******************************* 
 ble_gap_addr_t addr; err_code =sd_ble_gap_addr_get(&addr); addr.addr[0] += 1; err_code =sd_ble_gap_addr_set(&addr); memset(&scanrsp, 0, sizeof(scanrsp)); scanrsp.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]); scanrsp.uuids_complete.p_uuids = m_adv_uuids; memset(&options, 0, sizeof(options)); options.ble_adv_fast_enabled = true; options.ble_adv_fast_interval = APP_ADV_INTERVAL; options.ble_adv_fast_timeout = APP_ADV_TIMEOUT_IN_SECONDS; err_code = ble_advertising_init(&advdata, &scanrsp, &options, on_adv_evt, NULL); APP_ERROR_CHECK(err_code); }
相關文章
相關標籤/搜索