IOS 可以连接 蓝牙BLE设备,但是无法发现服务(原创)
注:转载请标明文章来源,感谢支持作者劳动!
一、问题描述
用iphone手机上的nRF connect软件调试蓝牙通信。
1、nRF52蓝牙demo电路板,烧录一个SDK的程序,iphone手机可以成功连接及发现服务。如下图,

2、之后烧录另一个固件,发现扫描出现的蓝牙名称等信息均已经改变,但是点击“connect”之后,还是上次的蓝牙信息。见下图

二、原因
发现将手机重启,或者连接一个其他的蓝牙设备,再去连接开发板,上述问题不存在。
这是因为,为改善蓝牙通信连接体验,IOS设备的蓝牙会保存上一次连接的设备的信息。我们前后两次烧录固件,但是蓝牙地址还是一样的,所以对于IOS来说,这是同一个设备, 点击连接之后,直接出现了上次保存的缓存信息。
那我们对于同一块板子的解决方法就很明显,只要两次烧录的固件蓝牙地址不一样,问题就解决了。
三、解决方法
针对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, , 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[] += ;
err_code =sd_ble_gap_addr_set(&addr); memset(&scanrsp, , sizeof(scanrsp));
scanrsp.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[]);
scanrsp.uuids_complete.p_uuids = m_adv_uuids; memset(&options, , 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);
}
IOS 可以连接 蓝牙BLE设备,但是无法发现服务(原创)的更多相关文章
- IOS系统之蓝牙外接设备
Ios系统对于蓝牙外接设备在iphone4以前都是蓝牙2.0的时候,需要通过苹果的审核,据统计通过率仅有2%左右,现在蓝牙2.0基本上处于淘汰状态,所以在这里就不考虑了. 现在iphone4s以后的设 ...
- 蓝牙BLE设备主机重启回连流程分析
如果一个BLE设备已经与蓝牙中心设备连接上,那么当中心设备的断电重启,其依然会和配对过的BLE设备连接上,而不需要重新走配对的流程,这个过程叫做回连. 这篇文章就分析一下当中心设备断电重启之后,其与B ...
- IOS开发之——IOS模拟器调试蓝牙BLE
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhenyu5211314/article/details/24399887 因为在iPhone 4s ...
- 蓝牙BLE设备断线回连分析
在 文章中分析了Hogp的连接的流程 ,这里分析一下回连的流程. 在使用ble设备的过程中,我们发现当设备和主机配对之后,如果没有解除配对,那么即便设备和主机断开,那么也是可以重新连接而不需要重新走配 ...
- 【BLE】CC2541之发现服务与特征值
一.简介 本文以SimpleBLECentral工程为例,解析CC2541作为主机时是如何发现从机的服务和特征值的. 二.实验平台 协议栈版本:BLE-CC254x-1.4.0 编译软件:IAR 8. ...
- Android 4.4.2上与BLE 蓝牙锁设备的通讯
Android从4.3(Api level 18)开始支持BLE的开发,本文记录了Android 4.4.2设备与BLE设备通讯的流程. 权限需求: <uses-permission andro ...
- 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体解释
转载请注明来源: http://blog.csdn.net/kjunchen/article/details/50909410 使用BleLib的轻松搞定Android低功耗蓝牙Ble 4.0开发具体 ...
- ESP32:蓝牙BLE控制M3508电机
ESP32:蓝牙BLE控制M3508电机 先给各位朋友拜个年,祝大家新春快乐,事事顺利,身体健康啊! 还是熟悉的3508,内容概述: ESP32主控 蓝牙BLE通信 使用实时系统(FreeRTOS) ...
- Android 6.0 扫描不到 Ble 设备需开启位置权限
Android 6.0 扫描不到 Ble 设备需开启位置权限 之前做 Ble 开发都是在 Android 6.0 系统以下的版本中进行测试的,今天使用 Android 6.0 的设备测试的时候,发现扫 ...
随机推荐
- 关于VSTS自动Build报错问题之Microsoft.Net.Compilers
报错内容如下: --06T11::.6035712Z ##[error]Dotnet command failed with non-zero exit code on the following p ...
- Visual Studio强行修改运行平台和注意事项
默认情况下,会发现项目属性中只有一个Any CPU可供选择,无法修改运行平台. 解决方法如下: 右键“解决方案”,选择“属性”,此时发现每一个项目的平台依然只有Any CPU,点击右上角“配置管理器” ...
- Java SimpleDateFormat对象的parse方法处理12点变成00点
原文链接:https://blog.csdn.net/chenbetter1996/article/details/82812959 new SimpleDateFormat("格式&quo ...
- OSG3.0.1的编译
在OSG-中国有很多关于OSG的资料,包括OSG的编译和教程. 要编译OSG首先需要准备的包: 1,OSG3.0.1源代码: 2,CMAKE: 3,OSG用到的第三方库: 4,OSG Data:OSG ...
- January 10 2017 Week 2nd Tuesday
Being entirely honest with oneself is a good exercise. 对自己完全坦诚是一种很棒的锻炼. It is difficult to know deep ...
- java一些使用
随机数.输入.byte数组和string转换 一些可能会使用到的方法.供及时查找 ########################random类使用 Random random = new Rando ...
- 深入剖析php执行原理(2):函数的编译
本文只探讨纯粹的函数,并不包含方法.对于方法,会放到类.对象中一起研究. 想讲清楚在zend vm中,函数如何被正确的编译成op指令.如何发生参数传递.如何模拟调用栈.如何切换作用域等等,的确是一个很 ...
- docker-6-DockerFile解析
1.是什么 Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本. 构建三步骤: 1.编写Dockerfile文件 2.docker build 3.docker ...
- java 静态相关内容
一般情况下,如果有些代码必须在项目启动的时候就执行的时候,需要使用静态代码块,这种代码是主动执行的;需要在项目启动的时候就初始化,在不创建对象的情况下,其他程序来调用的时候,需要使用静态方法,这种代码 ...
- git命令将本地代码提交到github
git命令将本地代码提交到github 步骤: 第一步:进入到相应的文件夹,用git init命令,将该文件夹变成git可管理的仓库 git init 第二步:将项目添加到本地仓库 可以用git st ...