Tag: 蓝牙低能量

解释特性(iOS和BLE)

我正在从iPhone的BLE设备读取特性。 但是,我所看到的一些属性(如0xA,0x22)不在Apple提供的枚举列表中。 这些属性是否包含2个或更多枚举值的组合? 还是来自制造商的这些自定义属性? 需要在这方面的指导。

为什么它找不到我的信标?

我正在编写需要在设备周围查找BLE信标的Android和iOS应用程序。 当我从Android运行我的代码时,它在我所在的房间里find了几个信标。 我有8个灯塔。 当我从iPhone运行信标代码时,它将返回一个正好为0的信标列表。 这是我的代码: – (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.locationManager = [[CLLocationManager alloc] init]; self.locationManager.delegate = self; [self initRegion]; [self locationManager:self.locationManager didStartMonitoringForRegion:self.beaconRegion]; } – (void)locationManager:(CLLocationManager *)manager didStartMonitoringForRegion:(CLRegion *)region { [self.locationManager startRangingBeaconsInRegion:self.beaconRegion]; } – (void)initRegion { NSUUID *uuid = [[NSUUID alloc] initWithUUIDString:BEACONUUID]; self.beaconRegion = [[CLBeaconRegion alloc] […]

DispatchGroup.wait不等

我正在理解或使用Dispatchgroup。 我已经阅读了很多关于他们的文章,但是大多数的例子/文档都很模糊,或者不像我想要做的,但是每次我提到我的问题时,大家都会说“使用派遣组”。 这是我想要做的(注意:连续命令是CRUCIAL): 发送蓝牙写入特征。 设备收到价值,并吐出一些回应 阅读蓝牙响应(通过读取特性) 发送新的写入特征(不同的命令) 设备收到NEW命令,吐出NEW数据响应 重复两次(总共3个命令,总共3个不同的响应)。 我的代码: func tPodInitialSetUp() { print ("* * * * * BEGIN SET-UP * * * * *") let setupDispatchGroup = DispatchGroup() setupDispatchGroup.enter() self.writeValue(command: Data(CommandModeCmd)) //231: Put t-Pod in command mode, burst mode is OFF returns OK setupDispatchGroup.leave() setupDispatchGroup.wait() setupDispatchGroup.enter() deviceConnected?.readValue(for: deviceConnectedCh1n2Char!) print("Sent command 231: returned: \(receivedString1)") […]

无法将数据发送到特征

当远程设备更改特征值时,我可以在应用程序上得到通知,但是当应用程序更新值时,远程设备将不会看到它。 所以,我知道我的特点是有效的,我也知道其他应用程序能够回写到这个特性(实际的设备打印它) 所以问题当然是在应用程序 。 更有趣的是,每个特征都有句柄 ,每个特征都有自己的UUID。 iOS只会让我看到我的特征UUID,不能访问它的句柄,尽pipe每个特征有两个句柄,不同的UUID 无论如何,在这里我得到callback,并试图回信: func peripheral(_ peripheral: CBPeripheral, didUpdateValueFor characteristic: CBCharacteristic, error: Error?) { print("UPDATE FROM:" , characteristic) //good! sendData(data: "check") //not good if characteristic.uuid.uuidString == characteristicUUID { if let str = NSString(data: characteristic.value!, encoding: String.Encoding.utf8.rawValue) { print("BLE:GOT:",str ) NotificationCenter.default.post(name: Notification.Name(rawValue: "Bluetooth"), object: str) } } } 和写作: func sendData(data:String) { […]

同一个iDevice可以通过蓝牙进行通信吗?

问题如标题所述。 我有两个应用程序,一个CBPeripheralDelegate和一个CBCentralManagerDelegate。 外围的广告当它在前台(我想,我没有其他的BTLE设备来testing它),但是如果我在手机前台运行中央应用程序和外围设备在后台,似乎也没有看到其他。 我根据CoreBluetooth后台执行文档在外设info.plist中启用了UIBackgroundModes:bluetooth-peripheral。 我发现有几个人在这里尝试在后台做广告,但没有人在同一台设备上的应用。 让我们说,为了我的问题,我的代码完美的作品…蓝牙信号可以“回圈”回到同一个iPhone?

在CBPeripheralManager中,如何知道用户在尝试配对时是否按下取消button

我正在使用CBPeripheralManager在iPhone和设备之间build立BLE连接。 如果Central尝试与外设配对,则会popup蓝牙配对alertController,用户可以select要使用哪一个。 他们大多会推动一个连接button。 但有没有办法知道当用户按下取消button? 委托API将是好的,但我找不到它。

在iOS应用程序中自动连接到BLE设备

我正在写一个iOS应用程序,它将使用蓝牙低功耗(BLE)与设备进行通信。 当我的连接设备超出范围,我的应用程序正在获取断开事件。 但是当设备回到范围时,我没有收到任何连接事件。 请build议任何方法来检测设备何时回到范围。

CoreBluetooth从未在iPhone5S上调用didDiscoverServices

大多数情况下,我们编写的应用程序对于我们的BLE外设工作得非常好。 通常对于iPhone 5S用户来说,设备会变得非常didDiscoverServices: ,无论何时我们扫描服务,都不会调用didDiscoverServices: delegate方法。 重新启动设备或删除所有设置(常规 – >重置 – >重置所有设置)将暂时解决问题。 一旦设备出现这个问题,甚至其他应用程序(如LightBlue)也会受到影响; 在重启之前,没有外设能够发现服务。 对于上下文,我们的BLE外设目前不支持配对。 什么是造成这个问题? 有什么办法避免造成不稳定? 一旦发生,是否有一种方式,应用程序可以从它自动恢复? 一些类似症状的问题: 应用程序 在iPad Air中 重新连接和不扫描 服务时不发现服务 更新:只是供参考,我仍然在处理这个问题,但是我们做了一些事情 ,导致它发生的方式less(​​因此它不是一个真正的优先事项自动取款机)。 我不知道是什么造成了增加的稳定性。

iOS停止从外设传入的BLE连接唤醒应用程序

我们有一个BLE外围设备,每小时连接到手机并传递一些数据。 这是过程如何工作: 启动时使用密钥UIApplicationLaunchOptionsBluetoothCentralsKey中 application(didFinishLaunchingWithOptions launchOptions)应用程序使用传递给它的ID重新初始化CBCentralManager。 然后经过正常的恢复周期,从BLE外设读取数据。 对云中的服务执行REST请求。 假设应用程序已经启动至less一次手机重启后,一切运作良好几天(如果应用程序没有运行或被迫内存不足,iOS正常启动它,假设用户没有强制closures手动)。 然而,每隔几天,当有来自BLE设备的传入请求时,iOS停止唤醒应用程序。 如果用户重新启动应用程序,一切正常工作几天,然后再次停止。 鉴于我们产品的性质,以尽可能最可靠的方式使我们的应用程序/外设一起工作至关重要。 关于为什么可能发生的理论: (经仔细检查,他们全部被解雇) 用户重新启动手机,忘记重新启动应用程序。 我们添加了正常运行时间的日志logging,并显示手机在启动应用程序之间没有重新启动。 内存警告导致应用程序被启动。 再次,添加日志logging,他们表明,没有applicationDidReceiveMemoryWarning 上传结果导致应用程序运行时间超过10秒,iOS终止结果并不高兴 我们人为地将服务器响应延迟了15秒,以testing这一点,并且在testing过程中,所有事情都能正常运行。 任何想法正在发生的事情,为什么iOS停止通知应用程序关于传入的BLE连接? 其中一个问题是,我们无法弄清楚如何可靠地重现问题,所以任何build议都会非常感谢! 谢谢! 更新1:这是我们如何初始化CBCentralManager : self.centralManager = CBCentralManager(delegate: self, queue: nil, options: [ CBCentralManagerOptionRestoreIdentifierKey : MyCentralManagerID, CBCentralManagerOptionShowPowerAlertKey : 0]) 我看到一些build议队列参数不应该是零。 鉴于我无法可靠地重现问题,我犹豫不决,直到我可以自信地观察它的影响。

在iOS中将背景模式中的数据从中央传输到外围设备

我正在开发一个通过BLE进行自定义可穿戴通信的应用程序。 我订阅了蓝牙中央的info.plist文件中的UI背景模式。 我正在传输一个大约600 kb的固件文件,分成200个字节的块大小。 这个过程是正常的,但是当我按Homebutton时,应用程序正在进入后台状态,从而在1-2分钟后终止进程。 如果我的屏幕在一段时间后变暗,则固件传输将继续,但只要按下主页button,应用程序将在几分钟后停止传输数据。 请帮我摆脱这种情况。 谢谢。