BabyBluetooth 0.7.0

BabyBluetooth 0.7.0

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布上次发布2016年5月

coolnameismy维护。



  • liuyanwei

在iOS中使用蓝牙(BLE)最快的方法,即使婴儿也能使用。这是一个简单易用的蓝牙库,基于CoreBluetooth的封装,并兼容iOS和macOS。

为什么要使用它?

  • 1:基于原生CoreBluetooth框架封装的轻量级开源库,可以帮你更简单地使用CoreBluetooth API。
  • 2:CoreBluetooth所有方法都是通过委托完成,代码冗余且顺序混乱。BabyBluetooth使用block方法,可以重新按照功能和顺序组织代码,并且提供许多方法来减少蓝牙开发过程中的代码量。
  • 3:链式方法体,代码更简洁、优雅。
  • 4:通过channel切换区分委托调用,并方便切换。
  • 5:便捷的工具方法。
  • 6:完善的文档,并且项目处于活跃状态,持续更新中。
  • 7:GitHub上获得星标最多的纯蓝牙类库。
  • 8:包含多种类型的demo和iOS蓝牙开发教程。
  • 9:同时支持蓝牙设备中心模式和外设模式(central model and peripheral model)。

当前版本 0.6.0

请参考wiki中的详细文档。项目的完整文档可在其wiki中找到。

英文说明链接,请点击!

目录

快速示例

中心模式 central model

app作为中心,连接其他BLE4.0外设

//导入.h文件和系统蓝牙库的头文件
#import "BabyBluetooth.h"
//定义变量
BabyBluetooth *baby;

-(void)viewDidLoad {
    [super viewDidLoad];

    //初始化BabyBluetooth 蓝牙库
    baby = [BabyBluetooth shareBabyBluetooth];
    //设置蓝牙委托
    [self babyDelegate];
    //设置委托后直接可以使用,无需等待CBCentralManagerStatePoweredOn状态
    baby.scanForPeripherals().begin();
}

//设置蓝牙委托
-(void)babyDelegate{

    //设置扫描到设备的委托
    [baby setBlockOnDiscoverToPeripherals:^(CBCentralManager *central, CBPeripheral *peripheral, NSDictionary *advertisementData, NSNumber *RSSI) {
        NSLog(@"搜索到了设备:%@",peripheral.name);
    }];

    //过滤器
    //设置查找设备的过滤器
    [baby setFilterOnDiscoverPeripherals:^BOOL(NSString *peripheralName, NSDictionary *advertisementData, NSNumber *RSSI) {
        //最常用的场景是查找某一个前缀开头的设备 most common usage is discover for peripheral that name has common prefix
        //if ([peripheralName hasPrefix:@"Pxxxx"] ) {
        //    return YES;
        //}
        //return NO;
        //设置查找规则是名称大于1 , the search rule is peripheral.name length > 1
        if (peripheralName.length >1) {
            return YES;
        }
        return NO;
    }];

    //.......
}

更多蓝牙操作方法和委托请参考wiki

中心模式使用示例请参考:BabyBluetoothAppDemo

外设模式 peripheral model

app模拟一个,BLE4.0外设,可以被其他设备连接和使用

模拟一个有2个service和6个characteristic的外设

//导入.h文件和系统蓝牙库的头文件
#import "BabyBluetooth.h"
//定义变量
BabyBluetooth *baby;

-(void)viewDidLoad {
    [super viewDidLoad];

    //配置第一个服务s1
    CBMutableService *s1 = makeCBService(@"FFF0");
    //配置s1的3个characteristic
    makeCharacteristicToService(s1, @"FFF1", @"r", @"hello1");//读
    makeCharacteristicToService(s1, @"FFF2", @"w", @"hello2");//写
    makeCharacteristicToService(s1, genUUID(), @"rw", @"hello3");//可读写,uuid自动生成
    makeCharacteristicToService(s1, @"FFF4", nil, @"hello4");//默认读写字段
    makeCharacteristicToService(s1, @"FFF5", @"n", @"hello5");//notify字段
    //配置第一个服务s2
    CBMutableService *s2 = makeCBService(@"FFE0");
    makeStaticCharacteristicToService(s2, genUUID(), @"hello6", [@"a" dataUsingEncoding:NSUTF8StringEncoding]);//一个含初值的字段,该字段权限只能是只读

    //实例化baby
    baby = [BabyBluetooth shareBabyBluetooth];
    //配置委托
    [self babyDelegate];
    //启动外设
    baby.bePeripheral().addServices(@[s1,s2]).startAdvertising();
}

