Intel EdisonでBluetoothを使う

気が付いたらハッカソン終わって一週間も経ってるわけで・・・とりあえず作業ログ的なものとしては最後のBluetoothの設定周りについてまとめておく。

Bluetoothを動かす準備

Edison自体にはBluetoothが組み込まれてるのでハード的には利用可能な状態が整っているが、ソフトウェア的には利用出来ない状態になっているので、まずはそこから解除する。 bluetoothが抑止されてるかどうかはrfkill listで確認出来る。多分、こんな感じの出力が得られるので、なんとなく抑止されてるのが分かる。

0: phy0: wlan
        Soft blocked: no
        Hard blocked: no
1: brcmfmac-wifi: wlan
        Soft blocked: no
        Hard blocked: no
2: bcm43xx Bluetooth: bluetooth
        Soft blocked: yes
        Hard blocked: no

これを解除するには、rfkill unblock bluetoothを実行すればよい。もう一度listを表示すれば、解除されてるのが分かるはず。

Bluetoothの設定をする

Bluetoothが動く準備は出来たので、設定を整える。Bluetoothの設定はbluetoothctlでやればよい。以下、bluetoothctlでの作業内容。

Bluetoothコントローラの確認

show

有効化

power on

デバイススキャン開始

scan on

スキャン終了

scann off

ペアリング開始

pair DeviceID

信頼出来るデバイスであることを登録

trust DeviceID

で、最後に接続

connect DeviceID

だいたいこんな感じでうまくいく・・・はずだったのだけど、どうも上手く接続が出来ない。 話を聞いてみると、どうやらEdisonに最初から入ってるYactoOSだとBluetoothを上手く扱えないんだそうだ orz

ここから紆余曲折あるけど、長いので後述。最終的にBeacon発射するだけで乗り切ったので、そこまでのやり方を先にまとめておく。ちなみに、Beacon発射するだけなら上記手順のpower onまで終わってれば大丈夫。

Beaconを飛ばす

Edison環境でBeaconを飛ばす場合、BLEACONというnodejsライブラリを使うと便利。普通にnpmでインストールできるので、この程度のコードでBeaconを飛ばすことが出来る(uuidとかその他の値は適当)。ハッカソン現場では特定の出力ピンのHIGH/LOWに合わせて、majorの値を1/0で切り替えることで情報送信を行った。

send bluetooth beacon from edison

なお、BLEACONを使うためには事前にbluzのライブラリインストールが必要なので、実施しておくこと。 /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

でbluez5-devがインストールされる(参考にしたサイト)。

EdisonでBluetoothを使うならubilinux

とりあえず、上の状態でBeaconを使ったやりとりは実現出来たけど、ちゃんとしたBluetooth通信ができているわけではない。これを実現するためには、ubiniluxというdebianベースのosに載せ替えた上で、ドライバ周りをゴニョゴニョする必要があるらしい。であればと、こいつのインストールには取り組んでみたけど、うまくいかなくて断念した。 自分が躓いたポイント

  • Macからインストールする場合にはファイルシステム初期化が必要らしいが、それが上手くいかなかった
  • VirtualBoxubuntu入れてそこから更新かけようとしたが、USBデバイスがうまく捕捉出来なかった

前者はIntelの方に後から話を聞いたのだが、Macからだと一工夫必要らしい。ちなみにとても質の悪いことに、Macからインストールプロセスを実行すると普通に上手く動いたように見えて、エラーは何も出ない。が、再起動すると普通にYactoOSとご対面するので、とても凹むこと間違いなし。

それではと仮想マシンとしてubuntuを用意して、そこからインストールしようとしたのだけど、これがまた上手くデバイスが捕捉出来なかった(今思うと、微妙に手順間違えてた気がしなくもないが・・・まぁ、それはそれ)。USBデバイスは基本全部捕捉してたはずなんだけど、たまにEdisonが顔出してたり出してなかったりするあたりが怪しかったし、実際Intelの方にも捕まえるの大変と言われたので、きっと難しいんだろう。

結論

ということで、Bluetoothを使うというタイトルの割にいまいちな状況を晒すだけになってしまったわけですが、まぁBluetooth使うのは大変ですよということで。 今度ちゃんとリトライしてみます、はい