iOS
CoreBluetooth 入門
!
@79SHINSUKE
西川慎介
ヱビス株式会社
webisu-inc.co.jp
2014-03-20
・BLEの通信規格
  デバイスの種類ごとにある
!
・手順書
  いつ、どんなデータ
!
・たくさんある
プロファイル
・Core Bluetoothが対応しているプロファイル
!
・サービス(BLEデバイスの機能)
!
・キャラクテリスティック(特性)
!
・GATTベースのプロファイルもたくさんある
!
GATT(Generic Attribute Profi...
・BLEデバイスを見つける
・BLEデバイスに接続する
・BLEデバイスに対するRead/Write
・通信するデータはバイトデータなので何でもOK.動的デー
タも。
・ペアリングすると暗号化される
・バックグラウンドでも動く
Core Blu...
バックグラウンド
 ・Info.listで宣言
UIBackgroundModes:bluetooth-central	

UIBackgroundModes:bluetooth-peripheral	

!
 ・デバイスの検知 (セントラル)...
・1つ以上のサービスを提供する
!
・アドバタイズ
!
・アドバタイジング・データ
!
・たとえば、iBeaconで利用されるBeacon
ペリフェラル(Peripheral)
ペリフェラルのデータ構造
!
!
CBMutableService
CBPeripheralManager
CBMutableService
CBMutableCharacteristic
CBMutableCharacteristic
CBM...
・アドバタイズしているペリフェラルを見つける
!
・アドバタイズしているペリフェラルに接続する
!
!
・データ通信(Read/Write)
セントラル(Central)
iOSデバイス間で
セントラル-ペリフェラル
に通信してみました
ペリフェラルのコード
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBPeripheralManagerDelegate>
@end
!...
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBPeripheralManagerDelegate>
@end
!...
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBPeripheralManagerDelegate>
@end
!...
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBPeripheralManagerDelegate>
@end
!...
- (void)startService
{
NSLog(@"start service");
// サービスをつくる
_service = [[CBMutableService alloc]
initWithType:[CBUUID UUID...
- (void)startService
{
NSLog(@"start service");
// サービスをつくる
_service = [[CBMutableService alloc]
initWithType:[CBUUID UUID...
- (void)startService
{
NSLog(@"start service");
// サービスをつくる
_service = [[CBMutableService alloc]
initWithType:[CBUUID UUID...
- (void)startService
{
NSLog(@"start service");
// サービスをつくる
_service = [[CBMutableService alloc]
initWithType:[CBUUID UUID...
// サービスを追加
- (void)peripheralManager:(CBPeripheralManager *)peripheral
didAddService:(CBService *)service
error:(NSError *...
// セントラルからの読み取り要求
-(void)peripheralManager:(CBPeripheralManager *)peripheral
didReceiveReadRequest:(CBATTRequest *)request...
セントラルのコード
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripher...
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripher...
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripher...
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripher...
#import <CoreBluetooth/CoreBluetooth.h>
!
@interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripher...
// ペリフェラルが見つかったら通知
- (void)centralManager:(CBCentralManager *)central
didDiscoverPeripheral:(CBPeripheral *)peripheral
adv...
//ペリフェラルへの接続完了
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral
*)peripheral
{
NSLog(...
//ペリフェラルへの接続完了
- (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral
*)peripheral
{
NSLog(...
// 指定されたサービスのキャラクタリスティックを検出
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService ...
// 指定されたサービスのキャラクタリスティックを検出
- (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService ...
・writeValue
[_peripheral writeValue:dataToWrite forCharacteristic:_characteristic	

type:CBCharacteristicWriteWithResponse...
ありがとうございました!
Upcoming SlideShare
Loading in …5
×

Ios corebluetooth beginner

2,529 views

Published on

Published in: Software, Technology, Business
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
2,529
On SlideShare
0
From Embeds
0
Number of Embeds
540
Actions
Shares
0
Downloads
14
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Ios corebluetooth beginner

  1. 1. iOS CoreBluetooth 入門 ! @79SHINSUKE 西川慎介 ヱビス株式会社 webisu-inc.co.jp 2014-03-20
  2. 2. ・BLEの通信規格   デバイスの種類ごとにある ! ・手順書   いつ、どんなデータ ! ・たくさんある プロファイル
  3. 3. ・Core Bluetoothが対応しているプロファイル ! ・サービス(BLEデバイスの機能) ! ・キャラクテリスティック(特性) ! ・GATTベースのプロファイルもたくさんある ! GATT(Generic Attribute Profile)
  4. 4. ・BLEデバイスを見つける ・BLEデバイスに接続する ・BLEデバイスに対するRead/Write ・通信するデータはバイトデータなので何でもOK.動的デー タも。 ・ペアリングすると暗号化される ・バックグラウンドでも動く Core Bluetoothフレームワーク
  5. 5. バックグラウンド  ・Info.listで宣言 UIBackgroundModes:bluetooth-central UIBackgroundModes:bluetooth-peripheral !  ・デバイスの検知 (セントラル)  ・アドバタイズ発信 (ペリフェラル)     UUIDが送信されないので、セントラルがUUID で検索している場合は見つけられない ! ! !
  6. 6. ・1つ以上のサービスを提供する ! ・アドバタイズ ! ・アドバタイジング・データ ! ・たとえば、iBeaconで利用されるBeacon ペリフェラル(Peripheral)
  7. 7. ペリフェラルのデータ構造 ! ! CBMutableService CBPeripheralManager CBMutableService CBMutableCharacteristic CBMutableCharacteristic CBMutableCharacteristic CBMutableCharacteristic CBPeripheralManager *_peripheralManager; CBMutableService *_service; CBMutableCharacteristic *_characteristic;
  8. 8. ・アドバタイズしているペリフェラルを見つける ! ・アドバタイズしているペリフェラルに接続する ! ! ・データ通信(Read/Write) セントラル(Central)
  9. 9. iOSデバイス間で セントラル-ペリフェラル に通信してみました
  10. 10. ペリフェラルのコード
  11. 11. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBPeripheralManager *_peripheralManager; CBMutableService *_service; CBMutableCharacteristic *_characteristic; NSData *_value; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! // データ _value = [@"Hello World" dataUsingEncoding:NSUTF8StringEncoding]; // ペリフェラルマネージャをつくる _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral { if (peripheral.state == CBPeripheralManagerStatePoweredOn) { [self startService]; } }
  12. 12. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBPeripheralManager *_peripheralManager; CBMutableService *_service; CBMutableCharacteristic *_characteristic; NSData *_value; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! // データ _value = [@"Hello World" dataUsingEncoding:NSUTF8StringEncoding]; // ペリフェラルマネージャをつくる _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral { if (peripheral.state == CBPeripheralManagerStatePoweredOn) { [self startService]; } }
  13. 13. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBPeripheralManager *_peripheralManager; CBMutableService *_service; CBMutableCharacteristic *_characteristic; NSData *_value; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! // データ _value = [@"Hello World" dataUsingEncoding:NSUTF8StringEncoding]; // ペリフェラルマネージャをつくる _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral { if (peripheral.state == CBPeripheralManagerStatePoweredOn) { [self startService]; } }
  14. 14. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBPeripheralManager *_peripheralManager; CBMutableService *_service; CBMutableCharacteristic *_characteristic; NSData *_value; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! // データ _value = [@"Hello World" dataUsingEncoding:NSUTF8StringEncoding]; // ペリフェラルマネージャをつくる _peripheralManager = [[CBPeripheralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)peripheralManagerDidUpdateState:(CBPeripheralManager *)peripheral { if (peripheral.state == CBPeripheralManagerStatePoweredOn) { [self startService]; } }
  15. 15. - (void)startService { NSLog(@"start service"); // サービスをつくる _service = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"74E493FC-B56E-471E-91E5-C63DC9CD4716"] primary:YES]; ! //キャラクテリスティックをつくる _characteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"97D158FF-A5F4-4D13-A97F-86D460CF1FD2"] properties:(CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite| CBCharacteristicPropertyNotify) value:nil //動的な値をわたすときはnil permissions:(CBAttributePermissionsReadable|CBAttributePermissionsWriteable)]; ! // サービスにキャラクテリスティックをセット _service.characteristics = @[_characteristic]; // マネージャにサービスを登録 [_peripheralManager addService:_service]; // サービスをアドバタイズする [_peripheralManager startAdvertising:@{ CBAdvertisementDataLocalNameKey: @"iBLE", CBAdvertisementDataServiceUUIDsKey:@[_service.UUID] }]; }
  16. 16. - (void)startService { NSLog(@"start service"); // サービスをつくる _service = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"74E493FC-B56E-471E-91E5-C63DC9CD4716"] primary:YES]; ! //キャラクテリスティックをつくる _characteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"97D158FF-A5F4-4D13-A97F-86D460CF1FD2"] properties:(CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite| CBCharacteristicPropertyNotify) value:nil //動的な値をわたすときはnil permissions:(CBAttributePermissionsReadable|CBAttributePermissionsWriteable)]; ! // サービスにキャラクテリスティックをセット _service.characteristics = @[_characteristic]; // マネージャにサービスを登録 [_peripheralManager addService:_service]; // サービスをアドバタイズする [_peripheralManager startAdvertising:@{ CBAdvertisementDataLocalNameKey: @"iBLE", CBAdvertisementDataServiceUUIDsKey:@[_service.UUID] }]; }
  17. 17. - (void)startService { NSLog(@"start service"); // サービスをつくる _service = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"74E493FC-B56E-471E-91E5-C63DC9CD4716"] primary:YES]; ! //キャラクテリスティックをつくる _characteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"97D158FF-A5F4-4D13-A97F-86D460CF1FD2"] properties:(CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite| CBCharacteristicPropertyNotify) value:nil //動的な値をわたすときはnil permissions:(CBAttributePermissionsReadable|CBAttributePermissionsWriteable)]; ! // サービスにキャラクテリスティックをセット _service.characteristics = @[_characteristic]; // マネージャにサービスを登録 [_peripheralManager addService:_service]; // サービスをアドバタイズする [_peripheralManager startAdvertising:@{ CBAdvertisementDataLocalNameKey: @"iBLE", CBAdvertisementDataServiceUUIDsKey:@[_service.UUID] }]; }
  18. 18. - (void)startService { NSLog(@"start service"); // サービスをつくる _service = [[CBMutableService alloc] initWithType:[CBUUID UUIDWithString:@"74E493FC-B56E-471E-91E5-C63DC9CD4716"] primary:YES]; ! //キャラクテリスティックをつくる _characteristic = [[CBMutableCharacteristic alloc] initWithType:[CBUUID UUIDWithString:@"97D158FF-A5F4-4D13-A97F-86D460CF1FD2"] properties:(CBCharacteristicPropertyRead|CBCharacteristicPropertyWrite| CBCharacteristicPropertyNotify) value:nil //動的な値をわたすときはnil permissions:(CBAttributePermissionsReadable|CBAttributePermissionsWriteable)]; ! // サービスにキャラクテリスティックをセット _service.characteristics = @[_characteristic]; // マネージャにサービスを登録 [_peripheralManager addService:_service]; // サービスをアドバタイズする [_peripheralManager startAdvertising:@{ CBAdvertisementDataLocalNameKey: @"iBLE", CBAdvertisementDataServiceUUIDsKey:@[_service.UUID] }]; }
  19. 19. // サービスを追加 - (void)peripheralManager:(CBPeripheralManager *)peripheral didAddService:(CBService *)service error:(NSError *)error ! { if (error) { // エラー処理 } } ! ! ! ! // Centralからの接続待ち状態 - (void)peripheralManagerDidStartAdvertising:(CBPeripheralManager *)peripheral error:(NSError *)error { if (error) { // エラー処理 } }
  20. 20. // セントラルからの読み取り要求 -(void)peripheralManager:(CBPeripheralManager *)peripheral didReceiveReadRequest:(CBATTRequest *)request { NSLog(@"didReceiveReadRequest: %@",request); request.value = _value; [_peripheralManager respondToRequest:request withResult:CBATTErrorSuccess]; }
  21. 21. セントラルのコード
  22. 22. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBCentralManager *_centralManager; CBPeripheral *_peripheral; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! //セントラルマネージャを起動 _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)centralManagerDidUpdateState:(CBCentralManager *)central { ! if (central.state == CBCentralManagerStatePoweredOn) { //アドバタイズしているペリフェラルを検出する(探索対象のデバイスが持つサービスを指定) NSArray *services = [NSArray arrayWithObjects:[CBUUID UUIDWithString:kServiceUUID], nil]; // 単一デバイスの発見イベントを重複して発行させない NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; // デバイスの探索を開始 [_centralManager scanForPeripheralsWithServices:services options:options]; } }
  23. 23. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBCentralManager *_centralManager; CBPeripheral *_peripheral; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! //セントラルマネージャを起動 _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)centralManagerDidUpdateState:(CBCentralManager *)central { ! if (central.state == CBCentralManagerStatePoweredOn) { //アドバタイズしているペリフェラルを検出する(探索対象のデバイスが持つサービスを指定) NSArray *services = [NSArray arrayWithObjects:[CBUUID UUIDWithString:kServiceUUID], nil]; // 単一デバイスの発見イベントを重複して発行させない NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; // デバイスの探索を開始 [_centralManager scanForPeripheralsWithServices:services options:options]; } }
  24. 24. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBCentralManager *_centralManager; CBPeripheral *_peripheral; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! //セントラルマネージャを起動 _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)centralManagerDidUpdateState:(CBCentralManager *)central { ! if (central.state == CBCentralManagerStatePoweredOn) { //アドバタイズしているペリフェラルを検出する(探索対象のデバイスが持つサービスを指定) NSArray *services = [NSArray arrayWithObjects:[CBUUID UUIDWithString:kServiceUUID], nil]; // 単一デバイスの発見イベントを重複して発行させない NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; // デバイスの探索を開始 [_centralManager scanForPeripheralsWithServices:services options:options]; } }
  25. 25. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBCentralManager *_centralManager; CBPeripheral *_peripheral; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! //セントラルマネージャを起動 _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)centralManagerDidUpdateState:(CBCentralManager *)central { ! if (central.state == CBCentralManagerStatePoweredOn) { //アドバタイズしているペリフェラルを検出する(探索対象のデバイスが持つサービスを指定) NSArray *services = [NSArray arrayWithObjects:[CBUUID UUIDWithString:kServiceUUID], nil]; // 単一デバイスの発見イベントを重複して発行させない NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; // デバイスの探索を開始 [_centralManager scanForPeripheralsWithServices:services options:options]; } }
  26. 26. #import <CoreBluetooth/CoreBluetooth.h> ! @interface ViewController : UIViewController<CBCentralManagerDelegate,CBPeripheralManagerDelegate> @end ! @implementation ViewController { CBCentralManager *_centralManager; CBPeripheral *_peripheral; } ! ! ! - (void)viewDidLoad { [super viewDidLoad]; ! //セントラルマネージャを起動 _centralManager = [[CBCentralManager alloc] initWithDelegate:self queue:nil]; } ! ! ! - (void)centralManagerDidUpdateState:(CBCentralManager *)central { ! if (central.state == CBCentralManagerStatePoweredOn) { //アドバタイズしているペリフェラルを検出する(探索対象のデバイスが持つサービスを指定) NSArray *services = [NSArray arrayWithObjects:[CBUUID UUIDWithString:kServiceUUID], nil]; // 単一デバイスの発見イベントを重複して発行させない NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:CBCentralManagerScanOptionAllowDuplicatesKey]; // デバイスの探索を開始 [_centralManager scanForPeripheralsWithServices:services options:options]; } }
  27. 27. // ペリフェラルが見つかったら通知 - (void)centralManager:(CBCentralManager *)central didDiscoverPeripheral:(CBPeripheral *)peripheral advertisementData:(NSDictionary *)advertisementData RSSI:(NSNumber *)RSSI { NSLog(@"Discoverd peripheral: %@", peripheral); // ペリフェラルに接続 _peripheral = peripheral; _peripheral.delegate = self; [_centralManager connectPeripheral:_peripheral options:nil]; } ! ! ! ! //ペリフェラルへの接続に失敗 - (void)centralManager:(CBCentralManager *)central didFailToConnectPeripheral: (CBPeripheral *)peripheral error:(NSError *)error { NSLog(@"Fail To Connetct Peripheral"); [self cleanup]; }
  28. 28. //ペリフェラルへの接続完了 - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { NSLog(@"Connetcted Peripheral"); // 見つかったので他のペリフェラルのスキャンを停止 [_centralManager stopScan]; _peripheral = peripheral; _peripheral.delegate = self; // サービス接続 [_peripheral discoverServices:@[[CBUUID UUIDWithString:kServiceUUID]]]; } ! - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error { if (error) { [self cleanup]; return; } for (CBService *service in peripheral.services) { [peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:kCharacteristicUUID]] forService:service]; } }
  29. 29. //ペリフェラルへの接続完了 - (void)centralManager:(CBCentralManager *)central didConnectPeripheral:(CBPeripheral *)peripheral { NSLog(@"Connetcted Peripheral"); // 見つかったので他のペリフェラルのスキャンを停止 [_centralManager stopScan]; _peripheral = peripheral; _peripheral.delegate = self; // サービス接続 [_peripheral discoverServices:@[[CBUUID UUIDWithString:kServiceUUID]]]; } ! - (void)peripheral:(CBPeripheral *)peripheral didDiscoverServices:(NSError *)error { if (error) { [self cleanup]; return; } for (CBService *service in peripheral.services) { [peripheral discoverCharacteristics:@[[CBUUID UUIDWithString:kCharacteristicUUID]] forService:service]; } }
  30. 30. // 指定されたサービスのキャラクタリスティックを検出 - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error { if (error) { [self cleanup]; return; } for (CBCharacteristic *characteristic in service.characteristics) { if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:kCharacteristicUUID]]) { // 読み取り要求 [peripheral readValueForCharacteristic:characteristic]; } } } ! // 読み取り要求 - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error { if (error) { NSLog(@"Error"); return; } NSString *value= [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding]; NSLog(@"characteristic value is %@", value); }
  31. 31. // 指定されたサービスのキャラクタリスティックを検出 - (void)peripheral:(CBPeripheral *)peripheral didDiscoverCharacteristicsForService:(CBService *)service error:(NSError *)error { if (error) { [self cleanup]; return; } for (CBCharacteristic *characteristic in service.characteristics) { if ([characteristic.UUID isEqual:[CBUUID UUIDWithString:kCharacteristicUUID]]) { // 読み取り要求 [peripheral readValueForCharacteristic:characteristic]; } } } ! // 読み取り要求 - (void)peripheral:(CBPeripheral *)peripheral didUpdateValueForCharacteristic:(CBCharacteristic *)characteristic error:(NSError *)error { if (error) { NSLog(@"Error"); return; } NSString *value= [[NSString alloc] initWithData:characteristic.value encoding:NSUTF8StringEncoding]; NSLog(@"characteristic value is %@", value); }
  32. 32. ・writeValue [_peripheral writeValue:dataToWrite forCharacteristic:_characteristic type:CBCharacteristicWriteWithResponse]; ! ! [_peripheral writeValue:dataToWrite forCharacteristic:_characteristic type:CBCharacteristicWriteWithoutResponse]; ! ・notify [_peripheral setNotifyValue:YES forCharacteristic:_characteristic]; !
  33. 33. ありがとうございました!

×