今天项目中的蓝牙功能已经开发完毕,总结一下。
CoreBluetooth.framework:功能强大的蓝牙框架,只要该设备支持蓝牙4.0,就可以进行蓝牙传输,只要该设备支持蓝牙4.0。
CoreBluetooth中分为两大设备:中央设备和外围设备。
1.如果一个设备设置为外围设备,那他负责发布并广播服务,通知周围的中央设备它的可用服务和特征,相当于通信中的服务端
2.如果设备设置为中央设备,那他负责和外围设备建立连接,连接成功可以使用外围设备的服务和特征,相当于通信中的客户端。
即:
外围设备 —–类似于——-》服务器端
中央设备 —–类似于——-》客户端

这两大设备进行交互靠的是服务和特征。服务和特征都有唯一标识CBUUID来确定。
1.服务CBService:
中央设备只有通过服务才能与外围设备进行数据传输,类似于客户端通过网址URL才能与服务器连接一样
2.特征CBCharacteristic:
每个服务可以有多个特征,中央设备必须订阅外围设备服务的特征值,才能获取外围设备的数据,类似于GET请求可以请求获取服务器数据,POST请求可以向服务器传输数据一样。

一般我们需要的是中央设备,外围设备可以是手环,耳机……
设备作为中央设备 实现过程如下:

1.创建中央设备管理器对象,遵循代理CBCentralManagerDelegate

    self.manager = [[CBCentralManager alloc]initWithDelegate:self queue:dispatch_get_main_queue()];self.BleViewPerArr = [[NSMutableArray alloc]initWithCapacity:1];

2.代理方法 判断设备的蓝牙是否开启

- (void)centralManagerDidUpdateState:(CBCentralManager *)central{switch (central.state) {case CBCentralManagerStatePoweredOff:NSLog(@"您的手机蓝牙未开启");break;case CBCentralManagerStateResetting:NSLog(@"检测到您的手机蓝牙重置");break;case CBCentralManagerStateUnsupported:NSLog(@"检测到您的手机不支持蓝牙4.0");break;case CBCentralManagerStateUnauthorized:NSLog(@"检测到您的手机蓝牙没有授权");break;case CBCentralManagerStateUnknown:NSLog(@"未知状态");break;case CBCentralManagerStatePoweredOn:NSLog(@"检测到您的手机蓝牙正常开启,可以扫描外围设备");break;default:break;}
}

只有在蓝牙正常开启状态下才可以进行扫描
3.开始扫描外围设备

    /*判断状态开始扫瞄周围设备 第一个参数为空则会扫瞄所有的可连接设备  你可以指定一个CBUUID对象 从而只扫瞄注册用指定服务的设备*/[self.manager scanForPeripheralsWithServices:nil options:nil];//清空所有外设数组 没扫描一次最好清空数据源 以备战展示用[self.BleViewPerArr removeAllObjects];

4.扫描完成会调用CBCentralManagerDelegate代理方法

/*发现外围设备调用central           中央设备管理器peripheral        外围设备advertisementData 设备信息RSSI              信号质量(信号强度)可以用判断周边设备离中央设备的远近*/
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI方法{if (peripheral == nil||peripheral.identifier == nil/*||peripheral.name == nil*/){return;}//存放在数据源中NSString *pername=[NSString stringWithFormat:@"%@",peripheral.name];//判断是否存在@"你的设备名"NSRange range=[pername rangeOfString:@"你的设备名"];//如果从搜索到的设备中找到指定设备名,和BleViewPerArr数组没有它的地址//加入BleViewPerArr数组if(range.location!=NSNotFound&&[_BleViewPerArr containsObject:peripheral]==NO){[_BleViewPerArr addObject:peripheral];}//刷新自己的列表[_tableView reloadData];
}

以上就扫描到了外围设备,当然还需要将外围设备,展示在列表上

    /*蓝牙对象在下面环节会查找出来,被放进BleViewPerArr数组里面,是CBPeripheral对象,取出name*/CBPeripheral *per=(CBPeripheral *)_BleViewPerArr[indexPath.row];cell.textLabel.text =per.name;

