スマートホームに欲しい無線規格の一つがBluetooth Low Energy (BLE)です。今回は、Homebridge
をインストールした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には互換性は無く、別物と言って良い関係なのですが、名前が紛らわしいです。なので、従来のBluetoothはBluetooth 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との互換性も高く、箱から出してそのまま(OOTBで)挿すだけで使えました。
無線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 BotのMACアドレスが見えたので、一安心しました。次回は、Switch BotアダプタをHomeKitから使えるように設定します。
まとめ
CSRのチップセットを搭載したBluetooth アダプタならば、Linux系OSでそのまま使用できます。ここでは、プリンストンのUSB Bluetoothアダプタを使いました。Raspberry Piを使う場合も、内蔵のBluetoothは使用せずに、USBアダプタを使うとノイズ面で有利です。安価で入手しやすいですので、スマートホームを構成する定番アダプタです。
コメント