Bluetooth 4.0 (BLE) アダプタをUbuntuで使う

スマートホームに欲しい無線規格の一つがBluetooth Low Energy (BLE)です。今回は、Homebridge

diysmarthome.hatenablog.com

をインストールしたUbuntuサーバに、BLE対応USBアダプタを取り付けました。今回は動作確認するところまで行います。この先で設定をすれば、例えばBLEで動作するSwitch BotのアダプタをApple HomeKitから使えるようになります。

Bletooth Low Energy (BLE)

Bluetoothはご存知の通り、マウス、キーボード、スピーカー、ヘッドフォンなどを、スマホやPCに接続する無線規格として誕生しました。USBケーブルを無線化するのが当初の目的だったので、到達距離も10mくらいです。その上、そこそこの転送速度を達成するため、ある程度の電力を使用します。転送データ量が僅少で、ボタン電池で動かすスマートホームのセンサ類、スイッチ類などをコントロールするには不向きでした。そこで、データ転送速度は遅くて構わないけど、ひたすら省電力な無線規格としては、長らくZigBeeが使われてました。ただ、国内ではあまり流行ってない印象です。国内で使えるZigBee製品には、例えばIKEAの無線スイッチ、電球、ロールカーテンなどがあります。

そんな中で、BluetoothにもZigBeeのような用途を担わせるべく、Bluetooth 4.0から追加されたのが、Bluetooth Low Energy (Bluetooth LEもしくはBLE)という規格です。Bluetooth とBLEには互換性は無く、別物と言って良い関係なのですが、名前が紛らわしいです。なので、従来のBluetoothBluetooth Classicと呼んで区別することもあるようです。流行していたJavaにあやかって、JavaScriptという名前をつけてしまった状態に近いかもしれないです。

とはいえ、Bluetoothを搭載したらもれなくBLEが付いてくるわけなので、今後はZigBeeよりも普及していくように思います。これからsmart homeを構成するならば、コンピュータ環境をBLEにも対応させておきたいところです。

サーバーコンピュータ

Homebridgeなどのスマートホームサーバを動かすコンピュータには、小型で省電力なRaspberry Piが適していると思います。BLEに関しても、Raspberry Pi 3以降ならば搭載しているのですぐに利用できます。

普通のパソコン(PC-ATX規格のインテルマシン)にUbuntuなどのLinux OSを入れてスマートホームサーバにするのも良いです。最近はRaspberry Piが極端な品不足なので、破格で入手可能な古い小型省電力デスクトップPCを入手して、Linuxマシンにするのも良いと思います。使っていない古いデスクトップコンピュータならばその辺に転がっている、という人も多いと思います。電気代も、計算してみるとそれほど違いはありません。そこで、捨てられていた初代Intel NUCであるDC3217IYEに、Ubuntu Server 22.04 LTSをインストールした環境で、BLEが使えるようにします。

Ubuntuで使えるBLE

どんな周辺機器もWindowsならサポートされてますが、Linuxで使うには互換性に気をつける必要があります。コンピュータにすでにBLEが搭載されていても、それをLinuxで使えるように設定することが困難な場合もあります。今回も実は、手元にあったBluetooth 5.0アダプタを活用しようとしましたが、挫折しました。それで、定評のあるアダプタに買い直すことにしました。CSRのチップを使用したBluetoothアダプタは、Linuxで動作実績が多数報告されてます。そんな中から、安価で入手容易なものを探して、プリンストンのアダプタを選びました。4.0なのでBLEにも対応してます。

Ubuntuとの互換性も高く、箱から出してそのまま(OOB)挿すだけで使えました。

無線USBアダプタは、アンテナが極小で、パソコンの金属筐体で遮蔽されて、さらにはマザーボードなどからの電磁気ノイズの影響を受けやすいです。そこで、USB延長ケーブルを使って、コンピュータ本体から離した場所にBluetoothアダプタを置けるようにしました。

Raspberry PiのBLEも(WiFiもそうですが)基板の上の配線でアンテナを作っているので、感度が悪くノイズを拾いやすいようで、BLEの動作が不安定です。Raspberry Piを使っていた時には、数回に1度くらいの頻度でBLE操作を失敗していました。今回の構成では、USB延長ケーブルを使い30cmくらい離したことで、BLE接続が安定化しました。

動作確認する

Ubuntuから、lsusbするとUSB機器の一覧が出ます。このBluetoothアダプタをUSB端子に接続すると、この一覧の中にCSRのチップが見えるようになりました。

$ lsusb
Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)

(他にもデバイスが現れましたがここでは省略しました)

Bluetoothドライバが正しく動いていれば、hciconfig -aコマンドで確認できます。

$ hciconfig -a
hci0:	Type: Primary  Bus: USB
	BD Address: XX:XX:XX:XX:XX:XX  ACL MTU: 310:10  SCO MTU: 64:8
	UP RUNNING 
	RX bytes:3144801 acl:16 sco:0 events:108760 errors:0
	TX bytes:37663 acl:13 sco:0 commands:5619 errors:0
	Features: 0xff 0xff 0x8f 0xfe 0xdb 0xff 0x5b 0x87
	Packet type: DM1 DM3 DM5 DH1 DH3 DH5 HV1 HV2 HV3 
	Link policy: RSWITCH HOLD SNIFF PARK 
	Link mode: SLAVE ACCEPT 
	Name: ''
	Class: 0x000104
	Service Classes: Unspecified
	Device Class: Computer, Desktop workstation
	HCI Version: 4.0 (0x6)  Revision: 0x22bb
	LMP Version: 4.0 (0x6)  Subversion: 0x22bb
	Manufacturer: Cambridge Silicon Radio (10)

ちゃんと動作していれば、bluetoothctlコマンド(sudo apt -y install bluetooth bluezでインストールしました)の中で、scan onなどすると他のデバイスを探してくれます。

$ bluetoothctl
[bluetooth]# scan on
Discovery started
[CHG] Controller XX:XX:XX:XX:XX:XX Discovering: yes
[NEW] Device XX:XX:XX:XX:XX:XX iPhone

こんな感じで動作を確認できます。もしBluetoothドライバが機能していない状態だと、

No Default controller available

のようなメッセージで止まってしまいます。このリストの中に、使用予定のSwitch BotMACアドレスが見えたので、一安心しました。次回は、Switch BotアダプタをHomeKitから使えるように設定します。