5.接下来就是连接设备了,遵循外围设备对象代理CBPeripheralDelegate 我是在tableView的didSelect方法里连接的,如果确定只有一个设备,可以下载上面的方法里 直接连接

   CBPeripheral *peripheral=(CBPeripheral *)_BleViewPerArr[indexPath.row];//设定周边设备,指定代理者peripheral.delegate = self;//连接设备[_manager connectPeripheral:peripheraloptions:nil];

6.中央设备管理器成功连接到外围设备后调用

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{//设置设备代理[peripheral setDelegate:self];//大概获取服务和特征,或许只获取你的设备蓝牙服务的uuid数组,一个或者多个;//用 UUIDWithString 添加数组[peripheral discoverServices:nil];//停止扫描[_manager stopScan];
}
<font color=#0099ff size=2>

7.连接失败

- (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error{NSLog(@"error ==%@",error);
}

8.外围设备寻找到服务后调用CBPeripheralDelegate代理方法

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{    if (error) {NSLog(@"Error discovering services: %@", [error     localizedDescription]);return;}//已发现可用服务//遍历查找到的服务CBUUID *serviceUUID = [CBUUID UUIDWithString:@"你的设备服务的uuid"];CBUUID *characteristicUUID = [CBUUID UUIDWithString:kCharacteristicUUID];for (CBService *service in peripheral.services) {if([service.UUID isEqual:@"你的设备服务的uuid"]){//外围设备查找指定服务中的特征,characteristics为nil,表示寻找所有特征[peripheral discoverCharacteristics:nil forService:service];}}
}

9.围设备寻找到特征后调用CBPeripheralDelegate代理方法

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{if (error){NSLog(@"Discovered characteristics for %@ with error: %@", service.UUID, [error localizedDescription]);return;}NSLog(@"服务:%@",service.UUID);// 特征for (CBCharacteristic *characteristic in service.characteristics){NSLog(@"%@",characteristic.UUID);//发现特征//注意:uuid 分为可读,可写,要区别对待!!!if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"你的特征uuid"]]){NSLog(@"监听:%@",characteristic);//监听特征//保存characteristic特征值对象//以后发信息也是用这个uuid_characteristic1 = characteristic;[_discoveredPeripheral setNotifyValue:YES forCharacteristic:characteristic];}/*当然,你也可以监听多个characteristic特征值对象if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"你的特征uuid"]]){//同样用一个变量保存,demo里面没有声明变量,要去声明_characteristic2 = characteristic;[peripheral setNotifyValue:YES forCharacteristic:_characteristic2];NSLog(@"监听:%@",characteristic);//监听特征}*/}
}

10.外围设备读取到特征值后调用

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{if (error){NSLog(@"Error updating value for characteristic %@ error: %@", characteristic.UUID, [error localizedDescription]);return;}//收到的数据if (characteristic.value) { NSString *value = [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding];NSLog(@"读取到特征值:%@",value); }else{NSLog(@"未发现特征值."); }
}

至此 整个中央设备连接外围设备连接成功完成!
总结:
蓝牙连接可以大致分为以下几个步骤
1.建立一个Central Manager蓝牙管理对象
2.搜索外围设备
3.连接外围设备
4.获得外围设备的服务
5.获得服务的特征

iOS 蓝牙 Bluetooth 外围设备 中央设备相关推荐

  1. iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现]

    章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...

  2. iOS Core Bluetooth_4 用作中央设备的常用方法(2/2)[swift实现]

    章节连接 iOS Core Bluetooth_1 概述 iOS Core Bluetooth_2 基础知识 iOS Core Bluetooth_3 用作中央设备的常用方法(1/2)[swift实现 ...

  3. ios蓝牙扫描指定的设备scanForPeripheralsWithServices

    文章目录 0.苹果官方文档 1.扫描广播的service UUIDs是2803或是CB00的设备 2.扫描广播的service UUIDs是2803的设备 2.1 苹果手机蓝牙工具显示 2.2 安卓手 ...

  4. Android BLE低功耗蓝牙开发(下) BLE客户端(中央设备)与GATT服务的通讯

    之前的文章简单实现了使用传统蓝牙进行通讯的DEMO,说是最简单其实只是夸张的写法~毕竟标题党横行,我们也得学学点~至少没有UC震惊部那么夸张. 然后,本来是要写Android开发之BlueTooth- ...

  5. 完美解决iphone连电脑蓝牙出现bluetooth外围设备无法正确安装

    完美解决iphone连电脑蓝牙出现bluetooth外围设备无法正确安装 完美解决iphone连电脑蓝牙出现bluetooth外围设备无法正确安装 今天装打印机驱动时偶尔发现设备管理器中的未知设备栏有 ...

  6. 【转】完美解决iphone连电脑蓝牙出现bluetooth外围设备无法正确安装

    今天装打印机驱动时偶尔发现设备管理器中的未知设备栏有BlueTooth外围设备,然后在百度上一顿搜索,发现解决方法全是靠删除bluetooth设备或者蓝牙上网服务来实现的.这只是个治标不治本的烂方法. ...

  7. IOS用coreBluetooth库连接蓝牙外设(Andriod设备作为外设设备)出现The connection has timed out unexpectedly.

    情形:公司IOS项目用coreBluetooth库连接蓝牙外设(Andriod设备作为外设设备)出现The connection has timed out unexpectedly,但是androi ...

  8. ios 蓝牙开发总结

    随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,如今的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大降低.从iOS的发展史也不难看出 ...

  9. iOS 蓝牙 4.0 开发

    随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,如今的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大降低.从iOS的发展史也不难看出 ...

最新文章

  1. javascript表单之间的数据传递
  2. 在VirtualBox下安装linux操作系统
  3. hbase的HA模式配置和维护
  4. 一文教你用java实现出租车计价器设计(附下载源码)
  5. 软件定义的数据中心已经来临
  6. 【AI视野·今日CV 计算机视觉论文速览 第238期】Fri, 1 Oct 2021
  7. shallow clone
  8. cmake install_CMAKE入门实战
  9. MySQL数据库入门学习 #CSDN博文精选# #IT技术# #数据库# #MySQL#
  10. cmos和ttl_TTL和CMOS的区别详解
  11. 移动通信原理B-------课后作业1
  12. java graphics类详解_java 基础二 Graphics类
  13. 群发邮件软件和邮件群发工具哪个好?如何群发邮件不进入垃圾箱
  14. 什么是CDN资质?什么情况需要办CDN牌照
  15. 深度学习论文阅读目标检测篇(四)中英文对照版:YOLOv1《 You Only Look Once: Unified, Real-Time Object Detection》
  16. 都没滤网质量重要 细数净化器鸡肋功能
  17. 2020下半年新机最新消息_2020下半年3款重磅新机:三星Note20被吹爆,华为Mate40差点意思...
  18. 京东凡客模式遭质疑 电子商务或回归本质
  19. wifi信号增强android,wifi信号增强器下载安装
  20. 实现第一个JDBC程序

热门文章

  1. 新高考计算机科学与技术,2017年浙江新高考:“技术科目”成“黑马”
  2. Pointer being freed was not allocated
  3. dalle:zero-shot text-to-image generation
  4. python爬虫微博24小时热搜_Python爬虫之微博热搜
  5. 2021校园PHP表白墙程序源码
  6. Unity3d Ugui 10 Toggle ToggleGroup
  7. 串口硬盘与并口硬盘详解:IDE SATA SCSI 接口详解
  8. lol服务器位置地图,LOL老玩家一定能看懂的地图 每一个地点都充满回忆
  9. docker 安装的软件所在的目录及配置
  10. 360 VS QQ:一场精心策划的西安事变(下)