Raspberry PiのUSBポートに無線LANとBluetoothのドングルを直挿しても使えるだろうか?802.11b/gの無線LANとBluetoothは、同じISMバンド(2.4GHz帯)を使うので干渉するかもしれない。
次の機器を使って試してみた。無線LAN USBドングルは、すでにここで使用可能な状態にしてあり、この試験自体をすべて無線LAN経由で行った。Bluetooth USBドングルの方は、Raspberry PiのVerified Peripheralsにあることを確認してある。
使用機器 | メーカ 型式 | ICチップベンダ |
---|---|---|
無線LAN USBドングル | Planex GW-USValue-EZ | VID=0x2019 PID=0xed17 Realtek RTL8188CUS |
Bluetooth USBドングル | Planex BT-MicroEDR1X | VID=0x0a12 PID=0x0001 Cambridge Silicon Radio |
Bluetooth マウス | Microsoft Bluetooth Notebook Mouse 5000 | Infineon Technologies AG |
今回は、bluetooth パッケージだけしかインストールしなかったが必要に応じて、bluez-utils とbluemanパッケージもあわせてインストールしてもいい。20分ぐらいかかるので気長に待ちます。
$ sudo apt-get update
$ sudo apt-get install bluetooth
USBドングルが認識されていることを確認する。
$ lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 004: ID 2019:ed17 PLANEX GW-USValue-EZ 802.11n Wireless Adapter [Realtek RTL8188CUS]
Bus 001 Device 005: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
bluetoothデーモンが起動しているのを確認する。
$ /etc/init.d/bluetooth status
[ ok ] bluetooth is running.
パッケージに含まれているhcitoolを使って、スキャンする。もちろんこのときマウスのスイッチも入れておく。発見すると、機器名称とBluetoothアドレスが表示される。
$ hcitool scan
Scanning ...
7C:ED:8D:00:00:00 Microsoft Bluetooth Notebook Mouse 5000
パッケージに含まれているl2pingを使って、応答時間を計測してみる。同じテーブルの上に載せてあるのに40msecとは(><)
$ sudo l2ping -c 1 7C:ED:8D:00:00:00
Ping: 7C:ED:8D:00:00:00 from 00:1B:DC:00:00:00 (data size 44) ...
0 bytes from 7C:ED:8D:00:00:00 id 0 time 41.62ms
1 sent, 1 received, 0% loss
ここまでは、BluetoothプロトコルスタックのHCIおよびL2CAPレイヤでの接続確認だったが、とりあえずOKのようだ。次は、ペアリングである。PINコードは0000とした。
$ sudo bluez-simple-agent hci0 7C:ED:8D:00:00:00
RequestPinCode (/org/bluez/6717/hci0/dev_7C_ED_8D_00_00_00)
Enter PIN Code: 0000
Release
New device (/org/bluez/6717/hci0/dev_7C_ED_8D_00_00_00)
信頼できる装置として接続する。この手順は一度だけでよくて、リブート後も自動的に接続されるとのこと。(参考)
$ sudo bluez-test-device trusted 7C:ED:8D:00:00:00 yes
$ sudo bluez-test-input connect 7C:ED:8D:00:00:00
リブートして確かめてみる。HCIレイヤでの接続はOK。
$ hcitool con
Connections:
> ACL 7C:ED:8D:00:00:00 handle 39 state 1 lm MASTER
信号強度もまずます。
$ hcitool rssi 7C:ED:8D:00:00:00
RSSI return value: -4
Bluetoothのプロトコルスタックがいくつか起動されている。接続したマウスはHIDプロファイルのデバイスとして認識された。
$ dmesg
:
:
[ 11.090221] Bluetooth: Core ver 2.16
[ 11.325818] NET: Registered protocol family 31
[ 11.500419] Bluetooth: HCI device and connection manager initialized
[ 11.741601] Bluetooth: HCI socket layer initialized
[ 11.962391] Bluetooth: L2CAP socket layer initialized
[ 12.040185] Bluetooth: SCO socket layer initialized
[ 12.142800] Bluetooth: Generic Bluetooth USB driver ver 0.6
[ 12.234601] usbcore: registered new interface driver btusb
:
:
[ 33.899310] Bluetooth: RFCOMM TTY layer initialized
[ 33.899357] Bluetooth: RFCOMM socket layer initialized
[ 33.899372] Bluetooth: RFCOMM ver 1.11
[ 33.916660] Bluetooth: BNEP (Ethernet Emulation) ver 1.3
[ 33.916692] Bluetooth: BNEP filters: protocol multicast
:
:
[ 49.380788] Bluetooth: HIDP (Human Interface Emulation) ver 1.2
[ 49.404708] input: Microsoft Bluetooth Notebook Mouse 5000 as /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/bluetooth/hci0/hci0:41/input0
[ 49.414318] generic-bluetooth 0005:045E:0700.0001: input: BLUETOOTH HID v1.00 Mouse [Microsoft Bluetooth Notebook Mouse 5000] on 00:1B:DC:00:00:00
最後に、startxでX画面を立ち上げてBluetoothマウスが動くことを確認した。同じ周波数帯域を使いながら、その間わずか1センチ足らずであるのに、Bluetoothと無線LANは、ともかくも動いた。理想的には、やはり離した方がいいのだろうが、、、HIDプロファイルのほかにネットワークエミュレーション(BNEP)や仮想シリアルポート(RFCOMM)、ゲーム端末(joypad)も使えそうである。
$ lsmod
Module Size Used by
evdev 8682 0
joydev 9102 0
hidp 13111 0
bnep 10514 2
rfcomm 33663 10
snd_bcm2835 12808 0
snd_pcm 74834 1 snd_bcm2835
snd_page_alloc 4951 1 snd_pcm
snd_seq 52536 0
snd_seq_device 6300 1 snd_seq
snd_timer 19698 2 snd_seq,snd_pcm
snd 52489 5 snd_timer,snd_seq_device,snd_seq,snd_pcm,snd_bcm2835
btusb 11321 2
8192cu 485042 0
bluetooth 157711 24 btusb,rfcomm,bnep,hidp