konashiは親切にもドキュメントでサービス(Service)やキャラクタリスティック(Characteristic)の仕様を公開してくれているので、
オフィシャルに提供されている iOS SDK を使わなくても、Core Bluetoothから直接接続・通信することが可能です。
konashi の SDK は Core Bluetooth の薄いラッパーなので、全然SDKを使うことによる不自由は感じないのですが、この方法を試しておくことで、他のBLEデバイスも、必要な情報が公開されてさえいればSDKなしで接続できることがわかるようになるというメリットがあるかと思います。
やり方
すごくシンプルです。まず、普通に2台のiOSデバイス間で接続・通信できるようにCore Bluetoothでつくっておいて、あとは
セントラル(iOSアプリ)からペリフェラル(konashi)を探す際に、ServiceのUUIDとして "0xFF00" を使う
だけ。
ただし、genuuidコマンドから生成したUUIDのように、文字列からのCBUUIDオブジェクト生成は
CBUUID *uuid = [CBUUID UUIDWithString:@"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxxx"];
だけですが、
konashiのように16進数のUUIDからCBUUIDオブジェクトを生成する場合は、次のようにします。
UInt16 temp = uuid16 << 8; temp |= (uuid16 >> 8); NSData *data = [[NSData alloc] initWithBytes:(char *)&temp length:2]; CBUUID *uuid = [CBUUID UUIDWithData:data];
あとは、 scanForPeripheralsWithServices:options: するときにこのサービスを指定するもよし、centralManager:didDiscoverPeripheral:advertisementData:RSSI: が呼ばれたときにこのサービスを提供しているかどうかを判定するもよし、です。
konashiのcharacteristic
キャラクタリスティックはkonashiとやりとりする情報の種類ごとに定義されています。
// PIO #define KONASHI_PIO_SETTING_UUID 0x3000 #define KONASHI_PIO_PULLUP_UUID 0x3001 #define KONASHI_PIO_OUTPUT_UUID 0x3002 #define KONASHI_PIO_INPUT_NOTIFICATION_UUID 0x3003 #define KONASHI_PIO_INPUT_NOTIFICATION_READ_LEN 1 // PWM #define KONASHI_PWM_CONFIG_UUID 0x3004 #define KONASHI_PWM_PARAM_UUID 0x3005 #define KONASHI_PWM_DUTY_UUID 0x3006 // Analog #define KONASHI_ANALOG_DRIVE_UUID 0x3007 #define KONASHI_ANALOG_READ0_UUID 0x3008 #define KONASHI_ANALOG_READ1_UUID 0x3009 #define KONASHI_ANALOG_READ2_UUID 0x300A #define KONASHI_ANALOG_READ_LEN 2 // I2C #define KONASHI_I2C_CONFIG_UUID 0x300B #define KONASHI_I2C_START_STOP_UUID 0x300C #define KONASHI_I2C_WRITE_UUID 0x300D #define KONASHI_I2C_READ_PARAM_UIUD 0x300E #define KONASHI_I2C_READ_UUID 0x300F // UART #define KONASHI_UART_CONFIG_UUID 0x3010 #define KONASHI_UART_BAUDRATE_UUID 0x3011 #define KONASHI_UART_TX_UUID 0x3012 #define KONASHI_UART_RX_NOTIFICATION_UUID 0x3013 #define KONASHI_UART_RX_NOTIFICATION_READ_LEN 1 // Hardware #define KONASHI_HARDWARE_RESET_UUID 0x3014 #define KONASHI_HARDWARE_LOW_BAT_NOTIFICATION_UUID 0x3015 #define KONASHI_HARDWARE_LOW_BAT_NOTIFICATION_READ_LEN 1
たとえばiOSアプリとkonashiを接続した状態でkonashiのスイッチを押すと、
KONASHI_PIO_INPUT_NOTIFICATION_UUID0x3003
と定義されているキャラクタリスティックが peripheral:didUpdateValueForCharacteristic:error: で観測されます。
参考情報
konashi iOS SDKはソースがまるっと公開されているので、直接実装する場合に参考になります。
※iOSと連携するデバイスのSDKは、だいたいビルド済みの静的ライブラリしか提供されてない場合が多い
konashiって何?という方、もしくはkonashiのiOS SDKを使った連携方法を知りたい方は下記記事をご参照ください。
サービスとかキャラクタリスティックって何?という方はこちらを。
その他、BLE関連記事
- iOSのCore Bluetooth / BLEの通信速度 - Over&Out その後
- Bluetooth 4.0 および Bluetooth Low Energy (BLE) に関する技術情報のまとめ - Over&Out その後
- Bluetooth Low Energy (BLE) のサービス/キャラクタリクスの構成例一覧 - Over&Out その後
- Core Bluetooth / BLEで音声データをやりとりする - Over&Out その後