Raspberry Pi + Bluetooth
とある目的のためにRapberry PiにBluetooth ドングルを差してiPhone等とコミュニケーションさせたい。
そのために行ったことをつらつらと。
H/W、S/W構成
・Raspberry Pi 2 Model B
OS:Raspbian Jessie
Varsion:Linux raspberrypi 4.1.13-v7+ #826 SMP PREEMPT Fri Nov 13 20:19:03 GMT 2015 armv7l GNU/Linux
・Bluetooth ドングル Princeton PTM-UBT7
過去に別用途で購入(たしか安かったから)したものを引用。一応Bluetooth Low Energy(BLE)対応っぽいけど苦労したくないならPlanex辺りを購入した方が無難か。
BlueZ のインストール
まず現在bluezがインストールされていないことを確認
dpkg -l | grep blue
BluezはLinuxで一般的に使われているBluetoothスタックらしいです。apt-getでインストールできるものは古そうだったので、ビルドすることにしました。
まずいろいろ作業するためにDocuments内に作業ディレクトリを作成
cd Documents/
mkdir -p work/bluetooth
記事執筆時点(2016/01/02)での最新バージョンはどうやら5.37の模様。
https://www.kernel.org/pub/linux/bluetooth/
ここで最新のものを選択して取ってくる。
$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.37.tar.xz
取ってきたら解凍して
$ tar xvf bluez-5.37.tar
解凍したソースディレクトリ内に入り、コンフィグを設定
$ cd bluez-5.37/
$ ./configure --disable-systemd --enable-library
依存関係とかいろいろ確認されるが、自分の環境では以下のエラーが発生
checking for linux/if_alg.h... yes
checking for GLIB... no
configure: error: GLib >= 2.28 is required
GLibが存在しないらしいので、関連するものをまとめて入れ込み(そもそも先に入れておくものらしい)
$ sudo apt-get install libdbus-1-dev libdbus-glib-1-dev libglib2.0-dev libical-dev libreadline-dev libudev-dev libusb-dev make
ごちゃっと
再度コンフィグを設定すると、
$ ./configure --disable-systemd --enable-library
・
・
checking for GLIB... yes
・
・
checking that generated files are newer than configure... done
今度はうまくいったっぽい。次はビルドしてインストール。
makeで10~15分ほどかかります。
$ make
$ sudo make install
続けてmakeでインストールされないものを手動でインストール
$ sudo cp attrib/gatttool /usr/local/bin/
libbluetooth-dev の各種ヘッダファイルをビルドしたもので置き換え
$ sudo cp -ipr lib/ /usr/include/bluetooth.5.37
$ cd /usr/include
BTドングルの状況をチェック
$ lsusb
Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
Bus 001 Device 004: ID 0d8c:0014 C-Media Electronics, Inc.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Device 005にBTドングルさんがいますね。
ドングル詳細情報はID指定で
$ sudo lsusb -v -d 0a12:
状態は
$ hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:XX:XX:XX ACL MTU: 310:10 SCO MTU: 64:8
DOWN
RX bytes:580 acl:0 sco:0 events:31 errors:0
TX bytes:368 acl:0 sco:0 commands:30 errors:0
DOWNなので認識してるけど寝ている状態ですかね。
(MACアドレスはマスクしてます)
BTドングルの起動
$ sudo hciconfig hci0 up
$ hciconfig
hci0: Type: BR/EDR Bus: USB
BD Address: 00:1B:DC:XX:XX:XX ACL MTU: 310:10 SCO MTU: 64:8
UP RUNNING
RX bytes:1154 acl:0 sco:0 events:61 errors:0
TX bytes:736 acl:0 sco:0 commands:60 errors:0
UP RUNNINGになったので起動できたと思われます。
Bluetooth デバイスのスキャン
$ sudo hcitool lescan
LE Scan ...
本来ここで手持ちのBLEデバイスたちが表示されるはずが、自分は特に所有していなかったため何も表示されず(ちゃんと動いてんのかこれ、、、)
$ hcitool scan
では一応手持ちのiPhone5等が表示されました。
(あれっiPhone5ってBLE対応してないんだっけ?)
また、デバイスからRPiを発見できるように
sudo hciconfig hci0 piscan
にて設定。
参考にさせていただいたサイト
kakakikikekeのブログ: RaspberryPi に BlueZ をインストールして BLE を検知してみた
次はPCやiPhone等別デバイスとのコミュニケーションを行う予定です。
プリンストン Bluetooth USBアダプター (通信距離 25m:Ver4.0接続、10m:Ver3.0 Class2接続) PTM-UBT7
- 出版社/メーカー: プリンストン
- 発売日: 2014/10/06
- メディア: Personal Computers
- この商品を含むブログ (1件) を見る