你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS開發 - Core Bluetooth藍牙開發

iOS開發 - Core Bluetooth藍牙開發

編輯:IOS開發綜合

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 

@interface ViewController ()
/**
 *  外設
 */
@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

 

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved