読者です 読者をやめる 読者になる 読者になる

もみあげあしめ

組み込みとかIoTとか、いろいろ

センサタグ(CC2650STK) を使う 実践編

BLE BlueZ IoT Python Raspberry Pi

センサタグを使う準備は整ったので、今回は実践編です。

f:id:shima_nigoro:20160504124408p:plain:w300

※前回の記事はこちら、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 光強度を測る 同上
DiscoverDevice
API 機能 備考
GetDeviceList アドバタイズ状態の機器を探す MACアドレスも取得する

コード利用の注意点

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:和訳版