EdisonでEddystoneを使いURLを送信する
Physical Web対応は追い風になるか
どうも。大村です。 前回のEddystoneとはなんぞやっというエントリーが出る前後で、丁度iOS版Chromeブラウザが更新され、Physical Webに対応したというニュースが流れました。 Eddystone-URLを利用でき、既にiOSでも受信できるということです。 この対応はEddystoneとしても追い風になるアップデートですね。まあ、どちらもGoogle社のプロダクトなので当然といえば当然ですが。 一般的に利用者の高いChromeブラウザが標準で使えるようになるということに、やはり期待に胸が膨らむわけです。
早速この機能を使ってみるべく、Eddystoneを試してみたいと思います。
Edisonよ、復活の時が来た
さて、早速Eddystoneを試してみようと思ったのですが、弊社では今手元にEddystoneに対応したBeaconモジュールがありません。 (Estimoteで試してみたかったのですが、弊社小室の私物で、かつ現在札幌オフィス勤務のためすぐに試すことが出来ません。) 日本でも幾つか対応しているEddystone対応モジュールが販売されていますが、中々手に入れづらく、Amazonでポチポチしたり、弊社目の前のアキヨド(ヨドバシカメラマルチメディア秋葉原)にダッシュして購入するというわけにも行きません。 ということで、久しぶりに登場です。
「Intel Edison」
弊社でもIoTの施策としてEdisonを使ったプロダクトを提案しつつ、ブログ記事も沢山執筆されています。 せっかくですので、このEdisonをEddystone送信機にして、iOSやAndroidで受信してみる、みたいなことをしてみたいと思います。
Edisonに実装する方法
EdisonでEddystoneを動かすのに一番簡単なのが、Node.jsで動かす方法です。 Node.jsであれば、Edisonにデフォルトでインストールされています。 node-eddystone-beaconを使用します。
BluetoothをONにする
デフォルトではEdisonのBluetoothはONになっていません。 まずは、Bluetoothモジュールを使えるようにします。
$ rfkill unblock bluetooth $ hciconfig hci0 up
node-eddystone-beaconをインストールする
Node.jsでEddystoneを使えるモジュールをインストールします。
$ npm install eddystone-beacon
次に、ソースコードをちょろちょろっと記述します。
sample.js var eddystoneBeacon = require('eddystone-beacon'); var url = 'https://dev.classmethod.jp/'; eddystoneBeacon.advertiseUrl(url);
実行してみたらエラーが出る
さて、上記ソースで実行してみます。
$ node sample.js (略) Error: Encoded URL (https://dev.classmethod.jp/) is too long (max 18 bytes): 19 bytes (略)
エラーを見ていただいたらわかりますが、URLが長すぎると言われます。 もともとBLEのパケット上限は、ヘッダ等を含めて47byteと決められており、URL長も18byte(http://を1バイトとして換算する)は使えずEddystoneの規格上17byteまでになってます。 ここで登場するのが、短縮URLサービスです。 もともとGoogleもこの方法を提唱しています。
もう一度実行する
先ほどのurlを、短縮URLで変換かけてみると、「http://goo.gl/KhZwM」になりました。 これに置き換えます。
// var url = 'https://dev.classmethod.jp/'; var url = 'http://goo.gl/KhZwM';
これを実行します。
$ node sample.js
iOS Chromeブラウザで受信する
早速iOS Chromeブラウザで受信できるかどうかを確認します。 ニュース記事にもある通り、通知センターの今日の箇所にChromeを追加します。
引っ張って出して、「Physical Web対応オブジェクトをスキャンしています。」と出るか、有効にしてください、といったメッセージが出てきたらONにします。 すると、以下の様にタイトルとURLが取得できます。
ここで気がついたのが、短縮URLを利用していても、このChrome上ではちゃんと元のURLが表記され、タイトルも取得されています。 Chrome内部で一度ウェブにアクセスしていることがわかります。
Androidで受信する
AndroidでEddystone-URLを受信してみます。 Androidの場合は、「Locate Beacon」を使って受信してみます。
起動して「Locate Beacons」をクリックすると、Visible Beaconsに先ほど設定したURLが受信できています。
パラメーターもEddystone-URLであることがわかります。 ただし、こちらは受信したURLをそのまま表示しているのか、タイトルや短縮前のURLが表示されるわけではありませんでした。
最後に
今回は、Eddystone-URLをEdisonで実装して、iOSとAndroidで受信する一連の流れを確認しました。 結構簡単なソースでURLを送信することが出来ます。 ただし、Eddystone-URLで出来ないのは、プッシュ型の配信です。 それこそ、あちこちにEddystone-URLのBeaconを設置していたら、プッシュ通知されまくってえらいことになってしまいます。
URLを送信できることになり、更にEdisonのような端末でURL書き換えながら送信し続けることもできるので、なにか面白いことができるような気がします。