TI SensorTagをブラウザから使う(2):with LINE Things

前回に引き続きTIが販売している小型で電池駆動のSensorTagを使ってみます。

 TI SensorTagをブラウザから使う(1):with Chromeブラウザ

今回は、TIのSensorTagをLINE Thingsに対応させ、LINEアプリの中でセンサー情報を表示してみます。また、ついでに、LINE Beaconにも対応させます。

結構、めんどかったです。SensorTagのファームウェアのカスタマイズが。

以下の手順で進みます。


  • LINE Thingsトライアルプロダクトを作成し、サービス探索用serviceUUIDを取得します。

  • LINE BeaconのためのハードウェアIDを払い出します。

  • サービス探索用serviceUUIDとハードウェアIDを埋め込めるように、SensorTagのファームウェアをカスタマイズします。

  • LINEアプリから接続します。


LINE Thingsのためのサービス探索用serviceUUIDの取得

以下に手順があります。

 https://developers.line.biz/ja/docs/line-things/regist-product/

LINE Things対応デバイスは、LIFFアプリに紐づきます。また、LIFFアプリは、Message APIのチャネルに紐づきます。

そして、LINEアプリユーザは、LINE Things対応デバイスをBLEスキャンして発見し、LINE Things対応デバイスが属するチャネルとお友達になることで、LINEアプリからそのLINE Things対応デバイスを扱えるようになります。

LINE Things対応デバイスを扱うためのアプリが、LIFFです。

〇まず、LIFF APP IDを作成します。

LINE Developerページから、Messaging APIのプロバイダを選択します。まだ作成していない場合は作成してください。

そして、LIFFタブを選択します。

image.png

右側にある「+追加」ボタンを押下します。

image.png

名前には適当な名前を付けます。たとえば、「SensorTag Application」とでもしておきます。

サイズは、LIFFアプリのWindowsサイズです。Fullでいいでしょう。

エンドポイントURLには、LIFFアプリのWebページを指定します。1回目の投稿で作成したWebページのことです。

BLE freatureは、当然ONにします。

完了すると、LIFF URLが割り当たります。

line://app/ より右側にある文字列がLIFF APP IDです。

ちなみに、1回目で作成したWebアプリのJavascriptは、LIFFアプリとしても動作するように実装してありますので、LINEアプリからでもChromeからでもどちらからでも開けます。

(参考)

https://developers.line.biz/ja/reference/line-things/#liff-bluetooth-getavailability

〇次に、サービス探索用serviceUUIDを取得します。

以下のページを参考に、CurlやPostman等を使って取得します。

 https://developers.line.biz/ja/docs/line-things/regist-product/

レスポンスのうちの、「"serviceUuid": "{serviceUuid}"」が大事です。覚えておきます。

忘れてしまったら以下を参考に呼び出せばわかります。

 https://developers.line.biz/ja/reference/line-things/#get-trial-products


ハードウェアIDを取得する。

以下のページから、LINE BeaconのためのハードウェアIDを取得します。

https://admin-official.line.me/beacon/register#/botlist

対象のチャネルを選択して、「ハードウェアID発行」ボタンを押下するだけです。

image.png

LINE Beaconは、この払い出されたハードウェアIDでMessage APIのチャネルに紐づけられます。

LINEアプリでは、LINE Beacon対応デバイスが属するチャネルとお友達になることで、LINE Beaconから通知を受けることができるようになります。


SensorTagのファームウェアをカスタマイズする

変更内容は以下の通りです。これが一番苦戦しました。


  • LINE Things対応デバイス

・ボンディングの前に、サービス探索用serviceUUIDをアドバタイズできる

・ボンディングができる

・ボンディング後の通信が暗号化される

・デバイス特定用characteristicから、デバイスを一意に識別する値を読み込める

・デバイス特定用characteristicは、属性のパーミッションを暗号化(Encryption)に設定してください。

(参考)

