TI SensorTagとRasberry Piをとりあえず接続

投稿者: | 2016-09-15

概要

ニフティさんのIoTインターンにて、技術賞の賞品としていただいたSimpleLink SensorTag(CC2650STK)。インターンのデバイス担当メンターGさん曰く「難しいデバイス」であるとのこと。ここ最近はとあるネットゲームを来る日も来る日もやっていて、ようやく気分が落ち着いたのでここいらで触ってみるかといった次第です。ゲームの記事も書けたら書きたい。今回は細かい説明はなし。備忘録として運用します。というか、ブログ建てたときはそういう感じで使っていこうと思っていたんですが、ついつい熱が入りすぎますね。強制されないモノ書きって楽しいですからね。


開封

いや、まあ開封はいただいた直後にしていたのですが、改めて。
tag3

本体と一枚のシンプルな説明書。本体はラバーケースに包まれてます。

tag2

ラバーケースを取るとプラケースが。

tag1

プラケースを取って裏を見るとコイン電池。


とりあえずスマホと

本体に同梱されていた紙を見ると、1.アプリをスマホに入れて 2.SensorTagの電源を入れ 3.アプリでデバイスを検知 のわずか3ステップでSensorTagについている多くのセンサが取得している情報を可視化して見られるらしい。早速やってみましょう。

tag_app_nobody

……。

tag_app_nobody

………。

tag_app_nobody

…………。

出ねえ。
何故だろう。端末の要件を満たしてないのかと思って調べたが、そこは問題なさそう。SensorTag側で通信モードが違う(SensorTagはBluetooth Smart,6LowPan,ZigBeeの三つの規格で通信可能)かと思ってリセットかけたけど変わらず。直接ペアリングしようとしてもSensorTagが拒否るので無理。とりあえず無限に待っても無限に検出されないので辛さを感じて見送りました。使用端末はXperia Z5。何か進展があったらまた記事でも書きたいです。


Raspberry Piととりあえず繋ぐ

スマホの方は一旦諦めてラズパイとの接続をテストします。まずbluezをインストール。

$ apt-get install libusb-dev libdbus-1-dev libglib2.0-dev libudev-dev libical-dev libreadline6-dev
$ wget http://www.kernel.org/pub/linux/bluetooth/bluez-5.41.tar.xz
$ tar xvJf bluez-5.41.tar.xz
$ cd bluez-5.41
$ ./configure --disable-systemd --enable-library
$ make

次に

$ sudo hcitool lescan

でBluetooth機器のMACアドレスを取得。

LE Scan ...
xx:xx:xx:xx:xx:xx pekepeke
xx:xx:xx:xx:xx:xx chomechome
xx:xx:xx:xx:xx:xx gorigori
xx:xx:xx:xx:xx:xx CC2650 SensorTag

出力はこんな感じなのでSensorTagを検出したらcontrol + c。で、

$ sudo gatttool -b SensorTagのアドレス --interactive

する。すると

[xx:xx:xx:xx:xx:xx][LE]>

となるので、connectと入力して接続、その後はセンサの値をとるなりなんなりする。ちなみにconnectする時に、hcitool leccとかで接続しっぱなしの状態だと

Error: connect: Device or resource busy (16)

とか言われて怒られます。地味〜にここで30分ぐらい詰みました。

sudo hcitool ledc コネクションハンドルナンバー

して切っときましょう。

温度センサの値をとる時の一連の流れ

[xx:xx:xx:xx:xx:xx][LE]>connect
Attempting to connect to xx:xx:xx:xx:xx:xx
Connection successful
[xx:xx:xx:xx:xx:xx][LE]> char-write-cmd 0x24 01
[xx:xx:xx:xx:xx:xx][LE]> char-read-hnd 0x21
Characteristic value/descriptor: f4 0a 3c 0e

最後の4Bの値が温度らしいです。0x24番地に01を書き込むと温度センサが起きます。00で再びスリープに。温度センサが起きてる状態で0x21番地を読み込むと温度のデータが取れるみたいです。鬼の形相CC2650 SensorTag attribute tableとにらめっこして推理した情報なので間違ってたらすみません。こういう感じでセンサを使わない時はスリープさせてるって感じで省電力を実現しているのでしょうか。面白いですね。


結果

とりあえずラズパイとつながりました。温度っぽいのも取れました。他のセンサへのアクセスはこれから調べます。記事の内容ですが、ガッツリ具合は結局今までの記事とそんなに変わらない感じでしたね。もっとざっくりまとめられる様にしたいです。PythonやNode.js向けのライブラリが提供されているらしいので、今回みたいなセンサとかのアドレスを直接指定してどうこうっていうのはやらなくていいらしいです。よかった。マジで。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です