WindowsでBLEを使いたかった VirtualBox編その1
以前AndroidやiOSではBLEを使って接続するサンプルを作りましたが、 Windowsでもやってみたい!と思ったら非常に苦労した(というかできなかった)というお話です。
はじめに
Windows8からBLEに対応しているとのことで、私の手元にあるToshiba TX/66J2BLKにWindows8.1をインストールして試してみることにしました。
上記PCは結構古いこともあってBLEは搭載しておらず、ドングルを使うことにしました。
ところが、以下のサイトによるとMicrosoftが対応しているのはオンボードでBLEアダプタが搭載されているもののみで、ドングルを使うと正しく動作しないとのこと。
実際にサンプルコードを参考に動作させてみましたが、最初のデバイスの探索部分で、デバイス数が0にしかならず断念しました。
また、Peripheral側(Slave側)の対応はWindows10からのようですね...。
Microsoft公式のものでなくとも、ドライバなど何か代替するものがないかを探してみたのですが、怪しげなものを除くとLinux, Mac, iOS, Androidの情報ぐらいであとは専用のモジュールを使っているものばかりでした。
で、「WindowsがダメならLinuxを使えばいいじゃない」という教え?に従い、仮想環境にXubuntuをインストールして、そこからBLEドングルを使ってみることにしました。
なお、Scan対象のデバイスはMacで、以前作成したPeripheralのサンプルを使用しています。
準備
仮想環境を作成します。
- VirtualBoxをWindowsにインストールして、新規仮想マシンを作成します(メモリなどのサイズは変更しても、デフォルトのままでもOKだと思います)。
- 1で作成したマシンをVirtualBoxマネージャーで選択し、詳細>設定>USBで、「USBコントローラーを有効化」にチェックを入れます。
- USBデバイスフィルターでBLEのドングルを選択します(これは不要かもしれません)。
- Xubuntu15.04(isoファイル)をインストールします(インストール中はドングルを外しておいたほうが良いかと思います)。
- ダウンロード元の設定やapt updateなどを済ませます。
Bluezのインストール
XubuntuでBLEを使用するために、Bluezをインストールします。
- リポジトリ内のBluezだとBLEが使用できないらしく(4.101でした)、ここから最新のものをダウンロードします(今回はbluez-5.31.tar.gzを使いました)。
- インストールに必要なライブラリをインストールします
sudo apt install libglib2.0-dev libdbus-1-dev libudev-dev libical-dev libreadline-dev
- 1を展開してできた「bluez-5.31」に移動します。
- 以下のコマンドを実行してインストールします。
sudo ./configure --disable-systemd sudo make sudo make install
試してみる
インストール完了後、「hciconfig -a」をターミナルで実行して、エラーが発生しなければOKです。
Bluetoothアダプタが一つも接続されていない場合は何も表示されませんが、ドングルを指して実行してやると「hci0: Type: BR/EDR~」のようなデータが表示されると思います。
データの中に「UP RUNNING PSCAN」と書かれていることを確認し(参考サイトを参考)、「sudo hcitool lescan」を実行します。
MacのPeripheralアプリを実行してやると、そのIDが表示されるはずです。
あとはnobleなどを使ってデータを受け渡ししたりできるのでは、と思います(この辺りは次回以降)。
失敗
最初はVagrantを使って実行していたのですが、何故かインストール後も「hciconfig」を実行すると、「Can't open HCI socket: Address family not supported by protocol」というエラーが発生し、うまく動作させられませんでした。
ここ から入手したUbuntu ServerのBoxを使用していたのですが、何か不足しているパッケージやライブラリがあったのかもしれません。
PCのスペックの問題もありますが結構動作が重いので、これも後で解決したいところです。