iOS开发 - Core Bluetooth蓝牙开发

Core Bluetooth

Core Bluetooth测试比较麻烦,正常情况下,得至少有2台真实的蓝牙4.0设备

如何让iOS模拟器也能测试蓝牙4.0程序?

买一个CSR蓝牙4.0 USB适配器,插在Mac上

在终端输入sudo nvram bluetoothHostControllerSwitchBehavior=”never”

重启Mac

用Xcode 4.6调试代码,将程序跑在iOS 6.1的模拟器上

(苹果把iOS 7.0模拟器对BLE的支持移除掉了)

Core Bluetooth的使用场景

运动手环、智能家居、嵌入式设备等等(金融刷卡器、心电测量器)

Core Bluetooth的核心结构图

Core Bluetooth的基本常识

每个蓝牙4.0设备都是通过服务(Service)和特征(Characteristic)来展示自己的

一个设备必然包含一个或多个服务,每个服务下面又包含若干个特征

特征是与外界交互的最小单位

比如说,一台蓝牙4.0设备,用特征A来描述自己的出厂信息,用特征B来收发数据

服务和特征都是用UUID来唯一标识的,通过UUID就能区别不同的服务和特征

设备里面各个服务(service)和特征(characteristic)的功能,均由蓝牙设备硬件厂商提供,比如哪些是用来交互(读写),哪些可获取模块信息(只读)等

Core Bluetooth的开发步骤

建立中心设备

扫描外设(Discover Peripheral)

连接外设(Connect Peripheral)

扫描外设中的服务和特征(Discover Services And Characteristics)

利用特征与外设做数据交互(Explore And Interact)

断开连接(Disconnect)

蓝牙的现状

绝大多数智能手机支持蓝牙 4.0(BLE)

蓝牙芯片发展迅速,在性能和效率方面都有很大提高,且不断变得更小更便宜

iBeacon + 蓝牙,前景一片光明

应用之一:室内导航

Estimote公司为iBeacon提供基站

3个iBeacon基站的预购价格为99美元(约合人民币610元)

Estimote公司推出的iBeacon基站的最远传输距离为50m,但是他们推荐在10m范围内的使用效果最好

一块纽扣电池就能为一个iBeacon基站提供长达 2 年的使用寿命,而且是在设备不断对外发射信号的情况下

Core Bluetooth开发实例

#import "ViewController.h"
#import <CoreBluetooth/CoreBluetooth.h>

@interface ViewController ()<CBCentralManagerDelegate, CBPeripheralDelegate>
/**
 *  外设
 */
@property (nonatomic, strong) NSMutableArray *peripherals;
/**
 *  中心管理者
 */
@property (nonatomic, strong) CBCentralManager *mgr;
@end

@implementation ViewController

- (NSMutableArray *)peripherals
{
    if (!_peripherals) {
        _peripherals = [NSMutableArray array];
    }
    return _peripherals;
}

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.

    // 1.创建中心设备
    CBCentralManager *mgr = [[CBCentralManager alloc] init];
    self.mgr = mgr;

    // 设置代理
    mgr.delegate = self;

    // 2.利用中心设备扫描外部设备
    /*
     如果指定数组代表只扫描指定的设备
     */
    [mgr scanForPeripheralsWithServices:nil options:nil];
}
#pragma mark - CBCentralManagerDelegate
- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI
{

    // 保存扫描到得外部设备
    // 判断如果数组中不包含当前扫描到得外部设置才保存
    if (![self.peripherals containsObject:peripheral]) {

        peripheral.delegate = self;
        [self.peripherals addObject:peripheral];
    }
}

/**
 *  模拟点击, 然后连接所有的外设
 */
- (void)start
{
    for (CBPeripheral *peripheral in self.peripherals) {
        /**
         *  连接外设
         */
        [self.mgr connectPeripheral:peripheral options:nil];
    }
}
/**
 *  连接外设成功调用
 */
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral
{
    // 扫描外设中得服务
    [peripheral discoverServices:nil];
}
/**
 *  连接外设失败调用
 */
- (void)centralManager:(CBCentralManager *)central didDisconnectPeripheral:(CBPeripheral *)peripheral error:(NSError *)error
{

}

#pragma makr - CBPeripheralDelegate
/**
 *  只要扫描到服务就会调用
 *
 *  @param peripheral 服务所在的外设
 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error
{

    // 获取外设中所有扫描到得服务
    NSArray *services = peripheral.services;
    for (CBService *service in services) {
        // 拿到需要的服务
        if ([service.UUID.UUIDString isEqualToString:@"123"])
        {
            // 从需要的服务中查找需要的特征
            // 从peripheral中得service中扫描特征
            [peripheral discoverCharacteristics:nil forService:service];
        }
    }
}

/**
 *  只要扫描到特征就会调用
 *
 *  @param peripheral 特征所属的外设
 *  @param service    特征所属的服务
 */
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{

    // 拿到服务中所有的特诊
    NSArray *characteristics =  service.characteristics;
    // 遍历特征, 拿到需要的特征处理
    for (CBCharacteristic * characteristic in characteristics) {
        if ([characteristic.UUID.UUIDString isEqualToString:@"8888"]) {
            NSLog(@"设置闹钟");

        }
    }
}
@end

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

时间: 2024-08-09 10:10:21

iOS开发 - Core Bluetooth蓝牙开发的相关文章

iOS开发 -GameKit蓝牙开发

