はじめに
前回の記事で、テキサス・インスツルメンツ社のSensorTag CC2650について、少し触れました。本記事では、bluez-dbusを使用して、CC2650から各種センサーデータを取得するために作成したJavaライブラリcc2650-driverの概要を紹介します。といっても、Githubの内容そのままです。実装の詳細や使い方のサンプルは、Githubのコードを参照して下さい。
CC2650のセンサーデータ
CC2650は、ボタン電池のCR2032で駆動するBLEセンサーデバイスです。cc2650-driverでは、以下のデータを取得するように作成しました。
- システム情報
- ファームウェアバージョン
- バッテリーレベル
- センサーデータ
- 物体温度 / 周囲温度
- 湿度
- 気圧
- 照度
- 運動(角速度 / 加速度 / 磁気)
ファームウェアバージョンを取得する理由は、バッテリーレベルが1.30以降でサポートされており、バッテリーレベルの取得の可否を判断するためです。このために、バッテリーレベルを取得する機能をbluez-dbusにPRして、マージしてもらいました。また、センサーデータの取得には、次の方式に対応しています。
- 直接読み出し
- 通知(Notification)
CC2650の場合、通知方式で指定できる最大の時間間隔は2550 msecとかなり短いです。これが使い物になるかどうかは、用途次第と思います。わたしは、これら環境情報をcrontabスタイルのスケジュールで、例えば1分間隔で取得することを考えているので、通知方式ではなく直接読み出し方式で使用しています。
更に、CC2650には通知方式の一機能として、Wake On Motionがあります。これは、揺れを検知すると、指定した通知の時間間隔で、運動のセンサーデータを10秒間、送信することができます。これを利用して、例えば動きを想定していない箇所にCC2650を貼り付けて、万一の動きを検知することができます。cc2650-driverは、Wake On Motionにも対応しています。
CC2650で気付いたこと
CC2650はボタン電池駆動ですが、どれ位の期間、連続稼動できるかは良く分かりません。経験的には、バッテリーレベルが60位になると使用できなくなりました。なので、このバッテリーレベルという指標は、バッテリーの残量、というよりも、電圧に関連した何らかの指標なのではと推測しています。
サンプルコード
**cc2650-driver**の処理の肝は、bluetooth-scannerと同様に、dbus-javaが提供するAbstractPropertiesChangedHandler.java
をextends
したクラスを用意して、public void handle(PropertiesChanged properties)
を実装することです。詳細は、Githubのコードを参照して下さい。cc2650-driverを使用した以下のサンプルコードをクラスファイルに含めておきました。
- CC2650Driver#testRead()
- CC2650Driver#testNotification()
- CC2650Driver#testWakeOnMotion()
一連の記事
このシリーズは、以下の記事から構成されます。
- 動機とコンセプト
-
Bluetooth LEアドバタイズ信号をJavaでキャッチする(Bluetooth LE / bluez-dbus)
関連するGithubはこちら。 -
TI SensorTag CC2650から温度/湿度/照度などをJavaで取得する(Bluetooth LE / bluez-dbus)(今回)
関連するGithubはこちら。 -
MH-Z19BからCO2濃度をJavaで取得する(シリアル通信 / jSerialComm)
関連するGithubはこちら。 -
PPD42NSからPM2.5濃度をJavaで取得する(GPIO / Pi4J)
関連するGithubはこちら。 -
産業オートメーション機器の稼動情報をJavaで取得する(OPC-UA / Eclipse Milo)
関連するGithubはこちら。 -
簡易ツールにまとめる
関連するGithubはこちら。 - 後記
追記
[2019.11.16]
簡易ツールの最新情報は、こちらをご参照下さい。