LINE株式会社は、2023年10月1日にLINEヤフー株式会社になりました。LINEヤフー株式会社の新しいブログはこちらです。 LINEヤフー Tech Blog

Blog


LINE の IoT プラットフォーム LINE Things の Developer Trial を試してみる

English version.

LINE Things のプラットフォーム開発をしている川田です。

皆さんは、LINE Things という LINE の Bluetooth LE を使った IoT プラットフォームをご存知でしょうか? 2018年11月に行われた LINE Developer Day 2018 で発表され、開発者が気軽に利用できる Developer Trial が公開されました。 この記事では、LINE Things のサンプルコードをもとに、実際に LINE 上で連携できるデバイスを ESP32-DevKitC を利用して作成し、動かしてみる手順をご紹介します。

LINE Things とは

LINE Things とは、Bluetooth LE に対応した IoT デバイスを LINE のアプリ上で接続し Bot や Web サービスと連携することができるプラットフォームです。

今まで Bluetooth LE (BLE) を利用するデバイスをスマートフォン上から操作するには、専用のアプリを作成したり Web Bluetooth を利用する必要がありました。 そこで、LINE Things は、皆さまに日々お使いいただいている LINE アプリ上で、Bot および LINE Front-end Framework (LIFF) を組み合わせるだけで、もっと気軽にデバイスとの連携を実現できるようなプラットフォームを提供すべく開発されました。

LINE Things では、大きく以下の3つの機能が提供されます。

  • LINE アプリ上で Bluetooth LE 接続可能な LINE Things 対応デバイスを登録する
  • LIFF 上から JavaScript API を経由して LINE Things 対応デバイスを操作する
  • LINE アプリがデバイスに対して自動で通信を行い、対象の Bot に情報を送信する(今後対応予定)

つまり、LINE とつながる ""もの"" なので LINE Things であり、これを実現するプラットフォーム全体のことを LINE Things と呼びます。

LINE Things の詳しいドキュメントは、LINE Developers サイトで提供されています。 基本的に、Bluetooth LE の Characteristic の Read, Write, Notify を LIFF 内で JavaScript から操作できるような API を提供しています。 LINE Things 向け JavaScript API は、Web Bluetooth の API を参考に作られており、親和性があるようになっています。 また、現在ではまだ提供されていませんが、今後自動通信への対応も予定されており、Bot と IoT デバイスの連携を密にする機能となる予定です。 もし、LIFF についてご存じない方は、ぜひ "Messaging APIの新機能LIFFの使い方を解説します。" をご覧ください。

LINE Things Developer Trial

LINE Things では、皆さんに気軽にプラットフォームの可能性を体験していただけるよう、Developer Trial の機能を提供を開始しました。 Developer Trial では、いくつか決められた規格を守ることで、開発者のみなさまが自由に Bluetooth LE 対応デバイスと LIFF アプリを作成していただき、LINE Things プラットフォーム上で開発を行うことが出来ます。

LINE Things Developer Trialについて

Developer Trial では、プロダクトやデバイスの数、プロダクトが結び付けられた Bot と友達でないと検出できない、などいくつかの制限がありますが、基本的に個人や小規模な実験を行う上では問題ないような制限が設定されています。 個人的な電子工作で、Bluetooth LE を使ってみようと思っている方には最適なものとなっているので、是非気軽に試していただきたいです。

Developer Trial を利用して、LINE Things プラットフォームで開発を行うには以下の準備が必要です。Bot や LIFF を作る必要があるので、少々手順が多いですがドキュメントが揃っているので、それほど難しくないと思います。

  • LINE アカウント
  • 新規チャンネル (Bot) の作成
  • 新規 LIFF アプリの作成 + Bluetooth LE 機能の付与
  • 新規 LINE Things プロダクトの作成
  • LINE Things 対応 Bluetooth LE デバイス

もちろん、Developer Trial を行って頂き、更に多くのユーザーへ公開したい場合、実際に製品に組み込みたい場合などは、積極的にご相談に乗りますので、こちらのフォーム からご連絡ください。

LINE Things Starter を試してみる

ここまでの話を聞いて、LINE Things を試してみたくなったのではないでしょうか? しかし、「LINE Things 対応 Bluetooth LE デバイスを作るのは大変なのでは?」と思う方も多いと思います。 そこで、皆さんがすぐに LINE Things を体験できるように、LINE Things Starter として気軽に試せるデバイスのファームウェアと LIFF アプリのサンプルコードを GitHub 上で公開しています。

