Android wearをiPhoneで使えるようにした.その2:アルファ版リリースの話.

前回のエントリで書いた,iPhoneAndroid Wear が使えるようになるアプリのアルファ版を公開した.こんな感じ

alpha release: android wear works with iphone - YouTube

インストール

マーケットに公開したわけではなくて,APKリリースなので,ADBコマンドが使える環境が必要.
apkはGoogleドライブにある.
apkダウンロードリンク

Wear側でADBをオンにした状態でPCに接続して,下記コマンドを実行する.
wear_iosというアプリがインストールされる.

$ adb install Wearable-release.apk

使い方

動画をみるとだいたいわかる. ペアリングするために,LightBlue というアプリをStoreからインストールする必要がある.
動画にあるように,"Blank"という仮想のBLEデバイスみたいなものを追加して,オンにしてください.

教えてほしいこと

動作機種

どの機種で動いたか教えて欲しい.バグとかも.

通知アイコン

通知がきたときにアプリのアイコンが出るのと出ないのがある.出してほしいアプリとかあったら教えて欲しい.今は,以下のアプリのアイコンが出るように設定してる.

  • 電話
  • SMS(メッセージ)
  • LINE
  • Gmail

これから

ソースを公開する.
Playストアで配信する.

Android wearをiPhoneで使えるようにした.その1: デモ(速報)編

こんな感じにiPhoneの通知をAndroid Wearで受けられるようになるものを作った.
AndroidWearとiOSを連携させる方法は Google公式のAPIでは提供されていない ためか,これまで 実現されていなかった. そのため本エントリでは速報的にデモ動画を掲載し,技術的な話は次回以降のエントリで説明していく. f:id:concre_shiitake:20150308165035j:plain

経緯

先週,@MohammadAGさんの,Android wear をiPoneで使えるようにしたっていう動画がバズってるのを見つけた.


Android Wear and iOS (direct connection) - YouTube

ぼくはAndroid端末も持っているんだけど,基本的にはiPhoneユーザなので手元のAndroid Wearを持て余していたもんだから,この動画にはすごく興味をもった.
ただ,これはデモ動画だけで,APKやソースの公開についてはまだ未定 ということだったので,自分で考えて実装する必要がある.

で,つくってみた

iPhoneにメッセージを受信した際の通知をAndroid Wear側でユーザに通知します.

Android Wear work with iPhone - YouTube

これから

まだざっくりとしたプロトタイプなので,もう少し仕様を見ながら修正をして,来週末くらいには公開できるといいなと思ってます.  

Intel Edison, ubilinuxへカーネルモジュールを追加する.

Intel Edison Advent Calender 2014の6日目です.
本日の担当は@shiitakeoですこんにちは.

宣言どおり,ubilinuxカーネルモジュールを追加するお話をします.
ubilinuxにカーネルモジュールを追加することができると,Webカメラを使ったり,オーディオを使ったりと,Edisonの可能性が広がりますね!

経緯

Yoctoはopkgのリポジトリが貧弱なので,ubilinux最高!みたいになってきてるのが実際のところだと思う. たしかにubilinuxのaptのリポジトリはいい感じなんだけど,ソースが提供されていないのでカーネルモジュールの追加どうすんのって感じだった.

解決策

Yoctoでカーネルをビルドして,ubilinuxへコピーするような形をとると,ubilinuxへカーネルモジュールを追加することができる.
具体的には,/boot/にあるカーネルと,/lib/modules以下にあるカーネルモジュールを,Yoctoからubilinuxへ転送する. ここで注目したいのは,ubilinuxのカーネルはYoctoのカーネルをベースにしているということで,試しに再ビルドしたYoctoのカーネルをubilinuxにコピーしてみたら,カーネルモジュールを追加することができた.

まあでもOSビルドして基板に転送,くらいのノリなので,今までのスタイルとあまり変わらないみたいな感じ.

