スマートホームで良く使われる低消費電力近距離無線規格の一つがBluetooth Low Energy (BLE)です。今回は、UbuntuをインストールしたBLE未搭載のパソコン (Intel NUC) で動かしているHomebridgeサーバ、
に、BLE USBアダプタを取り付けました。このアダプタのドライバは、一般的なLinuxディストリビューションに含まれています。なので、Raspberry Piでも動作します。
今回は動作確認するところまで行います。このアダプタを使えば、例えばBLEで動作するSwitch BotのアダプタをApple HomeKitから使えるようになります。続きは以下をご覧ください。
Bletooth Low Energy (BLE)
Bluetoothはご存知の通り、マウス、キーボード、スピーカー、ヘッドフォンなどを、スマホやPCに接続する無線規格として誕生しました。USBケーブルを無線化するのが当初の目的だったので、到達距離も10mくらいで、1対1でペアリングして使用されていました。また、そこそこの転送速度を必要とする周辺機器をサポートするため、消費電力も多いです。またメッシュ状のセンサネットワークを構成できない欠点もありました。
一般的なパソコン周辺機器と比較して、スマートホームのセンサ類、スイッチ類などが必要とするデータは、On/Offの1ビットだったり、1~2バイドの温度データだったりと、データ量が僅少です。またボタン電池などで動かす機器も多いので、低消費電力な無線が必要です。
そこで、データ転送速度は遅くて構わないけど、省電力でメッシュ構成も可能な無線規格としては、長らくZigbeeが使われてました。ただ、国内ではあまり流行ってない印象です。国内で使えるZigbee製品にはIKEAやPhilips Hueなどの製品があります。
そんな中で、BluetoothにもZigbeeのような用途を担わせるべく、Bluetooth 4.0から追加されたのが、Bluetooth Low Energy (Bluetooth LEもしくはBLE)という規格です。それまでのBluetoothとBLEには互換性は無く、別物と言って良い関係なのですが、名前が紛らわしいです。なので、従来のBluetoothはBluetooth Classicと呼んで区別することもあるようです。JavaScriptのデビュー当時、流行していたJavaにあやかって、JavaScriptという名前をつけてしまって、いまだに混同されている状態に近いかもしれないです。
ちなみに、ClassicもBLEも俗称のようです。一時期、BLEをSmart、Classic+BLEをSmart Readyと表記したこともありましたが、現在は、Bluetoothにバージョンの数字を足した表記になったようです。Bluetooth 4.0以降ならば、ClassicとBLEの両方が搭載されています。
ということで、最近のBluetoothを搭載していれば、もれなくBLEも付いています。その結果、BLEはZigbeeよりはるかに普及しています。ノートパソコン、スマホ、タブレットには、必ずBLEが付いていると考えて良いです。別途ブリッジが必要なZigbeeではなく、スマホだけで使えるBLEを使ったスマートホームデバイスもたくさんあります。代表的な国内向け製品では、SwitchBotの電池駆動製品がBLEで動作します。BLE製品に対応したHomebridgeプラグインもいくつかあり、SwitchBot製品もBLE経由で使えます。
なので、HomebridgeサーバもBLEにも対応させておきたいところです。
サーバーコンピュータ
Homebridgeなどのスマートホームサーバを動かすコンピュータには、小型で省電力なRaspberry Piが適していると思います。BLEに関しても、Raspberry Pi 3以降ならば、基板上にチップとアンテナが搭載されているのですぐに利用できます。(ただ、後述するように、特にUSB3.0を搭載したRaspberry Pi 4の場合、BLEアダプタを外付けするのが望ましいです。)
普通のパソコン(PC-ATX規格のインテルマシン)にUbuntuなどのLinux OSを入れてスマートホームサーバにすることも可能です。最近はRaspberry Piが極端な品不足なので、破格で入手可能な古い小型省電力デスクトップPCを入手して、Linuxマシンにするのも良い選択肢だと思います。使っていない古いデスクトップコンピュータならばその辺に転がっている、という人も多いと思います。こちらの記事では、捨てられていた初代Intel NUCであるDC3217IYE
に、Ubuntu Server 22.04 LTSをインストールして、Homekitをインストールしました。
Raspberry Piの代わりに汎用PCを使う場合のデメリットは、電気代が高いことです。ただ、Raspberry PiとIntel NUCとの比較では、年額500円程度の違いです。
このIntel NUCでは、無線カードがオプションで、Bluetoothが搭載されていませんでした。内部のmini PCIEソケットに装着するWiFi/Bluetoothカードも多数売られてますが、今回は、USB接続のBluetoothアダプタを使うことにしました。
Ubuntuで使えるBLE
どんな周辺機器もWindowsならサポートされてますが、Linuxで使う場合は互換性に気をつける必要があります。Windowsを前提にした市販のコンピュータに、すでにBLEが搭載されていても、それをLinuxで使えるように設定することが困難な場合もあります。
今回も実は、最初は手元にあったBluetooth 5.0規格のUSBアダプタをUbuntuで活用しようとしましたが、設定で挫折しました。それで、Linuxで使えると定評のあるアダプタに買い直すことにしました。CSR (Cambridge Silicon Radio)社のチップを使用したBluetoothアダプタは、Linuxで動作実績が多数報告されてます。(CSRは2015年にQualcommに買収されてます)CSRチップを使用したBLE製品の中から、安価で入手容易なものを探し、プリンストンのBluetoothアダプタを選びました。Bluetooth 4.0なのでBLEにも対応してます。
この製品は、Ubuntuとの互換性が高く、箱から出してそのまま(OOTBで)挿すだけで使えました。
BLEのノイズ対策
一般にUSB無線アダプタは、アンテナが極小で、パソコンの金属筐体で遮蔽されて、さらにはマザーボードなどからの電磁気ノイズの影響を受けやすいです。2.4GHz帯の無線は、USB3.0からのノイズにも影響されやすいです。その上、WiFiに比べて電波が微弱なBLEやZigbeeは、さらにノイズに弱いです。こちらに詳しい説明があります。
USB無線アダプタを、延長ケーブルを使ってRaspberry Piから離すことで、ノイズの影響を軽減できます。以下の動画は、Zigbeeでの実験ですが、延長ケーブルでRaspberry Pi 4搭載USB3.0のノイズを除去してます。
BLEでも同様の効果があります。そこで、USB延長ケーブルを使って、コンピュータ本体から離した場所にBluetoothアダプタを置くようにしました。USB3.0に限らず、コンピュータ本体は電気ノイズの塊のようなものなので、少しでも距離をおいた方が良いです。50cmくらいでも効果はあります。
延長ケーブルだけでは、位置が動いて不安定な場合、こんなUSBスタンドを使うと安定します。
Raspberry Pi 4などには、基板上にBLEチップとアンテナが搭載されています。しかしBLEのアンテナを(WiFiもそうですが)基板上のプリント配線で作っているので、感度が悪くUSB3.0などの周辺部品からのノイズを拾いやすく、動作が不安定です。なので、BLEを搭載しているRaspberry Piであっても、外部に無線USBアダプタを設置すると、動作が安定します。その場合、基板上と外付けの2系統のBLEモジュールが接続されることになります。外付けモジュールを確実に使用するためには、基板上モジュールを無効にする設定をすると良いです。
動作確認する
Ubuntuのシェルコマンドであるlsusbを使用すると、USB機器の一覧が出ます。このBluetoothアダプタをUbuntuサーバのUSB端子に接続すると、この一覧の中にCSRのチップが見えるようになりました。
$ lsusb Bus 002 Device 003: ID 0a12:0001 Cambridge Silicon Radio, Ltd Bluetooth Dongle (HCI mode)
(他にもUSBデバイスが現れますがここでは省略しました)
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でも安定して使用できます。安価で入手しやすいですので、スマートホームを構成する定番アダプタです。Raspberry Piを使う場合も、内蔵のBluetoothは使用せずに、USBアダプタを使うとノイズ面で有利です。
コメント