关闭

iOS 蓝牙使用小结 bluetooth

307人阅读 评论(0) 收藏 举报
分类:
iOS 蓝牙使用小结 bluetooth

首先推荐去看官方文档哦


最近做一项目,本来蓝牙通讯这块不是我负责的,但是负责这块的同事要走,只好咬咬牙学习了。呜呜呜。。。。。


现将创建蓝牙工程的要点总结一下,由于工程主要涉及中心模式,所以只总结中心模式的用法

1,引入CoreBluetooth.framework

2,实现蓝牙协议,如:

.h文件如下

@protocol CBCentralManagerDelegate;

@protocol CBPeripheralDelegate;


@interface ViewController : UIViewController 


.m文件如下

#import "CoreBluetooth/CoreBluetooth.h"

另外还有代理部分请自行添加


3,下面是使蓝牙动起来的过程

3.1创建CBCentralManager实例

self.cbCentralMgr = [[CBCentralManager alloc] initWithDelegate:self queue:nil];

设置代理,比如:

self.cbCentralMgr.delegate = self;


创建数组管理外设

self.peripheralArray = [NSMutableArray array];


3.2扫描周围的蓝牙

实际上周围的蓝牙如果可被发现,则会一直往外发送广告消息,中心设备就是通过接收这些消息来发现周围的蓝牙的

NSDictionary * dic = [NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithBool:false],CBCentralManagerScanOptionAllowDuplicatesKey, nil];

[self.cbCentralMgr scanForPeripheralsWithServices:nil options:dic];


3.3发现一个蓝牙设备

也就是收到了一个周围的蓝牙发来的广告信息,这是CBCentralManager会通知代理来处理

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

{

}

如果周围的蓝牙有多个,则这个方法会被调用多次,你可以通过tableView或其他的控件把这些周围的蓝牙的信息打印出来

3.4连接一个蓝牙

[self.cbCentralMgr connectPeripheral:peripheral options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBConnectPeripheralOptionNotifyOnDisconnectionKey]];

一个中心设备可以同时连接多个周围的蓝牙设备

当连接上某个蓝牙之后,CBCentralManager会通知代理处理


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

{

}


因为在后面我们要从外设蓝牙那边再获取一些信息,并与之通讯,这些过程会有一些事件可能要处理,所以要给这个外设设置代理,比如:

peripheral.delegate = self;

3.5查询蓝牙服务

[peripheral discoverServices:nil];

返回的蓝牙服务通知通过代理实现

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

{


for (CBService* service in peripheral.services){

}

}

3.6查询服务所带的特征值

[peripheral discoverCharacteristics:nil forService:service];

返回的蓝牙特征值通知通过代理实现

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

{

for (CBCharacteristic * characteristic in service.characteristics) {

}

}

3.7给蓝牙发数据

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

这时还会触发一个代理事件

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

{

}

3.8处理蓝牙发过来的数据

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

{

}


3.9 retrievePeripheralsWithIdentifiers 使用例子

-(IBAction) Retrieve:(id)Sender

{

[self.tvLog setText:@""];

NSMutableArray * Identifiers = [NSMutableArray array];

for (CBPeripheral * peripheral in self.peripheralArray) {

[Identifiers addObject:peripheral.identifier];

}


[self addLog:@"[self.cbCentralMgr retrievePeripheralsWithIdentifiers:self.PeripheralIdentifiers]"];

self.retrievePeripherals = [self.cbCentralMgr retrievePeripheralsWithIdentifiers:Identifiers];

for (CBPeripheral* peripheral in self.retrievePeripherals) {

[self addLog:[NSString stringWithFormat: @"%@ name:%@",peripheral,peripheral.name]];

}

[self.tableViewPeripheral reloadData];

}


3.10 retrieveConnectedPeripheralsWithServices 使用例子


-(IBAction) Retrieve:(id)Sender

{

[self.tvLog setText:@""];

NSMutableArray * services = [NSMutableArray array];

for (CBPeripheral * peripheral in self.peripheralArray) {

if (peripheral.isConnected) {

for (CBService *service in peripheral.services) {

[services addObject:service.UUID];

}

}

}

[self addLog:@"[self.cbCentralMgr retrieveConnectedPeripheralsWithServices:peripheral.services]"];

self.retrievePeripherals = [self.cbCentralMgr retrieveConnectedPeripheralsWithServices:services];

for (CBPeripheral* peripheral in self.retrievePeripherals) {

[self addLog:[NSString stringWithFormat: @"%@ name:%@",peripheral,peripheral.name]];

}

[self.tableViewPeripheral reloadData];

}