蓝牙4.0 蓝牙4.0是2012年最新蓝牙版本,是3.0的升级版本:较3.0版本更省电.成本低.3毫秒低延迟.超长有效连接距离.AES-128加密等:通常用在蓝牙耳机.蓝牙音箱等设备上. 蓝牙技术联盟(Bluetooth SIG)2010年7月7日宣布,正式采纳蓝牙4.0核心规范(Bluetooth Core Specification Version 4.0 ),并启动对应的认证计划.会员厂商可以提交其产品进行测试,通过后将获得蓝牙4.0标准认证. 该技术拥有极低的运行和待机功耗,使用一粒纽扣

浅谈Bluetooth蓝牙开发

前言:项目用到蓝牙开发,具体蓝牙获取硬件传感器中的数据. 因为没有蓝牙开发的相关经验,决定先了解一些蓝牙开发的知识,再去看之前同事写的蓝牙相关代码. --------------------------------------------------------------------------------------------------- 一.蓝牙开发相关类 1.BluetoothAdapter 显而易见,蓝牙适配器. 通过这个类我们进行以下操作: 1.开关蓝牙设备 2.扫描蓝牙设备 3

iOS开发笔记--Core Bluetooth开发

推荐阅读文章:http://blog.csdn.net/pony_maggie/article/details/26740237 一.前言 CoreBluetooth框架的核心其实是两个东西,peripheral和central, 可以理解成外设和中心.对应他们分别有一组相关的API和类,如下图所示: 二.Core Bluetooth 的基本常识:1. 每个蓝牙设备都是通过服务和特征来展示自己 一个设备必然包含一个或多给服务,每个服务下面又包含多个特征2.特征是与外界交互的最小单位 比如说,一台

IOS 蓝牙(GameKit、Core Bluetooth)

GameKit的蓝牙开发注意 ● 只能用于iOS设备之间的连接 ● 只能用于同一个应用程序之间的连接 ● 最好别利用蓝牙发送比较大的数据 iOS中蓝牙的实现方案 ● iOS中提供了4个框架用于实现蓝牙连接 ● GameKit.framework(用法简单) ? 只能用于iOS设备之间的连接,多用于游戏(比如五子棋对战),从iOS7开始过期 ● MultipeerConnectivity.framework ? 只能用于iOS设备之间的连接,从iOS7开始引入,主要用于文件共享(仅限于沙盒的文 件

Core BlueTooth官方文档翻译

本?文是苹果<Core Bluetooth Programming Guide>的翻译. 关于Core Bluetooth Core Bluetooth 框架提供了蓝?牙低功耗?无线设备与 iOS 应?用或 Mac 应?用通讯的必要的类.应?用可以发现,探索低功耗外设,并与它交互,?比如?心率监控器和数字 温度调节器. 从 OS X V10.9 和 iOS 6 之后,Mac 和 iOS 设备也能充当蓝?牙低功耗外设给包括 Mac 和 iOS 在内的其他设备提供数据服务了. 概览 蓝?牙低功耗?

iOS开发——高级技术&amp;蓝牙服务

蓝牙服务 蓝牙 随着蓝牙低功耗技术BLE(Bluetooth Low Energy)的发展,蓝牙技术正在一步步成熟,如今的大部分移动设备都配备有蓝牙4.0,相比之前的蓝牙技术耗电量大大降低.从iOS的发展史也不难看 出苹果目前对蓝牙技术也是越来越关注,例如苹果于2013年9月发布的iOS7就配备了iBeacon技术,这项技术完全基于蓝牙传输.但是众所周知苹果 的设备对于权限要求也是比较高的,因此在iOS中并不能像Android一样随意使用蓝牙进行文件传输(除非你已经越狱).在iOS中进行蓝牙传输

iOS蓝牙开发(一)蓝牙相关基础知识

原文链接: http://liuyanwei.jumppo.com/2015/07/17/ios-BLE-1.html iOS蓝牙开发(一)蓝牙相关基础知识: 蓝牙常见名称和缩写 MFI ======= make for ipad ,iphone, itouch 专们为苹果设备制作的设备 BLE ==== buletouch low energy,蓝牙4.0设备因为低耗电,所以也叫做BLE peripheral,central == 外设和中心,发起连接的时central,被连接的设备为peri

IOS开发——Core Graphics &amp; Core Animation

好久没写过blog了,首先了解下最近苹果和IOS方面的最新消息. 1.WWDC2014在上个月举行了,与2013年一样,今年WWDC没发布硬件产品和新品(如果你懂cook你就会期待今年秋季发布会,预计10中旬举行) 今年WWDC有一个最令人兴奋的新语言发布--Swift,小编也花了将近半个月来学习新语言,发现Swift与反人类语言objective-c不同的是完全抛弃了C,更像是js+lua+python+各种脚本语言的集合,这也是时间上最新最先进的开发语言,小道消息说swift今年4岁,也就是

iOS,蓝牙开发!!--By帮雷

iOS的蓝牙开发大致有以下几种方式. 1 GameKit.framework [只能存在于iOS设备之间,多用于游戏 能搜索到的demo比较多,不确切说名字了,code4app里面就有] 2 CoreBlueTooth.framework [必须要支持蓝牙4.0,且iPhone4以上,即至少4s手机.可与第三方设备交互数据, 官方demo是Temperature Sensor ] 3 ExternalAccessory.framework [可于第三方蓝牙设备交互,但是蓝牙设备必须经过MFI认证