1. 準備@Ubuntu:必要なカーネルモジュールを追加したYoctoイメージの作成.

必要なモジュールを追加したYoctoをビルドする.
カーネルビルドについては,Edisonアドベントカレンダー3日目の@k_yoneさんのエントリを参考にしてください.
発売当初は結構うまく行かなくて,ひさやんさんのエントリにお世話になった記憶がある.これとか,これとか.今はそうでもないのかなあ?

2. 準備@Edison

カーネルとモジュールを書き換えるので,現在入っいるものを削除しておきます.どっかにコピーしておいてバックアップしてもいいです.

$ rm /boot/*
$ rm -r /lib/modules/*

3. Edisonへ必要なファイルを転送する@Ubuntu

イメージファイルをマウントして,カーネルカーネルモジュールをscpを使って転送します.
カーネルビルドの際の設定(menuconfig)で,"*"にしたものはカーネルに組み込まれているので,edison-image-edison.hddimgの中に,"M"にしたものはカーネルモジュールになるので,edison-image-edison.ext4の/lib/modules以下に存在しています.

# postBuild.shを実行して作成される,ビルドしたイメージが存在するディレクトリで作業しています.
$ cd toFlash
$ sudo mkdir -p /mnt/edison/kernel
$ sudo mkdir -p /mnt/edison/modules
$ sudo mount -o loop  edison-image-edison.hddimg /mnt/edison/kernel
$ sudo mount -o loop edison-image-edison.ext4 /mnt/edison/modules
# user名とIPは適宜変更してください.
$ scp /mnt/edison/kernel/* root@192.168.xxx.xxx:/boot/
$ scp -r /mnt/edison/modules/lib/modules/* root@192.168.xxx.xxx:/lib/modules/

4. 再起動してカーネルとモジュールを読み込む@Edison

転送ができたら,再起動してあげれば,カーネルとモジュールが読み込まれて,ubilinuxで利用できるようになります.

$ reboot

5. 確認

今回はuvcをカーネルへ追加してみました.

root@ubilinux:~# find / -name uvc*
/sys/bus/usb/drivers/uvcvideo
/sys/kernel/debug/usb/uvcvideo
/sys/module/uvcvideo
/usr/include/linux/uvcvideo.h```

最後に

ubilinux最高!

おまけ

なんかこう固い話でつまんないので,HexBugとコラボして走ったりかっとんだりするEdisonくんを作りました.
ご確認ください.


走れ!Edisonくん! - YouTube


かっとべ!Edisonくん! - YouTube

水に反応して光るバッジをAgICで作った(Maker Fair Tokyo 2014落選作品のご紹介)

何を作ったか

MFT2014に落選したモノを,AgICを使って作った.雪だるま型の雪合戦用のバッジで,雪(水)がバッジにあたると雪だるまの目が光る.
↓バッジが濡れると…
↓雪だるまの目が光る. かわいい

MFT2014に落ちた

先週の日曜日にMaker Fair Tokyo 2014に行きました.
出展落ちたけど行きました.
出展落ちたけど行きました.
出展落ちたけど行きました.

何を出そうとしていたかというと,これまで作ってきたものと新作で, 新作は,水に反応して光るバッジと,そのバッジをたくさん並べた壁を出す予定だった.
出展申込が夏だったのもあって,うおおおお!水鉄砲でバッジ狙ったり,壁にバンバン水打ってビガビガ光ってたら最高じゃん!ちっちゃい子も楽しめるじゃん!受かる要素しかない!みたいなテンションだったんだけど,冷静に考えるとMFTは秋の終わりなんだよなあ,みたいな感じだった.

AgICとの出会い

で,出展落ちてから基板発注する元気もなくなって放置してたんだけど,先日AgICという,光沢用紙上にマーカーで書いた線で回路を作れるペンを手に入れた. こういう写真用の光沢用紙を使う.

以前にもこういうのはあって,例えば絵の具みたいになってて,それを紙に塗って回路作るやつとかがあった. けどこの手のやつは水にめっちゃ弱くて,今回のような水に濡れることを前提とした用途には向いてなかった.
一方で,AgICはある程度水に耐えられるので,じゃあこれで作れたらいい感じじゃんみたいな感じで,水に反応して光るバッジをAgICで作ってみた. 季節外れという弱点を克服するために,ユースケースは雪合戦にして,バッジの形も雪だるまっぽい感じを目指した.

仕組み

LEDを光らせるにはふつう,電池と抵抗とLEDをを使う. で,今回はLEDを点灯回路の抵抗の部分を水に置き換えてる.
こうすると,LEDと電池をつなぐオープンな箇所が,水で閉回路になってLEDが光るようになる.

ただ,伝導率がだいぶ低いのでトランジスタを使ってる.電源がそれなりにゴツイやつなら別にトランジスタいらないんだけど,ボタン電池でやりたかったのでトランジスタを使った.
雪だるまのおなかの部分にある2つの電極をまたぐように水がかかると,トランジスタのベース部分に電流が流れてLEDがが光る.このあたりはデザイン的にもうちょっと雪だるまにマッチするようなものにできるといいなあ.と思う.


AgICにはんだづけができなかったので,雪だるまのおなかの電極と電池をAgICを塗った紙でつないでたりとかしてる.この部分は雪だるまの手をイメージしてみたんだけど,なんか心臓から毛が生えたみたいな感じになってキモくなったと思う.

で,気になるところとしては,今回"水"って言っているのは純水ではなく水道水なのですが,雪って電気伝導率低いっていうし,実際どうなんでしょうね.雪玉作るときに手でにぎにぎするしいけるのかなあ.どうなんだろう.

今後

基板起こすのもいいけど,こういう紙とかテープとか使うのも楽しいなあと思った.
ちっちゃい子向けのワークショップにして,好きな形とかにしたら楽しいと思うし,来年のMFTとか出したい.なんか別の機会がないかなあとも思ってる.家族で来て楽しめたり,別にひとりで来ても楽しいみたいなやついいと思う.

Intel Edisonで大量のサーボを動かすPCA9685を使う話

概要

I2Cを使って,1つのチップで16個のサーボを動かすことのできるサーボドライバを使う話.
使うのは,Adafruitのモジュール Arduino用のライブラリはあるんだけど,微妙に修正が必要.
このブログではこれまでEdisonならではのIoTという文脈で試してきましたが,ここではお手軽なArduinoIDEを使ってみます.
Pythonで使う方法は,公式でRaspberryPi用の説明があるみたいですけど,このままで動くのかな?どうなんでしょう.

Arduino用ライブラリの導入

Arduino用のライブラリはgithubにあります.
これを落としてきて,Galileo, Edison用のArduinoIDE向けのライブラリディレクトリへ配置します.Macの場合は以下.

/Applications/Arduino\ edison.app/Contents/Resources/Java/libraries

ライブラリの修正

以下のディレクトリにあるcppファイルを修正します.

/Adafruit_PWMServoDriver/Adafruit_PWMServoDriver.cpp

Adafruit_PWMServoDriver.cpp中で以下のようになっている箇所があります.

#if defined(__AVR__)
 #define WIRE Wire
#elif defined(CORE_TEENSY) // Teensy boards
 #define WIRE Wire
#else // Arduino Due
 #define WIRE Wire1
#endif

ここの部分を全部コメントして,以下の1文のみにします.

#define WIRE Wire

これで,問題なく動作するようになります.

配線,プログラム

これについては通常のArduinoと変わらないので,Adafruit公式のチュートリアルや,サンプルプログラムを参照してください.

Intel Edisonにオンライン機械学習を行うJubatusを導入する

1. 概要

オンライン機械学習のための分散処理フレームワークJubatusをEdison上で動作させる方法について説明します.
以前のエントリで説明した, Intelの提供するIoT Analyticsでは現在,データ集計が主な機能なので,Jubatusを利用することで,Edisonが担える機能,Edisonを含めたアーキテクチャでできることが広がると思います.

対象OSは,デフォルトのYocto Linux,およびubilinuxです.このエントリではそれぞれについてのインストール方法と動作確認までを行います.ちなみにubilinuxのほうが簡単です.

Jubatusについての説明は行いませんが,公式ページにまとめてくださっているので,そちらを参照してください.以下に概要のみ引用します.

Jubatusは「分散したデータ」を「常に素早く」「深く分析」することを狙った分散基盤技術です。

Jubatusの名前の由来は、俊敏な動物であるチータの学術名からの命名で、「ユバタス」と読みます。 株式会社Preferred InfrastructureとNTTソフトウェアイノベーションセンタが共同開発した、 日本発のオープンソースプロダクトです。

最終的に全ての人にスケーラブルなオンライン機械学習フレームワークを提供することがJubatusの目標です。

Jubatus は以下の特徴を持ったオンライン機械学習向け分散処理フレームワークです。

1-1. 利用するスクリプト

どちらのOSを利用する場合も,公式で用意してくださっているインストールスクリプトを利用します.
後述しますが,デフォルトのYocotoを利用する場合,利用できるコマンドやリポジトリの問題から,別PCでの作業が必要になります.

1-2. 共通する準備

1-2-1. インストール用スクリプトの導入

Edisonの/usr以下は容量が少ないので,/home/root以下で作業をします. また,導入先は/home/root/local以下とします.このディレクトリをインストールスクリプト実行時に指定します.ディレクトリの切り方はお好きなように決めてください.

$ cd /home/root
$ mkdir local
$ git clone https://github.com/jubatus/jubatus-installer

1-2-2. インストールスクリプトへの修正点

どちらのOSを利用する場合でも共通して,最後のRPCのテストでこけます.
Jubatus開発者の1人である@kumagiさんによると,遅いCPUでビルドする場合に,タイムアウトの時間設定が短くてこけるとのことでした.
ですので,install.sh中,最後のJubatusをビルドする部分(275行目)を以下のように修正します.

# install.sh中275行目が以下のようになっている
 ./waf build --checkall && ./waf install

 # これを以下のように修正
 ./waf install

2. ubilinuxへの導入

コマンドやリポジトリDebianベースなのであまり問題ありません.
前述したインストールスクリプトへの修正と,bzip2を事前に導入しておくことが必要です.

2-1. 準備

2-1-1. 必要なパッケージの導入

bzip2を導入しておきます.

$ sudo apt-get install bzip2

2-1-2. スクリプトへの修正点

前述したwaf --checkへの修正点のみで良いです.

2-2. install

インストールスクリプト実行時にインストール先をpオプションで指定します.

$ cd jubatus-installer
$ sudo ./install.sh -p /home/root/local

ubilinuxでは以上でインストール完了です.

3. デフォルトのyocto Linux

yocto linuxはコマンドやリポジトリが残念なので,あんまりセルフビルドする環境ではなくてめんどくさいです.
以下,順番に説明していきます.

3-1. 準備(別PCでの作業)

めんどくさい原因は,shasumとtarまわりです.jubatus-installerに手を入れたり,いろいろ整備するのもめんどくさいので,wgetと解凍は別PCでやって,SFTPとか使ってEdisonへファイルを転送しましょう.

3-1-1. ファイルのダウンロード

別PCでinstallスクリプトを使ってファイルをダウンロードします.
スクリプト実行時にdオプションを使ってダウンロードだけまず行いましょう.

$ git clone https://github.com/jubatus/jubatus-installer
$ cd jubatus-installer
# dオプションをつけることでダウンロードのみを実行.
$ sudo ./install.sh -d

3-1-2. ファイルの解凍

ここまでで,jubatus-installer/download 以下に各ファイルがダウンロードされました. 次にこれらのファイルを解凍します.
install.shの中の該当箇所のみが動作するようにスクリプトを修正しても良いですし,該当箇所だけ別のスクリプトに書き出して実行しても良いです.もちろん手打ちでもいいけどちょっとだるいですね.
インストールスクリプトの中で解凍の際に必要な箇所は以下のとおりです.

#!/bin/bash
JUBATUS_VER="0.6.4"
JUBATUS_CORE_VER="0.0.5"
MSG_VER="0.5.7"
LOG4CXX_VER="0.10.0"
APR_VER="1.5.1"
APR_UTIL_VER="1.5.4"
UX_VER="0.1.9"
MECAB_VER="0.996"
IPADIC_VER="2.7.0-20070801"
ZK_VER="3.4.6"
PKG_VER="0.25"
RE2_VER="20130115"
ONIG_VER="5.9.5"
JUBATUS_MPIO_VER="0.4.5"
JUBATUS_MSGPACK_RPC_VER="0.4.4"

cd download

tar zxf msgpack-${MSG_VER}.tar.gz
tar zxf apache-log4cxx-${LOG4CXX_VER}.tar.gz
tar zxf apr-${APR_VER}.tar.gz
tar zxf apr-util-${APR_UTIL_VER}.tar.gz
tar jxf ux-${UX_VER}.tar.bz2
tar zxf mecab-${MECAB_VER}.tar.gz
tar zxf mecab-ipadic-${IPADIC_VER}.tar.gz
tar zxf zookeeper-${ZK_VER}.tar.gz
tar zxf pkg-config-${PKG_VER}.tar.gz
tar zxf onig-${ONIG_VER}.tar.gz

tar zxf jubatus_mpio-${JUBATUS_MPIO_VER}.tar.gz
tar zxf jubatus_msgpack-rpc-${JUBATUS_MSGPACK_RPC_VER}.tar.gz
tar zxf jubatus_core-${JUBATUS_CORE_VER}.tar.gz
tar zxf jubatus-${JUBATUS_VER}.tar.gz

3-1-3. ファイルの転送

scpコマンドやFTPソフトなどを使ってEdisonへファイルを転送しておきます.
jubatus-installerディレクトリごと移動させておけばよいでしょう.
なおこの際に,tarファイルやbz2ファイルはもう必要ないので削除しておいてかまいません.

3-2. 準備(Edison上での作業)

Edisonへ各ファイルを転送したら,インストールの準備を行います.

3-2-1. 必要なパッケージの導入

デフォルトのままだとiconvのヘッダが足りないためmecabのテストが正常に終了しません. 以下のパッケージを導入しておきます.
この点についても,jubatus開発者の@kumagiさんに教えて頂きました.ありがとうございます.

$ sudo opkg install eglibc-gconv-euc-jp

3-2-2. スクリプトへの修正点

次の手順3-3インストールの際にiオプションを使って,ファイルのダウンロードを実行しないようにするのですが,デフォルトのままだと解凍は行われてしまいます.
ですので,install.sh中171行目〜189行目のtarコマンドを利用する箇所をコメントアウトしておきます.

3-3. install

インストールスクリプト実行時にインストール先をubilinuxの際と同様にpオプションで指定します.
なお,ダウンロードコマンド実行時にはiオプション をつけてインストール作業のみを行うようにします.

$ cd jubatus-installer
$ sudo ./install.sh -p /home/root/local -i

インストールが完了したら,パスの設定を追加しておきます.
~/.profile などへ以下を記述します.

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/root/local/lib
export PATH=$PATH:/home/root/local/bin

以上でyocto Linuxへの導入は完了です.

4. jubatusの動作確認

導入したJubatusが動作するかどうかを,公式のサンプルにそって確かめてみます.公式のチュートリアルが充実していますから,そちらを参照すれば以下は読む必要がありません.
なお,ここではPythonクライアントでの利用について述べますが,Ruby等他のクライアントも用意されています.

4-1. jubatus-client(python)の導入方法

jubatus-installerに導入用スクリプトが存在するのでそちらを用います.なお,事前にpipを導入しておく必要があります.

4-1-1. pipの導入

python用のパッケージマネージャであるpipを導入します.また,のちほどyamlのライブラリも必要になるので導入しておきましょう.

$ wget https://bootstrap.pypa.io/get-pip.py | python
$ pip install PyYAML

4-1-2. python用ライブラリの導入

jubatus-installerのディレクトリに移動してスクリプトを実行します.

$ cd jubatus-installer
$ sudo ./install_python.sh

4-2. 公式チュートリアルにそった動作確認

Edisonへsshしてターミナルを2枚開いておきましょう.一方でサーバ,もう一方でクライアントのプログラムを実行します.
以下,公式にそい,5つの機械学習手法についての動作確認を行います.
その前に公式サンプルをクローンしておきます.

$ git clone https://github.com/jubatus/jubatus-example.git
$ cd jubatus-example

4-2-1. Classifierの動作確認

多値分類を行います.スパム判定のように,入力されたデータを複数のグループに分類します.
shogunという,歴代将軍の苗字と名前を学習して,入力された未知の名前から苗字を当てるプログラムを動かします.

サーバ側

$ cd shogun
$ jubaclassifier --configpath shogun.json

クライアント側

$ cd shogun/python
$ python shogun.py

4-2-2. Recommenderの動作確認

推薦を行います.広告やamazonのおすすめ商品推薦のように,入力データに類似するものを推薦します.
ここでは,npb_similar_playerという,野球選手のプロフィールを学習し,入力された未知の選手に類似する選手を返却するプログラムを動かします.

サーバ側

$ cd npb_similar_player
$ jubarecommender --configpath npb_similar_player.json

クライアント側

$ cd npb_similar_player/python
$ python update.py
$ python analyze.py

4-2-3. Regressionの動作確認

回帰分析を行います.株などの予測に用いられます. ここでは,入力された物件の情報から家賃を返却するプログラムを動かします.

サーバ側

$ cd rent
$ jubaregression --configpath rent.json

クライアント側

$ cd rent/python
$ python jubahomes.py -t ../dat/rent-data.csv -a ../dat/myhome.yml

4-2-4. Graphの動作確認

ネットワーク構造分析に用いられる,グラフマイニングを行います.
ここでは,電車の駅の間の最短経路を探索するプログラムを動かします.

サーバ側

$ cd train_route
$ jubagraph --configpath train_route.json

クライアント側

$ cd train_route/python
# グラフを作成
$ python create_graph.py
# 2つの駅のIDを与えて最短経路を計算
$ python search_route.py 0 144

4-2-5. Statの動作確認

異常データ検知などに用いられる,統計分析を行います.

サーバ側

$ cd trival_stat
$ jubastat --configpath stat.json

クライアント側

$ cd trival_stat/python
$ python stat.py

もっとくわしいこと

Jubatus公式HPを参照してください.

Intel EdisonをiBeacon化する.

概要

今回はNode.jsのモジュールであるnode-bleconを使ってIntel EdisonをiBeacon化してみる.

Intel EdisonでLチカした後にすることもないし積んでるわ,みたいな人はiBeacon化してリポ挿してチャリとかバッグにでもつけておけばいいんじゃないですかね+。:.゚+。:.゚+。:.゚(๑>◡╹๑)(๑╹◡<๑):.。+゚:.。+゚:.。+゚

手順

  1. EdisonのBluetoothをオンにする
  2. bluez5-devの導入
  3. bleaconを導入する
  4. コード記述とPCを使った動作確認

1. EdisonのBluetoothをオンにする

デフォルトではBluetoothがオフになっているので,オンにしておきましょう.

$ rfkill unblock bluetooth
$ hciconfig hci0 up

2. bluez5-devの導入

デフォルトだとBluetooth.hというヘッダがなくてbleaconを導入しても動作しないので,Bluetoothを扱うためのパッケージを導入します.
その前にパッケージのアップデート./etc/opkg/base-feeds.conf へ以下を追加.

# /etc/opkg/base-feeds.conf
src/gz all http://repo.opkg.net/edison/repo/all
src/gz edison http://repo.opkg.net/edison/repo/edison
src/gz core2-32 http://repo.opkg.net/edison/repo/core2-32

したらアップデートしておく.

$ opkg update
$ opkg upgrade

準備ができたらbluez5-devというパッケージをインストールする.

$ opkg install bluez5-dev

3. bleaconを導入する

Node.jsを使ってiBeaconを実現するモジュールとして,bleaconがある.今回はこれを利用するので,npmを使って導入しておく.

# テキトーにプロジェクト用ディレクトリをきる.
$ mkdir test_bleacon
$ cd test_bleacon
$ npm install bleacon

4. コード記述と動作確認

4-1. ibeaconにするためのコード

以下のコードをibeacon.jsみたいなjsファイルを作って記述する.複数のibeaconを使うようなシステムを組むときには,uuidをuuidgenコマンドとか使ってつくろう.

// ibeacon.js
var bleacon = require('bleacon');
var uuid = 'e2c56db5dffb48d2b060d0f5a71096e0';
var major = 0; // 0 - 65535
var minor = 0; // 0 - 65535
var measuredPower = -59; 

bleacon.startAdvertising(uuid, major, minor, measuredPower);

動作させる.

$ node ibeacon.js

このままだとホントに動いてるかよくわからないので,動作確認用プログラムを作る.

4-2. 動作確認用PC側プログラムの作成

bleaconはibeaconを検出するプログラムとしても使える.なので,PCにbleaconを導入して確認する.以下はPCで作業する.
PCの場合,bluez5-devを導入する必要はなく,PC側のBluetooth機能だけオンにしておく必要がある.

$ mkdir test_bleacon
$ cd test_bleacon
$ npm install bleacon

iBeaconを検出するコードをつくる.

//detect_ibeacon.js
var bleacon = require('bleacon');
bleacon.startScanning();

bleacon.on('discover', function(bleacon) {
       console.log(bleacon);
});

実行して検出できるか確認する.4-1でつくったibeaconプログラムを動作させておく.

$ node detect_ibeacon.js

4-3. 動作結果

すると,以下の様な感じで検出される.1ペアの中括弧でくくられたJSONっぽいやつが1回の検出で得られたデータ.rssiにもとづいて,Proximityが算出される.ここでは,Edisonを動かしたことによってimmediate〜nearに変化していることが分かる.

{ uuid: 'aebd140fa4884c39a5e6057f22f27ef5',
  major: 0,
  minor: 0,
  measuredPower: -59,
  rssi: -42,
  accuracy: 0.34164432192825195,
  proximity: 'immediate' }
{ uuid: 'aebd140fa4884c39a5e6057f22f27ef5',
  major: 0,
  minor: 0,
  measuredPower: -59,
  rssi: -42,
  accuracy: 0.34164432192825195,
  proximity: 'immediate' }
{ uuid: 'aebd140fa4884c39a5e6057f22f27ef5',
  major: 0,
  minor: 0,
  measuredPower: -59,
  rssi: -65,
  accuracy: 1.4609012747687342,
  proximity: 'near' }
{ uuid: 'aebd140fa4884c39a5e6057f22f27ef5',
  major: 0,
  minor: 0,
  measuredPower: -59,
  rssi: -64,
  accuracy: 1.3714628775092443,
  proximity: 'near' }

今後やりたいこと

ひと月くらい前に,BluetoothLEの仕様とか実装についてがっつり調べていたので,Central, Peripheralとして動作させる方法とか把握しておきたい.
前回のエントリで使ったIoT Analyticsも便利なんだけど,iOSAndroid端末にBLE経由でデータ収容する方法も把握しておきたいなあ〜と思ってる.