Bluetoothを使ったIoT開発の課題

IoTプロジェクトにおいては、何らかのセンサーとデバイスを組み合わせるかと思います。その際、センサーとデバイス間の通信をどう行うかは問題です。一番基本的なのはGPIOやI2Cと直接接続するもの、USBなどになるでしょう。そんな中、一つの選択肢と挙げられるのがBluetoothです。

Bluetoothは少し離れた距離でも使える便利な技術ですが、問題も多々あります。この記事ではそんなBluetoothを使った際の課題について解説します。

Bluetoothはバージョンがある

現在最新のBluetoothはバージョン5.1となっています。Bluetooth 5.1では方向検知機能が追加されています。これによって紛失物を探す際などに、どの方向にあるのかが分かるようになります。これまでは電波強度と近接距離情報しか遅れませんでしたので、新しい可能性を生み出します。

他にもバージョンとしては3、4、4.1、4.2、5とあります。それぞれバージョンが上がるのに合わせて距離や信頼性、再接続、省電力化などの改善が行われてきました。基本的には後方互換性があるようですが、相性などもあります。デバイスとセンサーのBluetoothバージョンは必ず確認が必要です。例えばバージョン5.1のセンサーを見込んで開発していたのに、デバイス側のBluetoothが5までしか対応していなかったら情報が欠損してしまう可能性があるでしょう。

BluetoothとBLEの違い

BLEはBluetooth Low Energyの略です。Bluetooth 4から登場した新しい規格です。特に消費電力を抑えたBluetooth規格になり、ウェアラブルやIoTでの利用を想定しています。速度は遅く、チャンネル数は少なく、距離も短く、そしてネゴシエーションにかかる時間を減らすことで低消費電力化を実現しています。実質的に使えるのは5mくらいの距離ですが、Bluetooth 5では400m(125kbps)となっています(via Bluetooth Low Energy – Wikipedia

一般的にIoTプロジェクトで使われるのはBLEになるでしょう。そのBLEでも二つの使い方があります。

ビーコン

BLEデバイスの近くにいったら何か合図(スマートフォンの通知など)を出すものです。この場合、BLEデバイスはブロードキャストという方式をとっています。BLEデバイスは自分がどのデバイスであるかという情報だけを出し続けます。その信号を受け取った端末(スマートフォンなど)が、近接距離情報を使って処理を行います。BLEデバイスと何か情報をやり取りすることはありません。BLEデバイスがインターネットに接続することもできませんので、ブロードキャストを受け取った端末側でネットワークに接続する必要があります。BLEデバイス側ではデバイスとの距離であったり、どの端末が近くに来たかといった情報は受け取れません。

ビーコンはとてもシンプルな仕組みであり、BLEデバイスと端末を繋げる必要がないという利点があります。不特定多数の端末に情報を配信するのに役立ちます。

ペアリング

BLEデバイスと端末とを繋げてデータを送受信する方式です。センサーなどからデータを受け取る際にはあらかじめペアリングする必要があります。温度センサーや湿度センサーなどがBLEで提供されている場合、受け取る端末と接続した上で利用します。ペアリングすることでお互いのデバイスの情報を持ち合うことでセキュアに情報を通信できるようになります。いわば暗号鍵を共有することで安全に情報をやり取りできるようになります。

問題はこのペアリングの処理にあります。スマートフォンなどでBluetoothデバイスに接続する場合、ペアリングはOS側で行ってくれます。そのため開発者として苦労することは殆どないでしょう。しかしRaspberry Piなどを使って自分で開発を行う場合、この処理を自分で書かなければなりません。そして、ペアリングに関する仕様は特に決まっておらず、デバイスによって異なります。

例えばあるセンサーは起動すると、ペアリングに関係するアドバタイジングパケットを数分間発信します。しかし数分間の間にコネクションリクエストがこないとスリープ状態になってしまいます。遠隔地にあるセンサーでこの状態になると問題です。センサーの電源を入れ直さないといけません。一旦接続が開始されても恒久的に問題ないという訳では決してありません。何らかの原因によってペアリングが切れてしまうことがあります。その際の再接続に関する問題もあります。

プログラミング言語について

Python3でプログラミングを行う場合にはPyBluezが選択肢になるでしょう。Node.jsの方がBluetooth周りではnoble-deviceなど充実したライブラリがあります。Node.jsの方がイベント駆動が書き方ができるので、分かりやすい印象があります。

まとめ

BluetoothやBLEをIoTプロジェクトに用いることで無線によるセンサーの配置が可能になり、自由度は高くなります。しかしペアリングや通信などでトラブルが多いのも事実です。個人ユースであれば十分な品質(時々電源を入れて通信する程度であったり、湿気や温度の問題が少ない環境下など)であってもビジネスユースでは様々な環境に置かれることもあります。センサーの品質には十分配慮した上で選定してください。

]]>

上部へスクロール