大概就这个个流程,例子中的参数设置,及其其他的一些代理请自己研究,因为我也是刚入门

例子在此,需要的请下载参考。

0
0
查看评论

iOS 蓝牙使用小结 bluetooth

首先推荐去看官方文档哦 现将创建蓝牙工程的要点总结一下,由于工程主要涉及中心模式,所以只总结中心模式的用法 1,引入CoreBluetooth.framework 2,实现蓝牙协议,如: .h文件如下 @protocol CBCentralManagerD
  • swibyn
  • swibyn
  • 2014-03-05 10:59
  • 13869

iOS开发之玩转蓝牙CoreBluetooth

之前详细谈过不少关于HTTP协议的知识点,TCP/IP也通过tcpdump做过简单的介绍,但网络协议的本质其实是连接,设备或者端之间连接的方式有多种,常见的http或者基于tcp的socket只是森林一叶,还有些不那么常见的协议比如蓝牙。适当脑洞,也能玩出不少新花样来。 关键概念 谈到蓝牙,很容...
  • xiaobo0134
  • xiaobo0134
  • 2016-11-01 11:22
  • 507

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

1.最新的4.0以其低功耗著称,所以一般也叫BLE(Bluetooth Low Energy)。iOS 有两个框架支持蓝牙与外设连接。一个是 ExternalAccessory。从ios3.0就开始支持,也是在iphone4s出来之前用的比较多的一种模式,但是它有个不好的地方,External Ac...
  • wuming22222
  • wuming22222
  • 2015-02-27 11:35
  • 1198

iOS之蓝牙简介和使用(二):MutipeerConnectivity

蓝牙mutipeerConnectivity简介* iOS 7引入的一个全新框架* 多点连接* 替代GameKit框架* 多用于文件的传输* iOS设备不联网也能跟附近的人聊天* FireChat * See You Around * 以上近场聊天App都是基于mutipeerConnectivit...
  • wzc10101415
  • wzc10101415
  • 2017-02-14 16:29
  • 281

BlueTooth: 蓝牙Profile的概念和常见种类

蓝牙Profile Bluetooth的一个很重要特性,就是所有的Bluetooth产品都无须实现全部 的Bluetooth规范。为了更容易的保持Bluetooth设备之间的兼容,Bluetooth规范中定义了Profile。Profile定义了设备如何实现一种连接或者应用,你可以把Pro...
  • Augusdi
  • Augusdi
  • 2014-05-14 17:09
  • 1883

IOS开发之——IOS模拟器调试蓝牙BLE

由于在iPhone 4s之后的iOS才支持BLE,新一代的这些iOS设备又都不便宜,在做测试的时候,用iOS模拟器进行调试,可以节约一些开发成本。怎么在iOS模拟器上调试BLE,苹果最初给出的说明是,支持BLE的mac机子上可以用模拟器进行调试,并给出了一份技术文档(传送门),恶心的是,后来苹果抽风...
  • zhenyu5211314
  • zhenyu5211314
  • 2014-04-24 11:08
  • 8330

iOS 蓝牙开发 UUID不能使用 isConnected不能使用的问题解决

蓝牙协议问题
  • sinat_33917964
  • sinat_33917964
  • 2016-06-23 11:41
  • 757

ios 视频直播之蓝牙接入并转码成AAC

最近项目需求,使用蓝牙传输语音,并且集成到已有的直播SDK中。 汗本人对蓝牙一知半解,加油研究吧。 先将手机连上蓝牙音箱,然后开启手机本地的录制视频,发现蓝牙的声音并不能被录到视频中,汗,看来苹果自带的摄像机并没有把蓝牙集成进来,好吧我们能做的只有,从苹果相机获取视频,从可识别蓝牙的麦克风中,获...
  • yp2049858
  • yp2049858
  • 2016-06-15 17:45
  • 816

CoreBluetooth后台运行的实现

上一篇中实现了和蓝牙设备的通讯功能,在前台zhong
  • ox2A19
  • ox2A19
  • 2014-08-28 16:55
  • 1192

Bluetooth LE(低功耗蓝牙) - 第一部分

在写作的时候,谷歌刚刚发布了Android ,而摩托罗拉宣布摩托罗拉360智能手表。磨损的API仍然相当基本的,很好的记录,还有更多的来的,所以我不打算对他们写一个教程(没有,至少!)一个有趣的一件事。摩托罗拉360是由4.3个和后来的Android。这最明显的原因是,蓝牙LE只有在Android ...
  • likebamboo
  • likebamboo
  • 2014-05-21 15:35
  • 8026
    个人资料
    • 访问:15244次
    • 积分:219
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:31篇
    • 译文:0篇
    • 评论:0条