Help us understand the problem. What is going on with this article?

konashiをSDKなしで使う

More than 5 years have passed since last update.

konashiは親切にもドキュメントでサービス(Service)やキャラクタリスティック(Characteristic)の仕様を公開してくれているので、

オフィシャルに提供されている iOS SDK を使わなくても、Core Bluetoothから直接接続・通信することが可能です。

konashi
konashi
posted with amazlet at 14.02.04
スイッチサイエンス
売り上げランキング: 17,884

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_UUID 0x3003

と定義されているキャラクタリスティックが peripheral:didUpdateValueForCharacteristic:error: で観測されます。

参考情報

konashi iOS SDKはソースがまるっと公開されているので、直接実装する場合に参考になります。

※iOSと連携するデバイスのSDKは、だいたいビルド済みの静的ライブラリしか提供されてない場合が多い

konashiって何?という方、もしくはkonashiのiOS SDKを使った連携方法を知りたい方は下記記事をご参照ください。

サービスとかキャラクタリスティックって何?という方はこちらを。

konashiは最近はAmazonでも購入できるようです。

konashi
konashi
posted with amazlet at 14.02.04
スイッチサイエンス
売り上げランキング: 17,884

その他、BLE関連記事

shu223
フリーランスiOSエンジニア 著書:『iOS×BLE Core Bluetooth プログラミング』『Metal入門』『実践ARKit』『Depth in Depth』『iOSアプリ開発 達人のレシピ100』他 GitHubの累計スター数24,000超
http://shu223.hatenablog.com/
engineerlife
技術力をベースに人生を謳歌する人たちのコミュニティです。
https://community.camp-fire.jp/projects/view/280040
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした