大数跨境
0
0

对iOS蓝牙的一些探索

对iOS蓝牙的一些探索 点融黑帮
2016-06-03
2
导读:时尚智能生活,从蓝牙开发起始。

蓝牙是瑞典的爱立信公司在1994年发明的,到现在已有20多年的历史,大概经历了以下几个版本。


  • 1和1.1版本,主要用于耳机和设备之间的无线通信

  • 2.0和2.1版本,增加了数据的传输速度,因此可以允许立体声音乐从手机播放器传都无线耳机上

  • 3.0版本,允许更高的数据传输速率,可以做到在设备间传输大文件

  • 4.0版本,我们称之为蓝牙智能


核心与特点


蓝牙,是一个基于点对点的通信系统,其中一台拥有数据的设备作为服务器,另一台消费数据的设备作为客户端,作为一个无线技术标准,可以实现固定设备、移动设备和楼宇个人域网之间的短距离数据交换。


两部iphone手机,手机A里面有一手好听的歌曲,手机B里面没有,可以把手机A里面的歌曲通过蓝牙设备传送给B手机,那么A手机就是服务器,B手机就是客户端了。


蓝牙具有实现简单的特点,作为一个无线技术标准,可以实现固定设备,移动设备和楼宇个人域网之间的短距离数据交换,不需要系统层的驱动。换句话说,应用既可以是驱动,也可以是软件。


蓝牙开发


最常用的蓝牙sdk 是CoreBluetooth.framework 提供的。它是从ios5开始可用,是专门为蓝牙设备设计的。


在ios中,一般服务器叫做外围设备,客户端叫做中心设备。Ios设备作为客户端从一个蓝牙设备读取数据,可以用CoreBluetooth.framework里的CBCentralManager这个类来做事情。Ios设备作为服务端发送数据,则用CBPeripheral 类来表示。


客户端的功能实现的基本思路就是,实例化CBCentralManager 类,然后设置代理,扫描周围服务端,若扫描到之后,则进行连接,连接成功之后,就可以顺利接收数据了。

具体实现步骤:


  1. 创建客户端

    centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil options:nil];


  2. 扫描外围设备

    [cetralManager scanForPeripheralsWithServices:nil options:nil];

    找到外围设备后,通过CBCentralManagerDelegate 的 centralManager:didDiscoverPeripheral:advertismentData:RSSI:方法可以获取外围设备的详细信息。


  3. 发现外围设备,并连接软件而言,其用户体验的量化标准便是appstore的评分。

    [centralManager connectPeripheral:peripheral options:nil];


  4. 寻找外围设备提供的服务

    在委托方法didConnectPeripheral中发现外围设备提供的服务。

    [Peripheral discoverServices:nil];

    外围设备提供的服务列表是通过 CBCentralManagerDelegate 中的另一个委托方法 peripheral:didDiscoverServices:通知的。


  5. 从相应匹配的服务中发现符合特性

    通过didDiscoverCharacteristcsForService:error:委托回调可以得到制定服务的特性列表。


  6. 收到数据,或者处理数据

    通过委托方法 peripheral:didUpdateValueForCharacteristic:error:中接收数据。



服务端的实现方法与客户端大同小异,服务端是通过CBPeripheral类来实现,它的大概思路为,创建实例化对象,设置代理,创建服务设备,然后与客户端进行连接,若发现已经连接,则可以向客户端发送数据。

具体实现方法:


  1. 初始化外围设备管理器

    manager = [[CBPeripheralManager alloc]initWithDelegate:self queue:nil]


  2. 外围设备管理器委托。

    通过CBPeripheralManager 的代理方法 peripheralManagerDidUpdateState:来实现委托。


  3. 创建外围设备服务

    CBUUID *serviceUUID = [CBUUID UUIDWithString:kServiceUUID];

    service  =    [[CBMutableService alloc] initWithType:serviceUUID primary:YES];


    CBUUID *           charcteristicUUID = [CBUUID UUIDWithString:k CharcteristicUUID];

    characteristic = [[CBMutableCharcteristic alloc]initWithType:kCharacteristicUUID properties:CBCharacteristicPropertyNotify value:nil permissions:CBAttributePermissionsReadable];

    [service setCharacteristics:@[characteristic]];

    [manager addService:service];


  4. 外围设备的didAddService 委托

    添加服务器之后,就是开启广播。在成功添加服务器的委托回调里开启广播


    [manager dtartAdvertising:@{CBAdertisementDataLocalNameKey:@“namekey”,CBAdertisementDataServiceUUIDkey:@[[CBUUID UUID WithString:kServiceUUID]]}];


  5. 中心设备订阅委托回调didSubscribeToCharacteristic

    [subscribedCentrals addObject:central];


  6. 通知已订阅设备

    [manager updateValue:data forCharacteristic:characteristic onSubscribedCentrals:subscribedCentrals];


小结


蓝牙的发展,是我们生活智能化的萌芽,它就像我们人类的语言一样,可以让智能设备更好的交流沟通,让科技之间更好的协作,也是软件与硬件连接的一个桥梁,蓝牙技术值得你我进行深入探索。



本文作者:班建华(点融黑帮),来自点融北京技术团队,拥有三年金融行业软件研发经验,热爱软件开发,喜欢探索新的技术。



随着点融网新一轮融资,点融网即将开始大规模的扩张,需要各种优秀人才的加入,如果你觉得自己够优秀,欢迎加入我们!获取更多职位信息,请关注点融黑帮。

【声明】内容源于网络
0
0
点融黑帮
点融黑帮——一个充满激情和梦想的技术团队,吸引了来自金融及信息科技领域的顶尖人才。我们正在用技术创新改变传统金融。
内容 374
粉丝 0
点融黑帮 点融黑帮——一个充满激情和梦想的技术团队,吸引了来自金融及信息科技领域的顶尖人才。我们正在用技术创新改变传统金融。
总阅读664
粉丝0
内容374