LoginSignup
2
1

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-03-24

前回に引き続き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を取得します。

対象のチャネルを選択して、「ハードウェア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を自宅に住まわせる

以上

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1