//设置蓝牙外设模式的委托
-(void)babyDelegate{

     //设置添加service委托 | set didAddService block
    [baby peripheralModelBlockOnPeripheralManagerDidUpdateState:^(CBPeripheralManager *peripheral) {
        NSLog(@"PeripheralManager trun status code: %ld",(long)peripheral.state);
    }];

    //设置添加service委托 | set didAddService block
    [baby peripheralModelBlockOnDidStartAdvertising:^(CBPeripheralManager *peripheral, NSError *error) {
        NSLog(@"didStartAdvertising !!!");
    }];

    //设置添加service委托 | set didAddService block
    [baby peripheralModelBlockOnDidAddService:^(CBPeripheralManager *peripheral, CBService *service, NSError *error) {
        NSLog(@"Did Add Service uuid: %@ ",service.UUID);
    }];

    //.....
}

更多蓝牙外设模式委托请参考wiki

中心模式使用示例请参考:BluetoothStubOnIOS

如何安装

1 手动安装

步骤1:将项目Classes/objc 文件夹中的文件直接拖入你的项目中即可

步骤2:导入.h文件

#import "BabyBluetooth.h"

如何使用

请参考wiki中的用法。

示例程序说明

BabyBluetoothExamples/BabyBluetoothAppDemo :一个类似lightblue的程序,使用BabyBluetooth完成所有蓝牙操作。 功能:

  • 1:扫描周围的设备
  • 2:连接设备,扫描设备的所有services和characteristic
  • 3:显示characteristic,读取characteristic的value,和descriptors以及Descriptors对应的value
  • 4:写0x01到characteristic
  • 5:订阅/取消订阅 characteristic的notify

BabyBluetoothExamples/BluetoothStubOnIOS :一个iOS程序,启动后会用手机模拟一个外设,提供2个服务和若干characteristic。该程序作为Babybluetooth 外设模式使用的示例程序

BabyBluetoothExamples/BabyBluetoothOSDemo:这是一个mac os程序,由于os和ios的蓝牙底层方法都相同,因此BabyBluetooth可以同时适用于ios和os。但是os程序的优势在于可以直接在mac上运行蓝牙设备,而ios则必须使用真机才能运行蓝牙设备。因此,在无法使用真机调试的情况下,可以使用os程序来尝试蓝牙库的使用。

功能:

  • 1:扫描周围设备、连接设备、显示characteristic,读取characteristic的value,以及descriptors及对应的value的委托设置,并使用nslog打印信息。

BabyBluetoothExamples/BluetoothStubOnOSX:这是一个mac os程序,该程序可以作为蓝牙外设使用,解决学习蓝牙时没有外设可用的问题,并且可以作为peripheral model模式的学习示例。该程序使用swift进行编码。

功能:

  • 1:作为蓝牙外设使用,可以被发现、连接、读写、订阅。
  • 2:提供一个service,其中包含三个characteristic,分别具有读、读写、订阅功能。

兼容性:

  • 蓝牙4.0,也称为ble,ios 6以上和iPhone 4s以上可自由使用。
  • 兼容os和ios。
  • 与蓝牙设备相关联的程序必须使用真机才能运行。如果无法使用真机调试,则可以使用os程序来调试蓝牙。可以参考示例程序中的BabyBluetoothOSDemo。
  • 本项目和示例程序是使用ios 8.3开发的,使用者可以自行降低版本,但必须大于6.0。

后期更新:

  • 优化babyBluetooch的子类类名。
  • 增加对Carthage Install的支持。
  • swift版本开发。

已更新的版本说明请参考wiki。

蓝牙学习资源:

温馨提示:从零开始进行蓝牙开发可能会很困难,因此即使使用了babybluetooth降低了代码量,仍然非常有必要花几天时间理解蓝牙的基本概念,然后再开始动手。

QQ交流群4:313084771 QQ交流群3:530142592(已满) QQ交流群2:168756967(已满) QQ交流群1:426603940(已满)

期待:

  • 编写蓝牙库是非常辛苦的,请不要忘记点击右上角的小星星star和关注以支持一下~
  • 如果在使用过程中遇到BUG或发现功能不够用,希望您能通过Issues联系我,谢谢。
  • 期待大家也能一起为BabyBluetooth贡献代码,这里我只是打开了BabyBluetooth的大门,还有很多可以增加和优化的地方。也期待和大家一起在Pull Requests中学习、交流、成长。