センサタグを使う準備は整ったので、今回は実践編です。
※前回の記事はこちら、gattlib 等のインストールまでをまとめています。
センサタグを見つける
作成したコード
ほぼサンプルの見様見真似。
・下記のように実行する
sudo python discover_device.py
スキャンできた場合、下記のような結果が得られる
name: CC2650 SensorTag, address: XX:XX:XX:XX:XX:XX
各種センサ値を取得する
作成したコード
インスタンス生成⇒接続⇒各センサ起動⇒センサ値計測まで実行可能
#バイナリデータの変換にめっちゃ困った…。
・下記のように実行する
sudo python sensor_tag.py XX:XX:XX:XX:XX:XX
接続に成功してデータが受信できた場合、下記のような結果が得られる。
Connecting... Succeed. 53.4 % 25.4 C 18.4 C 25.2 C 1000.0 hPa 25.3 C -2.27 deg/sec -1.08 deg/sec -6.33 deg/sec 0.01171875 G 0.087890625 G 1.025390625 G -282.0 uT 138.0 uT -47.0 uT 130.36 lx Disconnecting... Succeed.
メソッド一覧
SensorTag
API名 | 機能 | 備考 |
---|---|---|
connect | 接続する | 未スキャン状態で実行するとエラー |
disconnect | 切断する | - |
check_status | 接続状態を確認する | - |
enable_humidity | 湿度センサを有効にする | Trueで有効、Falseで無効 |
enable_IRtemperature | 赤外線および周囲温度センサ を有効にする |
同上 |
enable_Barometer | 大気圧センサを有効にする | 同上 |
enable_9AxisSensor | 9 軸モーション・トラッキング・デバイス を有効にする |
同上 |
enable_Optical | 周辺光センサを有効にする | 同上 |
check_humidity | 湿度・気温を測る | 同期要求、取得失敗で実行停止 |
check_IRtemperature | 気温・物体温度を測る | 同上 |
check_Barometer | 大気圧・気温を測る | 同上 |
check_9AxisSensor | 9軸センサ値を得る | 同上(計算があっているかは微妙) |
check_Optical | 光強度を測る | 同上 |
コード利用の注意点
F/W rev:1.3.0 のセンサタグで動作確認しています。
基本的に通信は非同期で行われるため、どこかで通信パケットが抜け落ちると
相手機器側からの応答なしで実行時エラーとなってしまう。
gattlib には非同期で通知を受信するAPIも用意されているが
今回は同期要求だけでサンプルコードを作成したので割とエラーになりやすい。
#python や Glib のエラーとして吐かれる
所感と学んだこと
・python使ってバイナリいじるのは難しい。比べてC言語のキャストは便利すぎる。
・全然面白みがない記事を書くのはつらいし、たぶん見てくれる人もわずかだと思う。
・github の gist はサンプルコード乗せるのに便利なのでそのうち過去記事も更新する。
・Apache License v2 のライブラリから作ったコードは Apache License v2 でライセンスされる?
参考
Simplelink センサタグ - TI:センサタグの情報(情報が古い)
CC2650 SensorTag User's Guide - Texas Instruments Wiki:生データからの変換方法など
Apache License, Version 2.0
Apache_License_2.0 - Open Source Group Japan:和訳版