もっふもふの電子回路

備忘録的なあれ

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

$ sudo ln -s bluetooth.5.37/ bluetooth

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等別デバイスとのコミュニケーションを行う予定です。