LINE Things Starter on GitHub

LINE Things Starter の開発デバイスとしては、Bluetooth LE に対応している以下の3つの市販開発ボードが現在利用可能です。 どれも、日本で比較的簡単に手に入れることができる、技適マーク付き開発ボードとなっています。 Espressif ESP32 は Wi-Fi も対応しているモジュールで、Nordic nRF52 は長時間電池駆動も可能な低消費電力モジュールとなっています。 ファームウェアは、今のところ全て Arduino IDE を利用して開発できるものとなっています。

今回は、ESP32-DevKitC をデバイスとして利用することを前提として解説をします。 ESP32-DevKitC は、以下のようなショップから購入可能です。 その他、Arduino IDE から ESP32 Dev Module として扱うことができるものであれば、対応可能だと思いますが、自己責任でお願いします。

では、LINE Things Starter のコード利用して、LINE Things を実際に試してみましょう。

LINE Things Starter ファームウェアの書き込み

まずは、LINE Things Starter の ESP32 向けファームウェアを開発ボードに書き込みましょう。ファームウェアは、Arduino IDE を利用して書き込みます。GitHub のリポジトリに Arduino IDE のセットアップ方法や、ボード設定の手順が書かれているので、こちらを参考にしてください。

line-things-starter/esp32/README.ja.md

LINE と LINE Things デバイスを連携させてみよう

次に、ファームウェアの書き込みが完了したら、実際に LINE へデバイスを連携してみましょう。

LINE Things を利用するために、まずお使いの LINE をインストールしたスマートフォン上で、以下の QR コードを読み取って規約に同意していただき、LINE Things の機能を有効化してください

その後、以下のようなデバイス連携画面が見えるはずです。(一度有効化したら、次回からは "設定" → "LINE Things" からデバイス連携画面を開くことが出来ます) ここで、ファームウェアを書き込んだデバイスの電源を入れると、LINE Things デバイスが検出され "連携可能なデバイス" に "LINE Things Trial (Default Firmware)" が表示がされるはずです。表示されない場合には、スマートフォンの Bluetooth がオフになっていないか確認してください

表示されたデバイス名をタップしてみましょう。ペアリング要求を承認すると、以下のような画面の LIFF アプリが立ち上がると思います。 この画面で、Device connected と表示されたら、スマートフォンと LINE Things デバイスが接続が完了した状態です

この LIFF の画面を開いたまま、開発ボード上 USB コネクタの左隣にある "Boot" ボタンを押してみましょう。 LIFF アプリ上の "Button state" にボタンの状態の変更が反映されるはずです。 ("EN" ボタンは、デバイスがリセットされます。うまく動作しない場合には、一度 "EN" ボタンを押してリセットしてみてください。)

この機能は、BLE の Notify を利用して、デバイスから自発的にイベントが発生した場合に通知される仕組みを利用しています。 このように、LINE Things を使うと、簡単にデバイスから BLE を経由して様々な情報を受け取って、LIFF 上に表示することができるようになります。

ブレッドボードに LED を配線して、操作してみよう

次に、開発ボードに LED を接続して、スマートフォンから LED を操作してみましょう。いわゆる、Lチカです。 以下のように、ブレッドボードを利用して ESP32-DevKitC と LED と抵抗を接続してください。

その後、LIFF 上の "Switch LED ON" ボタンを押してみましょう。LED が点灯しているはずです。 もう一度ボタンを押すと、LED を消すことが出来ます。 こんなに簡単に LINE から IoT デバイスを操作できると、いろいろ面白いことができそうと思いませんか?

Developer Trial を利用して、自分専用の LINE Things デバイスを作る

これまでは、デフォルト状態のファームウェアと LIFF および GATT Service UUID を利用して、LINE Things デバイスをテストしました。 ファームウェアを書き換えたり、LIFF を変更して、独自に開発を行うには LINE Things Developer Trial を利用する必要があります。 Developer Trial では、上記で述べた通り、自分で Bot と LIFF を作成した上で、発行された独自の GATT Service UUID を Advertising する必要があります。 今回は、LINE Things Starter のファームウェアと LIFF を利用して、UUID を書き換えて独自のプロダクト向けの開発環境を作成してみましょう。

