lynxeyedの電音鍵盤

組み込みとか電装とか

Swift Playgrounds向けアクセサリ「PlaygroundBluetooth API」を使ってBluetooth LEデバイスと通信をする

WWDC2017で発表されたPlaygroundsBluetooth API便利そう

今年最後のブログになります。
今何してあそんでるかの報告がわりに。

WWDC2017

What’s New in Swift Playgrounds - Apple WWDC 2017

iPad向けのSwift Playgroundsアクセサリとして提供されているPlaygroundBluetoothを使って見ました。CoreBluetoothベースですが、Appleが言うにはより一貫性がある(これはSwift PlaygroundsでのBluetooth通信のユーザエクスペリエンスが一貫していると言う意味だと思います)APIで、以下のコンポーネントを提供しています

PlaygroundBluetooth API

  • PlaygroundBluetoothCentralManager(および、そのDelegate)
    • Bluetooth機器との接続、通信 (CBCentralManagerに近い)
  • PlaygroundBluetoothConnectionView(および、そのDelegate)
    • Bluetooth機器の検出、接続、接続解除などのためのUI

特にPlaygroundBluetoothConnectionViewはUIを提供して検出、接続、解除までを一貫してしてくれるので、プログラマによってBluetooth検出、接続、解除時のUIが全く異なり、アプリを使うユーザが途方に暮れる…事は少なくなりそうです。
と言っても2017年12月現在、Appleのページで纏まった資料やサンプルコードが見当たりませんでした。探し方が下手なだけかも知れませんが。
2018年9月更新AppleのページにPlaygroundBluetooth Frameworkの詳細情報が掲載されています。最新情報はこちらを確認してください。

サンプルコードないかな…

唯一見つけたのが以下のサイト。
https://swiftexample.info/snippet/liveviewswift_bricklife_swift
iPhoneの電池残量が確認できるサンプルコード
なんか途中から全力で生のCoreBluetooth触りにいってるけど大丈夫かこのサンプルコード…。

カスタムプロファイルのペリフェラルとお話しする

これをベースに、カスタムプロファイルを持ったBluetoothペリフェラルに接続し、データをやり取りするターミナルっぽいやつを作りました。
iPadは終始セントラルとして動きます。

  • read
  • writeWithResponse
  • writeWithoutResponse
  • notify

キャラクタリスティックに対応します。

ペリフェラル側とその設定が必要です。
今回はセントラル(iPad)からきたデータをWrite(writeWithoutResponse)し、Readに対してはそのデータを返すようにします。(ループバックっぽい動作にする)

いきなりBLEを持ってる組み込みマイコンにさせると、バグったときに切り分けが出来なくなって詰みそうですので、今回はiPhoneにLightBlueアプリをいれて仮想的にペリフェラルとして動かしています。
VirtualPeripheralの提供するサービスは「Blank」を選択し

  • Service UUID : 0x1111
  • Characteristic UUID : 0x2222

を選択します。

PropertyはReadとWriteWithoutResponseにチェック

そうすると、iPadは以下のように動きます。

Communicate with BLE accessory using PlaygroundBluetooth API

参考資料


iOS 11 Programming

iOS 11 Programming

  • 著者:堤 修一,吉田 悠一,池田 翔,坂田 晃一,加藤 尋樹,川邉 雄介,岸川克己,所 友太,永野 哲久,加藤 寛人,
  • 発行日:2017年11月16日
  • 対応フォーマット:製本版,PDF
  • PEAKSで購入する