iOS 藍(lán)牙4.0開發(fā)

iOS 藍(lán)牙4.0開發(fā)

背景:

1.iOS的藍(lán)牙不能用來傳輸文件甚带。
2.iOS與iOS設(shè)備之間進(jìn)行數(shù)據(jù)通信拇厢,使用gameKit.framework
3.iOS與其他非iOS設(shè)備進(jìn)行數(shù)據(jù)通信喝峦,使用coreBluetooth.framework

iOS中藍(lán)牙的實(shí)現(xiàn)方案

iOS中提供了4個(gè)框架用于實(shí)現(xiàn)藍(lán)牙連接
GameKit.framework(用法簡單)
只能用于iOS設(shè)備之間的連接申屹,多用于游戲(比如五子棋對戰(zhàn))凤价,從iOS7開始過期

MultipeerConnectivity.framework
只能用于iOS設(shè)備之間的連接匙睹,從iOS7開始引入桅狠,主要用于文件共享(僅限于沙盒的文件)

ExternalAccessory.framework
可用于第三方藍(lán)牙設(shè)備交互潮瓶,但是藍(lán)牙設(shè)備必須經(jīng)過蘋果MFi認(rèn)證(國內(nèi)較少)

CoreBluetooth.framework(時(shí)下熱門)
可用于第三方藍(lán)牙設(shè)備交互蚕泽,必須要支持藍(lán)牙4.0
硬件至少是4s晌梨,系統(tǒng)至少是iOS6
藍(lán)牙4.0以低功耗著稱,一般也叫BLE(BluetoothLowEnergy)
目前應(yīng)用比較多的案例:運(yùn)動(dòng)手壞须妻、嵌入式設(shè)備仔蝌、智能家居

下面具體介紹使用CoreBluetooth.framework的代碼步驟:


//藍(lán)牙系統(tǒng)庫

#import <CoreBluetooth/CoreBluetooth.h>

//必須要由UUID來唯一標(biāo)示對應(yīng)的service和characteristic

#define kServiceUUID @"5C476471-1109-4EBE-A826-45B4F9D74FB9"

#define kCharacteristicHeartRateUUID @"82C7AC0F-6113-4EC9-92D1-5EEF44571398"

#define kCharacteristicBodyLocationUUID @"537B5FD6-1889-4041-9C35-F6949D1CA034"



@interface ViewController ()<CBCentralManagerDelegate,CBPeripheralDelegate>



@property (nonatomic,strong)CBCentralManager * centralManager;

@property (nonatomic,strong)CBPeripheral     * peripheral;

@end

1.創(chuàng)建中心角色

#import <CoreBluetooth/CoreBluetooth.h> 
- (void)viewDidLoad

{

    [super viewDidLoad];

    //初始化藍(lán)牙 central manager

    _centralManager = [[CBCentralManager alloc]initWithDelegate:self queue:dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0) options:nil];    

}



2.掃描外設(shè)

[manager scanForPeripheralsWithServices:nil options:@{CBCentralManagerRestoredStateScanOptionsKey:@(YES)}]; 

3.連接外設(shè)

- (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI 
{
        if([peripheral.name  isEqualToString:BLE_SERVICE_NAME]){
                [self connect:peripheral];
        }
s); 
}       
 
-(BOOL)connect:(CBPeripheral *)peripheral{
        self.manager.delegate = self;
        [self.manager connectPeripheral:peripheral
                                options:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:YES] forKey:CBConnectPeripheralOptionNotifyOnDisconnectionKey]];
}

4.掃描外設(shè)中的服務(wù)和特征

- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral 
{ 
       
    NSLog(@"Did connect to peripheral: %@", peripheral); 
    _testPeripheral = peripheral; 
       
    [peripheral setDelegate:self];  <br>//查找服務(wù)
    [peripheral discoverServices:nil]; 
       
       
}

發(fā)現(xiàn)服務(wù):

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error 
{ 
   
       
    NSLog(@"didDiscoverServices"); 
       
    if (error) 
    { 
        NSLog(@"Discovered services for %@ with error: %@", peripheral.name, [error localizedDescription]); 
           
        if ([self.delegate respondsToSelector:@selector(DidNotifyFailConnectService:withPeripheral:error:)]) 
            [self.delegate DidNotifyFailConnectService:nil withPeripheral:nil error:nil]; 
           
        return; 
    } 
       
   
    for (CBService *service in peripheral.services) 
    { 
         //發(fā)現(xiàn)服務(wù)
        if ([service.UUID isEqual:[CBUUID UUIDWithString:UUIDSTR_ISSC_PROPRIETARY_SERVICE]]) 
        { 
            NSLog(@"Service found with UUID: %@", service.UUID);  <br>//查找特征
            [peripheral discoverCharacteristics:nil forService:service]; 
            break; 
        } 
           
           
    } 
}

發(fā)現(xiàn)服務(wù)中的特征:

- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error
{
     
    if (error)
    {
        NSLog(@"Discovered characteristics for %@ with error: %@", service.UUID, [error localizedDescription]);
         
        [self error];
        return;
    }
     
    NSLog(@"服務(wù):%@",service.UUID);
    for (CBCharacteristic *characteristic in service.characteristics)
    {
       //發(fā)現(xiàn)特征
            if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:@"xxxxxxx"]]) {
                NSLog(@"監(jiān)聽:%@",characteristic);<br>//監(jiān)聽特征
                [self.peripheral setNotifyValue:YES forCharacteristic:characteristic];
            }
         
    }
}

5.與外設(shè)進(jìn)行數(shù)據(jù)交互
讀取數(shù)據(jù):

- (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error
{
    if (error)
    {
        NSLog(@"Error updating value for characteristic %@ error: %@", characteristic.UUID, [error localizedDescription]);
        self.error_b = BluetoothError_System;
        [self error];
        return;
    }
     
//    NSLog(@"收到的數(shù)據(jù):%@",characteristic.value);
    [self decodeData:characteristic.value];
}

寫數(shù)據(jù):

NSData *d2 = [[PBABluetoothDecode sharedManager] HexStringToNSData:@"0x02"];
                [self.peripheral writeValue:d2 forCharacteristic:characteristic type:CBCharacteristicWriteWithoutResponse];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市璧南,隨后出現(xiàn)的幾起案子掌逛,更是在濱河造成了極大的恐慌,老刑警劉巖司倚,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件豆混,死亡現(xiàn)場離奇詭異篓像,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)皿伺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門员辩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人鸵鸥,你說我怎么就攤上這事奠滑。” “怎么了妒穴?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵宋税,是天一觀的道長。 經(jīng)常有香客問我讼油,道長杰赛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任矮台,我火速辦了婚禮乏屯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘瘦赫。我一直安慰自己辰晕,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布确虱。 她就那樣靜靜地躺著含友,像睡著了一般。 火紅的嫁衣襯著肌膚如雪蝉娜。 梳的紋絲不亂的頭發(fā)上唱较,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音召川,去河邊找鬼南缓。 笑死,一個(gè)胖子當(dāng)著我的面吹牛荧呐,可吹牛的內(nèi)容都是我干的汉形。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼倍阐,長吁一口氣:“原來是場噩夢啊……” “哼概疆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起峰搪,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤岔冀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后概耻,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體使套,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡罐呼,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了侦高。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫉柴。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖奉呛,靈堂內(nèi)的尸體忽然破棺而出计螺,到底是詐尸還是另有隱情,我是刑警寧澤瞧壮,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布登馒,位于F島的核電站,受9級特大地震影響馁痴,放射性物質(zhì)發(fā)生泄漏谊娇。R本人自食惡果不足惜肺孤,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一罗晕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧赠堵,春花似錦小渊、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至揍愁,卻和暖如春呐萨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背莽囤。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工谬擦, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人朽缎。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓惨远,卻偏偏與公主長得像,于是被迫代替她去往敵國和親话肖。 傳聞我的和親對象是個(gè)殘疾皇子北秽,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 上篇文章iOS藍(lán)牙4.0開發(fā)Central(CoreBluetooth) - 簡書已經(jīng)講述了作為中央設(shè)備的...
    Zshuo50閱讀 1,238評論 0 3
  • 當(dāng)前BLE應(yīng)用非常廣泛,不再僅僅局限于兩個(gè)設(shè)備之間的數(shù)據(jù)傳輸最筒,它還應(yīng)用在很多方面贺氓,例如智能家居,智能硬件等...
    Zshuo50閱讀 1,588評論 2 9
  • 一礎(chǔ)子砸下去 散漫的黃土有了形狀 長方形的實(shí)木框就是規(guī)矩 沒有規(guī)矩你就是廢物
    五哥放羊閱讀 540評論 0 0
  • 1缅叠、天天年年,日日夜夜虏冻,你住在我的夢里好一段時(shí)間了肤粱。我也好不容易下了決心,你走吧厨相,不要在回頭了领曼,不要再住在我的夢里...
    _梅子閱讀 808評論 2 1
  • 權(quán)杖皇后 正位 早上抽到牌的時(shí)候感覺皇后表情有些遲疑、底氣不足蛮穿、過度擔(dān)憂和退縮庶骄,跟我今天的狀態(tài)完全一致。公開課雖然...
    小小笨鳥可愛多閱讀 248評論 0 0