美文网首页
BLE蓝牙开发 (三) 手机作为外设开发

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

作者: Maggie的小蜗居 | 来源:发表于2017-05-26 11:32 被阅读61次

    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];
        }
    }
    
    

    相关文章

      网友评论

          本文标题:BLE蓝牙开发 (三) 手机作为外设开发

          本文链接:https://www.haomeiwen.com/subject/icutfxtx.html