新規チャンネル (Bot) と LIFF アプリの作成

以下のドキュメントを参考に、新規チャンネルと LIFF を作成します。

LINE Things - LINEプラットフォームでの受け入れ準備をする

今回利用する LIFF は、LINE Things Starter のコードと GitHub Pages を利用することで、Web サーバーの準備なしに設置することが出来ます。 LINE Things Starter のリポジトリ を GitHub で Fork した後、設定画面で GitHub Pages を開き、Source を master branch に変更してください。 その後、"Your site is published at {URL}" と表示されるはずなので、この URL に "liff-app/" を末尾につけたものが LIFF のエンドポイント URL になります。

また、LIFF を作成する際には、LINE Developers サイトから Web UI 上で作成することも出来ますが、LINE Things で利用する LIFF では Bluetooth LE feature を付与する必要があり、現在 Web UI 上ではこの操作に対応していません。 そのため、以下の curl コマンドのように、チャンネルアクセストークンを利用して直接 LIFF 作成 API を叩いて頂く必要があります。 LINE Things 向けの LIFF を作成する際には、"features": { "ble": true } 忘れずに設定してください。

curl -XPOST \
-H 'Authorization: Bearer {channel access token}' \
-H "Content-Type: application/json" \
-d '{
    "view": {
        "description": "{liff name}",
        "type": "full",
        "url": "{LIFF endpoint URL (GitHub Pages)}"
    },
    "features": { "ble": true }
}' \
https://api.line.me/liff/v1/apps

LINE Things プロダクトの作成

次に、LINE Things Developer Trial 専用の API を利用して、新しい LINE Things プロダクトを作成してみましょう。 プロダクトを作成するには、上記で作成した Bot のチャンネル ID と LIFF アプリの ID が必要になります。

トライアルプロダクト情報を作成する

以下がプロダクト作成 API を curl で叩いてみた例です。(残念ながら、現在 Web UI は提供されていません...)

curl -X POST https://api.line.me/things/v1/trial/products \
-H 'Authorization: Bearer {channel access token}' \
-H 'Content-Type:application/json' \
-d '{
    "name": "{trial product name}",
    "liffId": "{LIFF APP ID}"
}'

