2017/08/21

様々なBLE開発手法

どうも、クラゲです。
今回はBLEの開発手法についてどのようなものがあるのかと、結局どれが楽なのかを解説します。

【 概要 】


最も楽な開発手法は?

BLEアプリを開発するにあたり、手法として考えられものを大きく5つ挙げてみました。
クラゲの独断と偏見も混じってますが、学習コストや使い勝手の良さの度合いに応じて ◯ △ × の評価を付けました。

開発手法 プログラミング言語 開発環境 その他
Android
ネイティブアプリ
×
Java or
Kotlin
×
Android Studio
×
スマホアプリ独特の
お作法必要
iOS
ネイティブアプリ
×
Objective-C or
Swift
×
Xcode
×
スマホアプリ独特の
お作法必要
noble
JavaScript with
node.js

テキストエディター

フロントとバックエンド
両方開発必要
konashi.js
JavaScript

jsdo.itと
konashi.js

ハードはkonashiのみ対応。実行動作に制限あり
Web Bluetooth API
JavaScript

テキストエディター

対応OSや対応機能に
1部未実装あり

結論から言うとWeb Bluetooth APIが最も使い勝手良く、お手軽にBLE開発できます。
それでは、それぞれについて詳細を見ていきましょう

Android/iOSネイティブアプリ

表では最も評価が低いことになっていますが、あくまでこれは学習コストが非常に高いということであり、そのアプリの出来栄えとは関係のない評価です。
本格的なBLEスマホアプリを作る必要があるならば、スマホアプリ開発1択しかないと思います。
また、普段からスマホアプリ開発をして慣れている人は、敢えて他の手法で行う必要もないでしょう。

ちょっとしたプログラムを記述するには、先ほどの表の中ではやはりJavaScriptが一番で、JavaやSwiftなどは本格的な開発向きです。
開発環境もAndroid StudioやXcodeは、出来ることが多すぎて覚えるのも大変です。正直クラゲは、インストールや立ち上げるだけでもうんざりします。
"その他" に書いた "スマホアプリ独自のお作法" というのは、Androidでいうとmanifestやxmlの記述方法、apkをリリースする時の電子署名などです。また、ユーザーが実行するにはアプリインストールが必要です。
最近はハイブリッドアプリなどでJavaScriptでも開発できると思いますが、結局開発環境やスマホアプリ独自のお作法からは逃れられないと思います。

そういう訳で、初心者がちょっとしたBLE通信がやりたいときは、この選択は無いかなとクラゲは思います。
繰り返しますが、本格的なBLEスマホアプリを作りたいなら、この開発しかありません!

noble

nobleはnode.jsを使ってJavaScriptでBLEのセントラル側の開発が可能なライブラリです。
ペリフェラル側のも同様にblenoというライブラリがあります。
https://github.com/sandeepmistry/noble

プログラミング言語はJavaScriptで開発環境もテキストで出来るのでお手軽ですが、node.jsなのでバックエンドとフロントエンドの両方を記述しなきゃいけないのがクラゲには面倒に感じました。
また、主にPCやRaspberryPiなどで実装することになります。スマホに実装させるのはちょっと難しそうです。クラゲはスマホでも簡単にBLE通信したいので、この手法はパスします。
PCやRaspberryPiでBLEがやりたくてnode.jsが得意な人はこの開発も良いと思います!

konashi.js

2番目の評価になっていますが、iOS限定でざっくり簡単なBLEアプリをちょっとだけ作りたいという場合には実は1番良いと思っています。
セントラルのみならず、ペリフェラル側もJavaScript1つで記述できてしまうのは、konashi.jsのみで、最大の特徴です。
クラゲのブログでも開発方法を載せていますので参考にしてみてください。
http://jellyware.jp/kurage_2/konashi/start.html

一方で、使い勝手という点では他に劣ることがあります。
対象機種はiOSのみです。またBLE通信は1対1しか出来ません。BLEデバイスはkonashi以外には全く流用は効きません。
アプリでファームウェアの動作をゲートウェイしている関係で、ハードウェア性能にやや制限があります(例えばタイマー精度が悪い)
HTML自体もkonashi.jsアプリの中で表示している関係上、期待通りの表示や動作にならなかったりする場合があります。
開発実行やデバグもjsdo.itで作った後にkonashi.jsで読み込むという作業が必要で、やや手間です。
なんか、色々とデメリットばかり挙げてしまいましたが、上で書いたように、iOS限定でざっくり簡単なBLEアプリをちょっとだけ作りたいという場合は最適なので、その場合はクラゲはkonashi.jsをイチオシします!

Web Bluetooth API

最もクラゲの評価が高いのはこれです。
Web Bluetooth APIを使うと、フロントエンドのJavaScriptのみでBLE通信できちゃいます!
開発環境は普通にHTML/JavaScriptを開発するのと全く同じです。特別な開発環境やライブラリは一切不要です。
ブラウザ実行なので、PCでもスマホでもいけます。
しかし、気をつけなればいけない点があります。表の中で△にしている理由が1部OS未対応や1部機能未実装があること(詳細は最後のHello,BLEリンク参照)です。しかし、今後しばらくすればきっと全対応されていくと思います!

さて、そんな素晴らしいことばかりのWeb Bluetooth APIなのですが、サンプルの中身を覗いてみるとJavaScript初級者には辛い記述がありました。
Arrow FunctionやPromiseやAsync Awaitなどの記述です。

  navigator.bluetooth.requestDevice(options)
  .then(device => {
    log('> Name:             ' + device.name);
    log('> Id:               ' + device.id);
    log('> Connected:        ' + device.gatt.connected);
  })
  .catch(error => {
    log('Argh! ' + error);
  });

知らない人はえっ何これ?って感じだと思います。これらの記述はES2015(ES6)という新しいモダンなJavaScriptの記述方法です。また学習コストが。。。うーん、これは困りますね。。。

そこでクラゲは触手を伸ばして頑張りました!
これらのモダンなJavaScript記述を意識することなく、さらにもっと簡単にWeb Bluetooth APIが扱えるようになるラッパーライブラリを作りました。
その名は BlueJelly.js です!

これを使うことにより、JavaScript初心者も初級者の皆さんはもちろん、中級以上のお兄さんお姉さん方も超簡単にWebBluetoothAPIが出来ます!
さあ、BlueJellyを使って、BLEを楽々開発しようじゃありませんか!
クラゲのブログページでは、BlueJellyのAPIリファレンスはもちろん、基礎的な使い方、応用的な使い方、BLEそのものの知識もバンバン載せていきますので、ぜひご利用してみてください!
Hello, BLE

以上、様々なBLE開発手法でした。