https://developers.line.biz/ja/docs/line-things/create-product/

デバイスを一意に識別する値として、今回はBluetooth MACアドレス(リトルエンディアン)としました。


  • LINE Beacon対応デバイス

・アドバタイズデータに、ハードウェアIDを含む「LINE Simple Beacon Frame」を含める。

(参考)

 https://github.com/line/line-simple-beacon/blob/master/README.ja.md

アドバタイズデータの最大長の制限により、LINE Things対応デバイスとLINE Beacon対応デバイスを同時に有効にすることができませんでした。以降のカスタマイズでは、Characteristicに0x00または0x01を書き込むことによって切り替えられるようにします。

もろもろのソースコード変更分を以下に置きました。オリジナルのファイルも置いておいたので、比較してみてください。

 https://github.com/poruruba/sensortag_modified

ちなみに、コンパイル時にROM容量が足りなくなったので以下の機能を削除しています。


  • OAD(Over the Air Download)

  • FACTORY_IMAGE

ですので、一度更新したらOTAで更新できなくなります。(なので、デバッガボードCC-DEVPACK-DEBUGを所有している方限定なのです)

それから、既存のSensorTagサンプルアプリをJust Works Pairing対応しようとしましたがうまくいかず、SamplePeripheralサンプルアプリをベースに、SensorTagサンプルアプリの機能を移植して、LINE用にカスタマイズしました。


カスタムファームウェアの使い方


  • サービス探索用serviceUUIDの設定

    Characteristic UUID:linethings.cのlinethingsProfileServiceUuidCharUUIDで示すUUID

    に、サービス探索用serviceUUID(16バイト)をリトルエンディアンでWriteします。


  • ハードウェアIDの設定

    Characteristic UUID:linethings.cのlinethingsProfileBeaconHwidCharUUIDで示すUUID

    に、ハードウェアID(5バイト)をWriteします。


  • LINE ThingsとLINE Beaconの切り替え

    Characteristic UUID:linethings.cのlinethingsProfileSwitchCharUUIDで示すUUID

    に、以下の値(1バイト)をWriteします。

    0x00:LINE Things対応デバイス

    0x01:LINE Beacon対応デバイス



LINE Things対応デバイスとしてLINEアプリから接続する

サービス探索用serviceUUIDを設定し、LINE Thingsに切り替わっていることを確認します。(アドバタイズデータを見ればわかります。)

LINEアプリを立ち上げて、右上の歯車のマークを選択して設定画面を表示します。

そこに、「LINE Things」という選択肢があるかと思います。それを選択します。

image.png

連携可能なデバイス に、SensorTag というのが現れていると思います。

image.png

それを選択します。以下のようなダイアログが表示されます。

image.png

「今すぐ利用」を押下すると、マイデバイスにSensorTagが追加されて、紐づけていたLIFFアプリが起動します。

image.png

後は、1回目の投稿と同じように、「接続」ボタンを押下して、チェックボックスをチェックすれば、センサー情報が取得されるかと思います。

image.png

ちなみに、1回目の投稿で、sensortag.jsにおいて、以下のようにしていましたが、今回取得したサービス探索用serviceUUIDに指定することで、BLEスキャン範囲を絞ることができます。


  • const UUID_SERVICE_LINETHINGS = "【LINE Thingsのサービス探索用serviceUUID】"; //1回目では使いません。

  • filters: [{services:[ /* service_uuid */ BluetoothUUID.canonicalUUID(0x180f) ]}], // 1回目ではとりあえずこんな感じ


LINE Beaconとして起動する

ハードウェアIDを設定し、LINE Beaconに切り替わっていることを確認します。(アドバタイズデータを見ればわかります。)

LINE Beaconから通知が飛ぶようになるので受ける側のRESTfulサーバを立ち上げます。

そのやり方は、過去の投稿の以下を参考にしてください。

 LINE Beaconを自宅に住まわせる

以上