7.充分利用蓝牙设备

2021-10-20  本文已影响0人  LucXion

iOS中蓝牙SDK是CoreBlueTool.framework,iOS 5后可用,专门为蓝牙LE设备设计。

蓝牙4.0之前,要使用蓝牙,指定设备必须实现某些蓝牙规范。诸如蓝牙音频耳机,蓝牙立体声耳机,蓝牙远程控制,SIM卡访问等常见用途都有现成的配置文件。然而,为了自己独特的设备开发配置文件是冗长乏味的工作,此外,开发一些定制的配置文件还要安装一些必需的驱动。如果使用定制的配置文件,还要获得MFi认证。

蓝牙4.0(蓝牙LE,蓝牙智能,低功耗蓝牙)使实现定制接口和定制数据交换变得容易,你可以完全在用户空间实现而不需要系统层的驱动。应用既是驱动,也是软件,你不需要一个系统层的配对,也不需要MFi认证。

服务器叫外围设备,客户端叫中心设备。产生数据的就是服务器,它们可能是心率监控器,温度计等。

// 发现外设,打开功能
-(void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error {
    [peripheral.services enumerateObjectsUsingBlock:^(CBService * _Nonnull service, NSUInteger idx, BOOL * _Nonnull stop) {
        // 获取特定服务
        if ([service.UUID isEqual:[CBUUID UUIDWithString:@"0000-0000"]]) {
            NSArray *characteristicsArr =  service.characteristics;
            [characteristicsArr enumerateObjectsUsingBlock:^(CBCharacteristic *characteristics, NSUInteger idx, BOOL * _Nonnull stop) {
                // 获取特定特征
                if ([characteristics.UUID isEqual:[CBUUID UUIDWithString:@"0000-0000"]]) {
                    uint8_t data = 0x01;
                    // 向外设传递数据,比如开/关
                    [peripheral writeValue:[NSData dataWithBytes:&data length:1] forCharacteristic:characteristics type:CBCharacteristicWriteWithResponse];
                }
                if ([characteristics.UUID isEqual:[CBUUID UUIDWithString:@"1111-1111"]]) {
                    // 打开通知功能
                    [peripheral setNotifyValue:YES forCharacteristic:characteristics];
                }
            }];
        }
    }];
}

// 通过委托获取外设数值变化
- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error {
    float info = [self infoFromData:characteristic.value];
    NSLog(@"特征变动的数值信息 %f",info);
}

- (float)infoFromData:(NSData*)data {
    char scratchVal[data.length];
    int16_t temp;
    [data getBytes:scratchVal length:data.length];
    // 取第二个字节 和第三个字节 组成温度
    temp = ((scratchVal[2] & 0xff) | ((scratchVal[3] << 8) & 0xff00));
    return temp;
}

创建外围设备服务

后台模式

可以通过info.plist配置后台模式 Bluetooth-centralBluetooth-Peripheral。应用进入后台后,scanfForPeripheralWithServices:Options:仍然会继续调用并返回已发现的设备。然而如果应用被系统终止,则不会在后台再次启动。CoreBluetooth.framework支持状态保存和恢复功能,使用这些API,当发现一个已连接设备时,应用会在后台启动。

省电考虑

苹果建议外围设备在前30s每20ms发送一次广播包,30s之后你希望节省电量,增加延迟。使用645ms、768ms、961ms、1065ms、1294ms可以增加被发现的机会。蓝牙进入后台,扫描频率会进入低电量模式。如果广播间隔是苹果推荐的数值,那么设备会更容易被发现。如果作为外围设备,则不用考虑这些问题,CoreBluetooth会为你处理。

状态保存和恢复的key:CBCentralManagerOptionRestoreIdentifierKey、CBPeripheralManagerRestoredStateAdvertisementDataKey

上一篇下一篇

猜你喜欢

热点阅读