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); }
相关文章
相关标签/搜索