チャンネルアクセストークンは、LINE Developers サイトから取得することが出来ます。 "name" には、好きなプロダクト名を登録することが出来ます。自分の Product だと分かる名前を設定しましょう。 "liffId" には、上記で作成した LIFF アプリの ID (LIFF URL の line://app/ 以降の文字列) を指定してください。上記のプロダクト作成 API を叩くと、以下のような結果が帰ってきます。

{
  "id": {productId},
  "name": "{trial product name}",
  "actionUri": "{LIFF APP URL}",
  "channelId": {channelId},
  "type": "BLE",
  "serviceUuid": "{serviceUuid}",
  "psdiServiceUuid": "{psdiServiceUuid}",
  "psdiCharacteristicUuid": "{psdiCharacteristicUuid}"
}

LINE Things の Developer Trial 向けプロダクトでは、プロダクトを作成すると専用の Bluetooth LE の GATT Service UUID が発行されます。上記の結果に含まれる "serviceUuid" が、発行された UUID となります。デバイスは、この Service UUID を Advertising Packet に含めることで、LINE アプリがデバイスのプロダクトを特定できるようになり、LINE Things に連携できるようになります。

"psdiServiceUuid", "psdiCharacteristicUuid" は、デバイスを特定する ID (PSDI) を格納した Characteristic とそれを提供する GATT Service の UUID です。Developer Trial プロダクトでは固定の値です。LINE Things 対応プロダクトでは、この Characteristic を Read した時に、デバイスごとに変わる一意な値を返す必要があります。詳しい仕様は、"LINE Things対応デバイスを作成する" をご覧ください。

これらの Bluetooth LE 特有の仕組みがよく分かっていなくても、上記の仕様は LINE Things Starter ですでに実装されているものですので、今完全によく理解している必要はありません。 LINE Things Starter そのままでは、Service UUID が初期設定のものとなっているため、これを発行された Service UUID に書き換えることでオリジナルプロダクトを LINE Things Starter をベースに開発することが出来ます。

LINE Things Starter の変更

まずは、デバイスに Service UUID を変更したファームウェアを書き込みます。 ESP32 のファームウェアの以下の行の "USER_SERVICE_UUID" を発行された Serviced UUID に書き換えます。 そして、Arduino IDE を利用してデバイスに書き込んでください。

https://github.com/line/line-things-starter/blob/master/esp32/arduino/sample/sample.ino#L10

// User service UUID: Change this to your generated service UUID
#define USER_SERVICE_UUID "91E4E176-D0B9-464D-9FE4-52EE3E9F1552"

次に、LIFF の JavaScript 内で Service UUID を指定している箇所を書き換えます。 以下の "USER_SERVICE_UUID" を同じく発行された Service UUID に書き換え、デプロイしてください。

https://github.com/line/line-things-starter/blob/6f60a74e589e236ccf81bff44f0d6eade8ae4956/liff-app/liff.js#L2

// User service UUID: Change this to your generated service UUID
const USER_SERVICE_UUID = '91E4E176-D0B9-464D-9FE4-52EE3E9F1552'; // LED, Button

動作確認

まず、上記で新規チャンネル作成した Bot を友達登録してください。 Developer Trial では、チャンネルに紐付けられた Bot と友達になっているユーザーにのみ、そのチャンネルに紐付けられた LINE Things プロダクトが検出可能になります。 Bot と友達になるには、LINE Developers サイトからチャンネル基本設定を開き、下部に表示されている QR コードを LINE アプリから読み取ってください。

そして、デバイスの電源を投入した後、LINE Things のデバイス連携画面に Developer Trial として登録したプロダクトとして検出されていれば、ファームウェアは正しく動作しています。 その後、LIFF を開いて正しく動作していれば動作確認は完了です。

⚠ iOS では、同じデバイスでファームウェアを書き換えた場合に、うまくデバイスを検出できなかったり、正しく Characteristic が動作しない問題が発生します。(iOS 自身のキャッシュによる問題) ファームウェアを書き換えた際には、iOS の設定画面から Bluetooth デバイスの登録を解除して、Bluetooth を一度 OFF にしたあと、もう一度 ON にすると解決する場合が多いです。 また、LINE Things の連携画面から、デバイスを一度古い product を unlink してください。

うまく動作しない場合には、正しくファームウェアの Service UUID が書き換えられているか、書き換えた正しく LIFF に反映できているかを確認してみてください。Bluetooth LE のデバッグには、BLE 関連のチップメーカーである Nordic が提供している "nRF Connect for Mobile" というアプリを使うと便利です。

ここまで出来たら、この先は自由にファームウェアと LIFF を開発していただけます。 基本的に、発行された Service UUID の Advertising と、PSDI Service の実装だけを守っていれば、それ以外は Characteristic を追加したり、独自の GATT Service を追加したり、予め定義されている GATT Service に則ったサービスを実装したり、基本的に自由に行っていただくことが出来ます。

LINE Things の可能性

LINE Things プラットフォームの可能性を感じていただけたでしょうか? 最後に、私達が LINE Things プラットフォームを開発する過程で、 PoC (Proof of Concept) として開発したデバイスについて軽く紹介して終わりにしたいと思います。 上記は、LINE Things 対応の体重計のプロトタイプと、LINE Things 対応の電子ペーパー (E-Ink) を搭載した電子カードのプロトタイプです。どちらも、CR2032 のボタン電池1つで動作できます。 体重計は Bluetooth 経由で体重を取得して記録できるようなアプリを LINE 上で作れますし、電子ペーパーは LINE アカウントや画像などを LINE からアップロードして書き換えることができます。 皆さんも Developer Trial を使えば、このようなデバイスを実際に作ることも可能です。 これらのPoC デバイスについては、あくまで検証用途で製品化などはするつもりはありませんが、もし機会がありましたら、詳しく紹介いたします。

最後に、LINE Things では、皆さんから Developer Trial を通じて感じた様々なご意見や感想を伺いたいと思っています。 Developer Trial で作られた作品などは、積極的に公開いただけると嬉しいです。 今後、ハンズオンやイベントなども計画中ですので、この記事ではうまくトライアル出来なかった方、もっと技術的な話を聞いてみたい方は、こちらのイベントの情報を是非お待ちください。

これからも、LINE Things をよろしくお願いします。