EdisonでBluetooth通信を試してみました。
Edisonでは、BlueZというオープンソースのBluetoothプロトコルスタックが使用されています。
とりあえず今回は、EdisonにBluetoothキーボードを接続して入力を確認するところまでやった。
EdisonのBluetoothの設定などは、下記リンクのUserGuideに書かれています。
http://www.intel.com/support/edison/sb/CS-035381.htm
【試した環境】
Release2.1(weekly-159)
Bluetoothを有効にする
標準ではリブート後、Bluetooth(Chipset BCM43340)が無効になっているので、有効にしてあげる必要があります。
切り替えにはrfkillコマンドを使用します。
rfkill unblock bluetooth //有効にする rfkill block bluetooth //無効にする
rfkill listでhci0:Bluetoothが表示されれば有効になっています。
Bluetooth制御
Bluetooth制御には、bluetoothctlというユーティリティーツールが用意されています。
デバイスの検索
Edisonをマスタ、RN42をスレーブ(Bluetoothキーボード)としています。
デバイスの探索は、scanコマンドで行います。
[bluetooth]# scan on //探索開始 [bluetooth]# scan off //探索停止
上記の例だと、RN42(RNBT-E3FE)と近くにあったスマホ(SC-04F)を発見しています。
発見したデバイスの情報はinfoコマンドで確認できます。
[bluetooth]# devices //デバイスの一覧表示 [bluetooth]# info <dev> //デバイス情報の表示
ペアリング
次にペアリングです。
初めにagent?をセットする必要があるようです。
※いまいち理解できてないです
[bluetooth]# agent DisplayYesNo [bluetooth]# default-agent
設定の種類は下記5パターンあるようです。
KeyboardDisplay //? KeyboardOnly //? DisplayOnly //? DisplayYesNo //ペアリングの時、PINが表示されYES/NOを選択する NoInputNoOutput //?
ペアリングはpairコマンドで行います。
[bluetooth]# pair <dev>
デバイスと接続
ペアリング済みのデバイスと接続します。
[bluetooth]# connect <dev>
これでデバイスとの接続が完了しました。
動くか確かめる
早速ちゃんと通信できているか確かめてみます。
確認に使用したのは、evtestです。
これをEdisonにgitで落としてきてビルドしました。
evtestツールについて詳しくは調べていませんが、インプットイベントをモニタするツールのようです。
実行すると下記のような画面が表示されます。
/dev/input/event2がRN42(RNBT-E3FD)になっていることが確認できます。
RN42側(正確にはRN42とシリアル接続したPC)のキーボードを操作すると、Edison側でキーイベントが受信できていることが確認できました。
あとがき
Bluetoothの基本的な使い方は解ったかな。
始めはGearLiveを繋げようとしたんですが、何回やってもデバイス探索で発見出来ず。
調べてみるとAndroid Wearは1つの端末としかペアリング出来ないみたいです。
他の端末に変える場合はAndroid Wearを一旦初期化しないといけないらしく…めんどくさい。