xor

二兎を得るか、一兎をも得ざるか

【ESP32 × LINE】たった2行でLINEビーコンが作れるライブラリをリリースしたよ

(2020/09/04追記) アップデート & 記事修正しました。
最短4行→2行で構成可能になり、ハードウェアIDもコード内へそのままコピペできるようになりました。
サンプルスケッチも簡単ながら1つから3つに増やしました。


LINEビーコン なるものをご存知でしょうか。

guide.line.me

Bluetoothをオンにして、LINE側でも設定しておくと、LINEビーコンを設置しているお店や自販機などの近くに行くとトークルームに通知が飛んでくるというやつです。
開発者的に言うと「ビーコンイベントが含まれたWebhookが飛んでくる」という感じになります。

LINE対応ビーコン(単3形電池2本タイプ)筐体あり | beacon shop

上記リンクのようなデバイスが「LINEビーコン」の一例です。

基本的にはビジネス用途向け(店舗や企業などの法人向け)で、特定範囲内に入ったLINEユーザに対して、公式アカウント(友達登録してなくてもよい)からメッセージやクーポンを送ることでマーケティングに活用…… というのが主要な文脈のようですが、一般ユーザでもこのLINEビーコンの一部の機能を活用したプロダクトやサービスを作ることが可能です。

例えばこちら。
自作した「スマートロック」で、動画では確認できませんがLINEビーコンが実装されており、スマホを持った状態で自宅ドアに近づくと自動で解錠されるような機能がついています。

基本的にBluetooth Low Energy (BLE) が利用可能なマイコンであれば何でもLINEビーコンとして扱うことができるようになっており、それを実現する規格として「LINE Simple Beacon」というものが定められています。

github.com

今回はこの「LINE Simple Beacon」を、Arduino開発環境におけるESP32に簡単に実装できるようなライブラリを作りましたよ! という内容になります。

インストール

f:id:ukkz:20200821195558p:plain

Arduino IDEを開き、ツール > ライブラリを管理 の「ライブラリマネージャ」ウインドウにて「line beacon」と検索すると、ライブラリが1つだけヒットしますのでそれをインストールしてください。
ライブラリ名は GreenBeacon となっており、「LINE Simple Beacon規格に対応した独自のビーコンライブラリ」としてライブラリマネージャに登録されています(商標上の問題があったため)。

リポジトリはこちら。

github.com

使い方

詳しい使い方は上記リポジトリ内のREADMEを参照してください。

まず以下の公式ドキュメントを熟読し、ビーコンを使う場合のMessaging APIの流れについて予め把握しておきます。
基本的にはバックエンド側の開発(ビーコンイベントのハンドリング)が主になることに注意してください。

developers.line.biz

なんとなく理解できたら、公式アカウントを作成し、ハードウェアIDを以下より取得します。

manager.line.biz

ライブラリをインクルードしたうえで、ESP32側の最低限のコードは以下のようになります。
変数 hwid は、先ほど発行したハードウェアIDにあわせて書き換えてください。

const char hwid[5] = {0x01, 0x23, 0x45, 0x67, 0x89};
GreenBeacon beacon = GreenBeacon(hwid);
beacon.setMessage("hey");
beacon.start();

(2020/09/04追記) v0.2.0から以下のコードで動作するようになっています。

GreenBeacon beacon = GreenBeacon("0123456789");
beacon.start("hey");

実際には setup()loop() が必要なのでこの4行2行だけというわけにはいきませんが、既存のスケッチに追加するのであればこれだけでOKです。
あ、あと #include も先頭に必要でした。失礼。

「たったn行でできる」シリーズはどこまでの行数含めればいいのかいつも気になるところ

コード全体としては結局どうしたらいいかわからない場合は、「スケッチ例」の中に1つだけ3つほどサンプルを入れていますので参考にしてください。(hwid書き換えは必須です)

ESP32側に書き込めたら、あとはバックエンド側を開発し、ビーコンイベントに対して返信を行うことで「ビーコン近接通知」が実装できます。

対応デバイス

ESP32がのっかってるボードだったらなんでもOKです(たぶん)

f:id:ukkz:20200807040931p:plain

とりあえず手元にあったこの2つ、自作のESP32ボード(非売品)と M5StickC Plus で試しはしたけど、どっちもWROVER (修正: PICO) なので……
だいじょぶとは思うけどWROOMでやってみて動かないとかあればコメントもらえると嬉しいです。

(2020/09/04追記) ESP32 WROVER & PICO搭載機で動作確認できています。

バックエンドなんてわかんねー!

たった4行2行って言いながら結局がっつりコード書くことになるからね、そりゃそうですわな。
ということで、ノンプログラミングでビーコン対応したLINEボット(公式アカウント)を作成できるサービスをちょっとずつ開発してるので、できたらまた記事書くなりTwitter呟くなりする予定です。

補足

自作クラス(ライブラリ)はしょっちゅう作っているのですが、Arduinoの公式ライブラリマネージャから自分のライブラリがインストールできたらええな…… と急に思いたち、Arduino歴およそ5年にして初めて登録申請を送ってみたのが今回のLINEビーコンのライブラリです。

申請にあたっては以下の記事を参考にしました。感謝!

qiita.com

lang-ship.com