BLE蓝牙开发 (三) 手机作为外设开发

peripheral模式的流程:

1. 设置CBPeripheralManagerDelegate的委托,初始化外围设备
2. 检测外设的蓝牙状态
3. 创建服务(service)和特征(characteristics)
4. 开始广播 (中心设备收到广播后连接外设,并进行一系列的请求)
5. 响应center的操作
    * 读写characteristics
    * 订阅和取消订阅characteristics

实现步骤:

1. 初始化外设
    self.periperalMgr = [[CBPeripheralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];
2. 检测外设的蓝牙状态后创建服务(service)和特征(characteristics)
#pragma mark - CBPeripheralManagerDelegate -
- (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral {
    /*
     CBManagerStateUnknown = 0,     // 未知
     CBManagerStateResetting,       // 重置中
     CBManagerStateUnsupported,     // 不支持
     CBManagerStateUnauthorized,    // 未验证
     CBManagerStatePoweredOff,      // 关闭
     CBManagerStatePoweredOn,       // 开启
     */
    if(peripheral.state == CBManagerStatePoweredOn) {
        // 2. 创建服务(Service)和特征(Characteristics)
        [self setup];
        
    }
}

3.创建服务和特征
// 安装特征和服务
- (void)setup {
    
    // 创建服务的UUID
    CBUUID *serviceUUID = [CBUUID UUIDWithString:SERVICE_UUID];
    
    // 创建服务
    CBMutableService *service = [[CBMutableService alloc] initWithType:serviceUUID primary:YES];
    
    // 创建特征的UUID
    CBUUID *characteristicUUID = [CBUUID UUIDWithString:CHARACTERISTIC_UUID];
    
    // 注意: value设置为nil  创建一个可读写,可订阅的characteristic
    CBMutableCharacteristic *characteristic = [[CBMutableCharacteristic alloc] initWithType:characteristicUUID properties:CBCharacteristicPropertyRead | CBCharacteristicPropertyWrite value:nil permissions:CBAttributePermissionsReadable | CBAttributePermissionsWriteable];
    
    // 把特征放进服务中
    service.characteristics = @[characteristic];
    
    // 把服务器添加到外设中
    //添加后就会调用代理的- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error

    [self.periperalMgr addService:service];
}
4.开始广播
- (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error
{
    // 开始广播
    [self.periperalMgr startAdvertising:@{
                                          CBAdvertisementDataServiceUUIDsKey:@[[CBUUID UUIDWithString:SERVICE_UUID]]
                                          }];

}

//peripheral开始发送advertising
- (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error
{
    
}
5.响应center操作
//中心设备读characteristics请求
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request{

    //判断是否有读数据的权限
    if (request.characteristic.properties & CBCharacteristicPropertyRead) {
        NSData *data = request.characteristic.value;
        [request setValue:data];
        //对请求作出成功响应
        [self.periperalMgr respondToRequest:request withResult:CBATTErrorSuccess];
    }else{
        [self.periperalMgr respondToRequest:request withResult:CBATTErrorWriteNotPermitted];
    }
}
//中心设备写characteristics请求
- (void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveWriteRequests:(NSArray *)requests{
    CBATTRequest *request = requests[0];
    //判断是否有写数据的权限
    if (request.characteristic.properties & CBCharacteristicPropertyWrite) {
        //需要转换成CBMutableCharacteristic对象才能进行写值
        CBMutableCharacteristic *myCharacteristic =(CBMutableCharacteristic *)request.characteristic;
        myCharacteristic.value = request.value;
        [self.periperalMgr respondToRequest:request withResult:CBATTErrorSuccess];
    }else{
        [self.periperalMgr respondToRequest:request withResult:CBATTErrorWriteNotPermitted];
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • (一) iOS蓝牙开发蓝牙相关基础知识 蓝牙常见名称和缩写 MFI ======= make for ipad ...
    雷鸣1010阅读 10,438评论 2 12
  • 常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备...
    郭豪豪阅读 5,985评论 0 2
  • 首先进一则广告: 蓝牙技术联盟(Bluetooth SIG)2010年7月7日宣布,正式采纳蓝牙4.0核心规范(B...
    L泽阅读 5,319评论 3 4
  • 在写这个博客之前,空余时间抽看了近一个月的文档和Demo,系统给的解释很详细,接口也比较实用,唯独有一点,对于设备...
    木易林1阅读 8,729评论 3 4
  • 谨以此文献给那些我已经勾勒不起相貌的你们! 壹 以前,我家有个房东,是位爷爷奶奶,爷爷姓常。那时我们一家刚到北京,...
    Hey客栈阅读 1,760评论 0 3

友情链接更多精彩内容