iOS蓝牙开发--CoreBluetooth

原创 2016年05月30日 09:46:30

看了几天的关于iOS蓝牙的资料,总的来说,用起来挺麻烦的 XXD。。

      (CoreBluetooth框架用的 4.0  BLE协议--buletouch low energy​)

        CoreBluetooth框架的核心其实有两个东西,central(中心)和peripheral(外设)。分别对应两种模式:central模式是把你的app当成中心,连接其他外设如手环、蓝牙音响;peripheral模式是把你的app当成外设,去广播信号,连接别的中心。

        一般项目中,App都是用的central模式,蓝牙设备是peripheral,设备硬件写好4.0  BLE协议,你的App就可以通过蓝牙写命令进去了。(现在大多用4.0协议,用别的暂时没研究,估计大同小异,只不过就不是用CoreBluetooth这个框架了,如之前2.0的用的ExternalAccessory框架。)

       言归正传,如何通过蓝牙传递数据?一般的外设要创建一个以上服务​service,每个服务里面包括一个以上特征characteristic每个特征里面包括一个或多个描述Description。服务service相当于API接口, 特征characteristic就是我们传递数据的地方,描述Description是用来描述每个特征的信息或属性。

用法:

        #import ​    //先载入头文件

        @interface ViewController ()CBPeripheralDelegate>

   { 

      CBCentralManager *manager;  //主设备管理对象 

      NSMutableArray *peripherals;//用于保存被发现设备 

    }

   - (void)viewDidLoad { [super viewDidLoad]; 

    //初始化并设置委托和线程队列,线程的参数可以为nil,默认是main线程 

    manager = [[CBCentralManager alloc] initWithDelegate:self queue:dispatch_get_main_queue()];

    ​​}

        //代理方法:centralManager成功打开,会触发这个方法

    -(void)centralManagerDidUpdateState:(CBCentralManager *)central{ 

     if(CBCentralManagerStatePoweredOn == central.state)

            {

                  //1⃣️开始扫描,第一个参数nil指定扫描所有外设。

                  [manager  scanForPeripheralsWithServices:nil  options:nil];

            }​

   }

    //扫描到设备会进入此方法

    -(void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI{ 

 // 一个主设备最多能连7个外设,每个外设最多只能给一个主设备连接 

//找到的设备必须(retained)持有它,否则CBCentralManager中也不会保存peripheral,那么CBPeripheralDelegate中的方法也不会被调用!!

  [peripherals addObject:peripheral]; //retained扫到的设备很重要

  [manager connectPeripheral:peripheral options:nil]; //2⃣️连接设备 

}

    //连接到Peripherals-成功 

    - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral {

   NSLog(@">>>连接到名称为(%@)的设备-成功",peripheral.name); 

   //设置peripheral的委托CBPeripheralDelegate 

   [peripheral setDelegate:self]; 

   //3⃣️扫描外设Services

   [peripheral discoverServices:nil];

 }

     //扫描到Services 

     -(void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error{ 

   // NSLog(@">>>扫描到服务:%@",peripheral.services); 

   for (CBService *service in peripheral.services) {

      NSLog(@"%@",service.UUID);

     //4⃣️扫描每个service的Characteristics

     [peripheral discoverCharacteristics:nil forService:service]; 

   }

}

     //扫描到Characteristics 

      -(void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error{

      for (CBCharacteristic *characteristic in service.characteristics) {

      NSLog(@"service:%@ 的 Characteristic: %@",service.UUID,characteristic.UUID); 

      } 

    //5⃣️获取Characteristic的值,读到数据会进入方法:-(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:

    for (CBCharacteristic *characteristic in service.characteristics){ 

     [peripheral readValueForCharacteristic:characteristic]; 

  } 

    //7⃣️搜索Characteristic的Descriptors 

     for (CBCharacteristic *characteristic in service.characteristics){ 

    [peripheral discoverDescriptorsForCharacteristic: characteristic]; 

  }

}

   //6⃣️获取到characteristic的值

    -(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ 

 //value的类型是NSData

    ​   NSLog(@"characteristic uuid:%@        value:%@",characteristic.UUID,characteristic.value); 

 } 

 //8⃣️搜索到Characteristic的Descriptors 

 -(void)peripheral:(CBPeripheral *)peripheral didDiscoverDescriptorsForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error{ 

    for (CBDescriptor *d in characteristic.descriptors) {   

        NSLog(@"Descriptor uuid:%@",d.UUID);

    }

}

    //9⃣️获取到Descriptors的值 

    -(void)peripheral:(CBPeripheral *)peripheral didUpdateValueForDescriptor:(CBDescriptor *)descriptor error:(NSError *)error{ 

   //这个descriptor都是对于characteristic的描述,一般都是字符串,所以这里我们转换成字符串去解析 

    NSLog(@"characteristic uuid:%@ value:%@",[NSString stringWithFormat:@" %@ ",descriptor.UUID],descriptor.value); 

}

其他

//写数据到Characteristic中

[peripheral writeValue:value forCharacteristic:characteristic type:CBCharacteristicWriteWithResponse];

//设置通知,一有数据通知会进入:didUpdateValueForCharacteristic方法 [peripheral setNotifyValue:YES forCharacteristic:characteristic];

//停止扫描 

 [centralManager stopScan]; 

//断开连接 

 [centralManager cancelPeripheralConnection:peripheral];



参考资料:

   ​刘彦玮的博客


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

iOS之蓝牙开发—CoreBluetooth详解一

最近开始进行蓝牙模块的开发,下载一个名叫lightBlue的app,通过它可以扫描到周围开启的外部设别,并且可以进行连接,连接外部设备成功之后,就可以看到外部设别的相关信息,包含服务和特征的所有相关的...

iOS蓝牙4.0 CoreBluetooth框架开发

CoreBluetooth框架的核心其实是两个东西,peripheral和central,可以理解成外设和中心。对应他们分别有一组相关的API和类。周边(Peripheral)是生成或者保存了数据的设...

iOS开发——CoreBluetooth蓝牙开发(二)

前面一讲iOS开发——CoreBluetooth蓝牙开发(一)中,我们已经知道了Core BlueTooth的两个重要角色Central和Peripheral。这一讲我们来进一步地、更加具体地来探讨这...

ios 蓝牙4.0开发(CoreBlueTooth)

一、蓝牙开发引入情景 : 蓝牙(Center)监听心跳仪(Peripheral)发送数据,发送到服务器。 心跳仪->外设(被连接的设备),蓝牙->中心(发起连接)类似,客户端和服务器之间的关系(i...

iOS之蓝牙开发—CoreBluetooth详解二

这里主要向大家简单地讲解一下的通过中心设备对外设硬件进行数据的写入和反馈消息的获取。 在进行讲解之前,我们需要明白以下几点: 1.查看特征的属性: typedef NS_OPTIONS(NSUInt...

iOS开发——CoreBluetooth蓝牙开发(三)

在这一讲中,我们将学习如何开发Central蓝牙应用,包括: 建立Central管理模块CBCentralManager 发现和连接正在广播对Peripheral 在和Peripheral建立连接后获...

iOS 开发——CoreBluetooth蓝牙开发(一)

最近要做关于iOS上的蓝牙开发项目,为此阅读了苹果的官方文档,这里做一些翻译和摘录和大家共享交流。

小米手环iOS开发实战(一):iOS蓝牙框架CoreBluetooth

小米手环iOS开发实战(一):iOS蓝牙框架CoreBluetooth本项目为对小米手环进行二次开发,利用了小米手环蓝牙连接并不安全的特性,连接后可以获取手环数据,并可修改数据。 本实例使用Swif...

iOS 蓝牙 Corebluetooth

蓝牙的现状: *绝大多数智能手机支持蓝牙4.0(BLE) *蓝牙芯片发展迅速,在性能和效率方面都有很大提高,且不断变得更小更便宜 *iBeacon +蓝牙,前景一片光明 -应用之一:室内导...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)