Swift4 で BLE (Bluetooth Low Enegy) の実装をさせていただく機会をいただきました。
IoTについて予備知識もないレベルなので、Bluetoothの実装は自分にはかなり大変そうだなーと思ってましたが、BLEについて簡単に説明してもらってから、ググりながら作業してみると、なるほど、これなら自分でもなんとかできそうかなーという感想です。
iOSの CoreBluetooth のセントラルの最初のハマりポイントに見事にどハマりしたのは、いい思い出…です。
なんとかiPhone同士を接続して、セントラル・ペリフェラル間でデータをやりとりするとき、ググって見つけたこの記事のクラスの作り方がとても勉強になりました。
CocoaPodがいまだによくわかってなくて、CocoaPodを使わずにプロジェクトを動かすことに四苦八苦しましたが…勉強になりました。
CocoaPodを使わずにRxSwiftなどを組み込む場合、該当のプロジェクトをダウンロードして、ライブラリにコンパイルする必要があるのかな…と思ってましたが、なるほどプロジェクトの中にプロジェクトファイルをドラッグすればいいだけなことに気づくまでに長い時間を要しました…ww ^^;
…といきなり本題の手前でつまづいたことも含め、先ほどのプロジェクトは、自分の知らないことが詰まってましたw
RxSwift についてはまだちょっと勉強が足りていないので今回はスルーしました…が、BLEHelper、Acceleration クラスの実装はすごく勉強になりました。
Data と Float, Double, … などとのデータ変換は、こうやるのか…テンプレート…を自分で使って実装したことないなぁ…^^;
struct の中で 定義した enum にメソッドを持たせることもできるのか…とか ^^;;
ちゃんと Swift4 について勉強しないといけないなぁ…と痛感しましたが、自分にも読めそうな本などに出会えるまで…のらりくらりとやり過ごすかも ^^;;
BLE接続自体は PowerOn した後に スキャンする、見つけたペリフェラルはインスタンス変数に格納しないと消える…ことに気をつければ…つながりました。
BLE接続後、何もやりとりしないと 30秒で切断されるので、どう再接続するか…(もしくは切断されないようにするか?) についてはまだ検討中です。
ただ、Appleのリファレンスにある、セントラル側のアプリが終了された状態でもペリフェラルからの通知を受けたらセントラル側のアプリを起動させる…動作がまったくうまくいかず…そこで詰まってます… ^^;;;
XCodeと接続したiPhoneでデバッグ実行して、BLE接続後にXCodeからiPhoneのアプリをデバッグ停止し、iPhoneのタスクから指で終了させた状態で、iPhoneのアプリのアイコンをタップして起動した時は willRestoreState が走るけど…
違う違う、違うそうじゃない…。ペリフェラルから停止中のアプリを起動させたいんだ…。
…来週中になんとか動作が確認できると嬉しいですが…やばい…^^;;