IOS BLE蓝牙4.0 扫描连接唯一指定外设

poppin_zk 2016-01-12 01:46:03
ios的lightblue是如何连接指定扫描到的外设的,是通过MAC地址吗? mac地址不连接获取不到呀,只有连接到在device infomition服务里的某个特征中获取。
identifer随着连接的手机不同而发生变化,还有其他可以唯一标识蓝牙外设的吗?
...全文
6920 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_34425222 2017-10-06
  • 打赏
  • 举报
回复
RSSI 是拿来测试距离的么?不太会计算啊, 距离计算怎么做修正?
qq_26940855 2016-12-23
  • 打赏
  • 举报
回复
厉害啊楼主,,,
killthosemadafaka 2016-09-12
  • 打赏
  • 举报
回复
你使用的那台Android手机如果被修改了framework,那就是连不上啊。
baidu_35180360 2016-05-31
  • 打赏
  • 举报
回复
我这里是ios可以指定uuid搜索到我们的设备,但是android的却搜索不到,大神知道这是什么原因吗
huaxialangzhi 2016-05-23
  • 打赏
  • 举报
回复
根据UUID搜索特定蓝牙的时候是需要BLE蓝牙设备在发送的scan广播包里面有你搜索的UUID,这样就可以搜索特定的蓝牙设备,lightBlue是搜素周围所有的设备,是不需要指定UUID的,只要发scan广播包的设备都可以搜到。
huangxiongbiao1 2016-05-09
  • 打赏
  • 举报
回复
引用 12 楼 zh_kun 的回复:
[quote=引用 11 楼 u010311313 的回复:] BLE只能通过UUID来搜索和连接设备(Android貌似还是可以通过蓝牙设备MAC地址连接),所以只能大家约定好。不过估计苹果也考虑到了安全性问题,所以在你从来没有连接过这个BLE设备之前,在蓝牙搜索结果列表中,是看不到这个设备的(所以不知道你这个服务UUID的人应该是不会主动去连你这个服务的)。只有连接过之后,这个设备就会出现在蓝牙列表里了。
有点糊涂,双方约定好的uuid和那种广播出的service uuid一样的使用方法吗?(这个约定好的uuid和peripheral.identifer不是一个吧)都是像这样扫描外设: [myCentralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:uuid]] options:nil];[/quote] 楼主问一下你们说的UUID跟服务特征的UUiD不一样吧,是另外有一个蓝牙设备的UUID吗,我现在遇到的问题时,我搜索附近所以的蓝牙,通过蓝牙名称name判断相等的时候,发起连接,但是有时候name搜索会出现为空的情况,就会出现不链接的情况。而且附近蓝牙多的时候就会出现配对响应慢的情况,求帮助,scan里面的UUID是蓝牙设备的唯一标识吗,是硬件商弄的吗
killthosemadafaka 2016-01-25
  • 打赏
  • 举报
回复
引用 12 楼 zh_kun 的回复:
[quote=引用 11 楼 u010311313 的回复:] BLE只能通过UUID来搜索和连接设备(Android貌似还是可以通过蓝牙设备MAC地址连接),所以只能大家约定好。不过估计苹果也考虑到了安全性问题,所以在你从来没有连接过这个BLE设备之前,在蓝牙搜索结果列表中,是看不到这个设备的(所以不知道你这个服务UUID的人应该是不会主动去连你这个服务的)。只有连接过之后,这个设备就会出现在蓝牙列表里了。
有点糊涂,双方约定好的uuid和那种广播出的service uuid一样的使用方法吗?(这个约定好的uuid和peripheral.identifer不是一个吧)都是像这样扫描外设: [myCentralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:uuid]] options:nil];[/quote] 简单说就是iOS连BLE设备只能通过UUID连接,这个官方文档里面明示了的。
poppin_zk 2016-01-25
  • 打赏
  • 举报
回复
引用 11 楼 u010311313 的回复:
BLE只能通过UUID来搜索和连接设备(Android貌似还是可以通过蓝牙设备MAC地址连接),所以只能大家约定好。不过估计苹果也考虑到了安全性问题,所以在你从来没有连接过这个BLE设备之前,在蓝牙搜索结果列表中,是看不到这个设备的(所以不知道你这个服务UUID的人应该是不会主动去连你这个服务的)。只有连接过之后,这个设备就会出现在蓝牙列表里了。
有点糊涂,双方约定好的uuid和那种广播出的service uuid一样的使用方法吗?(这个约定好的uuid和peripheral.identifer不是一个吧)都是像这样扫描外设: [myCentralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:uuid]] options:nil];
killthosemadafaka 2016-01-24
  • 打赏
  • 举报
回复
BLE只能通过UUID来搜索和连接设备(Android貌似还是可以通过蓝牙设备MAC地址连接),所以只能大家约定好。不过估计苹果也考虑到了安全性问题,所以在你从来没有连接过这个BLE设备之前,在蓝牙搜索结果列表中,是看不到这个设备的(所以不知道你这个服务UUID的人应该是不会主动去连你这个服务的)。只有连接过之后,这个设备就会出现在蓝牙列表里了。
poppin_zk 2016-01-20
  • 打赏
  • 举报
回复
还有个问题大神,如果是做产品呢,挨个给他们设置个UUID供手机应用搜索吗(一个UUID)不太可能呀
killthosemadafaka 2016-01-15
  • 打赏
  • 举报
回复
引用 8 楼 u010311313 的回复:
[quote=引用 5 楼 zh_kun 的回复:] [quote=引用 4 楼 u010311313 的回复:] 前一个月专门做iOS BLE的飘过。。。。 连接指定外设,就是通过UUID连接的,这个UUID被连接的设备要广播出来,这样BLE才能搜索到并且连接。 方法如下: [myCentralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:uuid]] options:nil]; 其中的uuid就是被连接设备广播出来的UUID字符串。
要连接的UUID 其实是外设广播出的某个service的UUID对吧!我需要连接的外设有两个服务一个是Device Information(180A,里面可以获取mac地址的特征),一个是:FFF0;我连这两个服务的uuid都扫描不到外设。我用lightblue软件扫描的时候(我要连得外设名字下面显示No Services,是不是代表它并没有广播出任何service呢),但我点它的时候依然可以连接,lightblue是用的什么连接上它的呢。[/quote] 你的这个坑我已经踩过鸟,当时我遇到的问题跟你这一模一样,折腾好好半天。最后解决办法是蓝牙设备方(就是发广播的那个),他的SERVICE写法是有区别的,他没有设置好广播的UUIDiOS这边就死活搜不到,他设置完我这边马上就搜到了。至于lightblue他大爷的为啥能搜到,不知道是为啥。 我们的设备后来是专门弄了个UUID供手机应用搜索(一个UUID),搜索到这个UUID之后,遍历里面的service 和 character,然后分别处理业务。
static NSString *const kTestScanUUID = @"A830005F-88C0-4369-844A-CC9E21041300";//CC9E21041300
上面是我们用来搜索蓝牙的UUID。不知道你们UUID的格式是否跟我这一样 [/quote] 突然想起来了,是因为蓝牙设备方UUID广播写的有问题,并没有把你要搜索的两个服务的UUID广播出来。lightblue能连上是因为它并没有去指定的连你需要的那两个service 的UUID啊(都没广播出来要它连也连不上)。lightblue是搜索所有广播出来的蓝牙,你的设备广播出来了,它搜到了,但是你的设备并没有广播出来你那两个service的UUI,所以你搜不到。
killthosemadafaka 2016-01-15
  • 打赏
  • 举报
回复
引用 5 楼 zh_kun 的回复:
[quote=引用 4 楼 u010311313 的回复:] 前一个月专门做iOS BLE的飘过。。。。 连接指定外设,就是通过UUID连接的,这个UUID被连接的设备要广播出来,这样BLE才能搜索到并且连接。 方法如下: [myCentralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:uuid]] options:nil]; 其中的uuid就是被连接设备广播出来的UUID字符串。
要连接的UUID 其实是外设广播出的某个service的UUID对吧!我需要连接的外设有两个服务一个是Device Information(180A,里面可以获取mac地址的特征),一个是:FFF0;我连这两个服务的uuid都扫描不到外设。我用lightblue软件扫描的时候(我要连得外设名字下面显示No Services,是不是代表它并没有广播出任何service呢),但我点它的时候依然可以连接,lightblue是用的什么连接上它的呢。[/quote] 你的这个坑我已经踩过鸟,当时我遇到的问题跟你这一模一样,折腾好好半天。最后解决办法是蓝牙设备方(就是发广播的那个),他的SERVICE写法是有区别的,他没有设置好广播的UUIDiOS这边就死活搜不到,他设置完我这边马上就搜到了。至于lightblue他大爷的为啥能搜到,不知道是为啥。 我们的设备后来是专门弄了个UUID供手机应用搜索(一个UUID),搜索到这个UUID之后,遍历里面的service 和 character,然后分别处理业务。
static NSString *const kTestScanUUID = @"A830005F-88C0-4369-844A-CC9E21041300";//CC9E21041300
上面是我们用来搜索蓝牙的UUID。不知道你们UUID的格式是否跟我这一样
poppin_zk 2016-01-14
  • 打赏
  • 举报
回复
poppin_zk 2016-01-14
  • 打赏
  • 举报
回复
poppin_zk 2016-01-14
  • 打赏
  • 举报
回复
引用 4 楼 u010311313 的回复:
前一个月专门做iOS BLE的飘过。。。。

连接指定外设,就是通过UUID连接的,这个UUID被连接的设备要广播出来,这样BLE才能搜索到并且连接。

方法如下:
[myCentralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:uuid]] options:nil];

其中的uuid就是被连接设备广播出来的UUID字符串。

要连接的UUID 其实是外设广播出的某个service的UUID对吧!我需要连接的外设有两个服务一个是Device Information(180A,里面可以获取mac地址的特征),一个是:FFF0;我连这两个服务的uuid都扫描不到外设。我用lightblue软件扫描的时候(我要连得外设名字下面显示No Services,是不是代表它并没有广播出任何service呢),但我点它的时候依然可以连接,lightblue是用的什么连接上它的呢。
killthosemadafaka 2016-01-14
  • 打赏
  • 举报
回复
前一个月专门做iOS BLE的飘过。。。。 连接指定外设,就是通过UUID连接的,这个UUID被连接的设备要广播出来,这样BLE才能搜索到并且连接。 方法如下: [myCentralManager scanForPeripheralsWithServices:@[[CBUUID UUIDWithString:uuid]] options:nil]; 其中的uuid就是被连接设备广播出来的UUID字符串。
poppin_zk 2016-01-13
  • 打赏
  • 举报
回复
顶一下
缘中人 2016-01-13
  • 打赏
  • 举报
回复
就像小米手环,他的UUID不同
缘中人 2016-01-13
  • 打赏
  • 举报
回复
通过UUID

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