关闭

iOS之蓝牙开发—CoreBluetooth详解一

标签: CoreBluetooth蓝牙OCiOS蓝牙开发
2892人阅读 评论(3) 收藏 举报
分类:

        最近开始进行蓝牙模块的开发,下载一个名叫lightBlue的app,通过它可以扫描到周围开启的外部设别,并且可以进行连接,连接外部设备成功之后,就可以看到外部设别的相关信息,包含服务和特征的所有相关的信息。因为是小白,你得知道蓝牙开发的时候,打开苹果手机的蓝牙是扫描不到外部设备的。进行蓝牙开发,时下热门使用的是coreBluetooth这个框架,开发蓝牙这块,有两种模式,一个是中心模式,还有一个是外设模式。

        这里主要讲的是中心模式,中心模式的流程主要分为以下几步:1、建立中心设备 2、扫描外部设备 3、连接外部设备 4、扫描外部设备中的服务和特征 5、利用相关的特征与外部设备收发数据。

        进行讲解之前,我们得知道一个中心设备可以连接多个外部设备,一个外部设备包含一个或多个服务,一个服务包含一个或多个特征。

        下面根据我初学蓝牙的角度来讲解一下:

        1、首先是导入框架#import<CoreBluetooth/CoreBluetooth.h>

              然后创建中心设备并设置代理(不要忘记签订协议):

       CBCentralManager *manager = [[CBCentralManageralloc]init];

       self.manager = manager;

      一旦设置代理在运行程序的时候,就会调用协议里一个必须要完成的方法:

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

      这个方法是查看中心设备是否打开蓝牙。


    2、利用中心设备扫描外部设备:

      [manager scanForPeripheralsWithServices:niloptions:nil];

      第一个参数那里表示扫描带有相关服务的外部设备,例如填写@[[CBUUIDUUIDWithString:@"需要连接的外部设备的服务的UUID"]]即表示带有需要连接的外部设备的服务的UUID的外部设备nil表示扫描全部设备;

      options处以后细讲,暂时可以写一个@{CBCentralManagerScanOptionAllowDuplicatesKey :@YES}这样的参数,YES表示会让中心设备不断地监听外部设备的消息,NO就是不能。

      一旦扫描到外部设备,就会进入协议中的

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

      在这个方法里,我们可以根据我们获取到的硬件的某些条件进行筛选,然后连接我们需要连接的外部设备,例如连接名字带有A的外部设备:

       if ([peripheral.namehasPrefix:@"A"] ) {

           //连接设备

           [manager connectPeripheral:peripheraloptions:nil];

       }


    3、刚刚的if判断中的语句就是在进行中心设备和外部设备的连接。连接成功或者失败会分别进入

        - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral;(连接成功)

        - (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(nullableNSError *)error;(连接失败)


    4、我们在连接成功的方法中开始扫描外部设备的服务:

        [peripheral discoverServices:nil];

       接着就会跳入发现服务的代理方法中去:

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

       我们在这个方法里面开始扫描服务中的特征:

        [peripheral discoverCharacteristics:nilforService:service];

       当我们扫描到特征的时候,就会跳入发现特征的协议方法里去:

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


    5、扫描到特征之后,我们就可以拿到相应的特征进行读写操作。

       例如进行读取数据的操作:

        if ([characteristics.UUID.UUIDStringisEqualToString:@"你需要的特征的UUID"]){

             //读取特征数据

             [peripheral readValueForCharacteristic:characteristics];

        }

       这就读取了特征包含的相关信息,只要读取就会进入另外一个方法:

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

       在这个方法里,我们就可以拿到我们需要的数据了。进行写的操作是

        [peripheralwriteValue:data类型的数据 forCharacteristic:使用到的特征 type:CBCharacteristicWriteWithResponse];

       最后的type类型有两个,分别是CBCharacteristicWriteWithResponse和                                                  CBCharacteristicWriteWithoutResponse;

       选择第一个,每往硬件写入一次数据都会进入

        - (void)peripheral:(CBPeripheral *)peripheral didWriteValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error;

       这个方法会告诉我们这次的写入是否成功,但是如果我们不用考虑往硬件写入的数据成功与否的话,选择第二个类型就ok。

       以上就是简单的介绍了一下iOS中蓝牙的开发流程,便于初学者理解和认知,当然项目中的蓝牙开发没有这么的简单,需要结合实际情况综合考虑,但是一切都得从最简单的开始。本人也是刚开始学习蓝牙模块,有写的不对的地方,请大家指出,有理解不了的地方可以同我交流。





9
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

iOS-蓝牙简介及CoreBluetooth.framework的使用

1.最新的4.0以其低功耗著称,所以一般也叫BLE(Bluetooth Low Energy)。iOS 有两个框架支持蓝牙与外设连接。一个是 ExternalAccessory。从ios3.0就开始支...
  • wuming22222
  • wuming22222
  • 2015-02-27 11:35
  • 1176

iOS中的蓝牙开发

iOS蓝牙模块支持BLE4.0设备通讯。 在使用蓝牙的过程中,如果是iOS10及以上机型需要在info.plist文件中添加NSBluetoothPeripheralUsageDescripti...
  • Keep_Moving31038
  • Keep_Moving31038
  • 2017-08-27 20:13
  • 157

iOS coreBluetooth编程中需要注意的问题

iOS 设备作为中心设备(central device)时需要注意:(1)一定要对central Manager保持强引用,也就是说central Manager需要是一个全局变量不能是局部变量,否则...
  • ohyeahhhh
  • ohyeahhhh
  • 2016-08-10 19:01
  • 2092

CoreBluetooth应用_蓝牙连接>>收集心跳数据

CoreBluetooth框架 这个介绍网上一搜一大堆,简单说下. 首先 CGBluetooth 是给BLE4写的 (新的低功耗蓝牙标准) iOS6以后使用,  现在估计还在跑iOS7或者以前的版本...
  • iosYangming
  • iosYangming
  • 2016-04-22 18:16
  • 2250

iOS之蓝牙开发—CoreBluetooth详解二

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

iOS之蓝牙开发—CoreBluetooth详解二

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

iOS蓝牙4.0 CoreBluetooth框架开发

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

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

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

iOS开发之玩转蓝牙CoreBluetooth

之前详细谈过不少关于HTTP协议的知识点,TCP/IP也通过tcpdump做过简单的介绍,但网络协议的本质其实是连接,设备或者端之间连接的方式有多种,常见的http或者基于tcp的socket只是森林...
  • xiaobo0134
  • xiaobo0134
  • 2016-11-01 11:22
  • 470

iOS蓝牙开发--CoreBluetooth

看了几天的关于iOS蓝牙的资料,总的来说,用起来挺麻烦的 XXD。。       (CoreBluetooth框架用的 4.0  BLE协议--buletouch low energy​)    ...
  • u011494083
  • u011494083
  • 2016-05-30 09:46
  • 183
    个人资料
    • 访问:46274次
    • 积分:778
    • 等级:
    • 排名:千里之外
    • 原创:25篇
    • 转载:0篇
    • 译文:0篇
    • 评论:17条
    最新评论