Raspberry Pi 3 Model BでSensorTag CC2650STKからデータを取ってみたときのメモ。

SensorTag CC2650STK

光、デジタル・マイク、磁気センサ、湿度、圧力、加速度計、ジャイロスコープ、磁力計、物体の温度、周囲温度が測れる10個のセンサが付いています。BLEで接続してセンサのデータを取ることができます。どんな環境かわからないですがコイン・セル・バッテリ1個で数年間の連続動作を実現できるらしいです。

Texas Instrumentsのサイトかサードパーティのショップから購入することができます。

TIから購入してCC2650STKが$35.99でした。配送に2週間くらいかかったので急ぐ人は日本の代理店で購入したほうが良いかもしれません。

sensortag.png

スマホに繋ぐ

Raspberry Piに繋ぐ前にTIが出しているアプリからSensorTagに接続してみる。Simplelink StarterというアプリをインストールすればSensorTagの電源ボタンを押すことで接続ができました。詳細は調べてないのでよくわからないですがSimplelink SensorTagは繋がらなかったです。

sensortag-app.png

こんな感じでデータをスマホに送ってグラフを見ることができます。

Raspberry Piから繋ぐ

Raspberry Pi 3 Model BからSensorTagに接続してみます。

インストールしているRaspbianの情報は次の通り。

root@raspberrypi:~# cat /etc/os-release
PRETTY_NAME="Raspbian GNU/Linux 8 (jessie)"
NAME="Raspbian GNU/Linux"
VERSION_ID="8"
VERSION="8 (jessie)"
ID=raspbian
ID_LIKE=debian
HOME_URL="http://www.raspbian.org/"
SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

最初からインストールされているbluezを使えば繋げられます。

root@raspberrypi:~# dpkg -l bluez
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name Version Architecture Description
+++-==============-============-============-=================================
ii bluez 5.23-2+rpi2 armhf Bluetooth tools and daemons

Raspberry Pi 3 Model BはBLEがついているので起動したらRUNNINGになっていることが確認できます。

root@raspberrypi:~# hciconfig
hci0: Type: BR/EDR Bus: UART
BD Address: B8:27:EB:55:B9:2B ACL MTU: 1021:8 SCO MTU: 64:1
UP RUNNING
RX bytes:952 acl:0 sco:0 events:52 errors:0
TX bytes:1555 acl:0 sco:0 commands:45 errors:0

RUNNINGとなっていればOK。起動していなければhciconfig hci0 upで起動します。
コマンドを実行してSrnsorTagのボタンをポチッとすると一覧にIDが表示されるので確認します。

root@raspberrypi:~# hcitool lescan
LE Scan ...
24:71:XX:XX:XX:XX (unknown)
24:71:XX:XX:XX:XX CC2650 SensorTag

正しくスキャン出来ると上記の様にIDが表示されることが確認できます。

試しに表示されたIDに接続してみます。

root@raspberrypi:~#  hcitool lecc 24:71:XX:XX:XX:XX
Connection handle 64

hcidumpしてセンサの値を取り出すのが面倒なので公開されているツールを使います。
GitHubでSensorTagを検索するといくつか見つかったので一番星の多いnode-sensortagを使ってみます。

node-sensortag

一通り必要そうなものをインストールします。

root@raspberrypi:~# apt-get install git nodejs npm

aptを使ってインストールするとnodejsコマンドになっているのでnodeにシンボリックリンクをはっておきます。

root@raspberrypi:~# node -v
-su: node: command not found
root@raspberrypi:~# ln -s `which nodejs` /usr/local/bin/node
root@raspberrypi:~# git --version
git version 2.1.4
root@raspberrypi:~# node -v
v0.10.29
root@raspberrypi:~# npm -v
1.4.21

インストールできているか確認したらnode-sensortagをインストールします。

root@raspberrypi:~# apt-get install bluetooth bluez libbluetooth-dev libudev-dev
root@raspberrypi:~# npm install node-gyp noble
root@raspberrypi:~# npm install sensortag

node-sensortagのtest.jsを参考に温度を取得してみる。

root@raspberrypi:~# vi sample.js
var async = require('async');
var SensorTag = require('sensortag');

SensorTag.discover(function(sensorTag) {
sensorTag.on('disconnect', function() {
process.exit(0);
});

async.series([
function(callback) {
sensorTag.connectAndSetUp(callback);
},
function(callback) {
sensorTag.enableIrTemperature(callback);
},
function(callback) {
setTimeout(callback, 2000);
},
function(callback) {
sensorTag.readIrTemperature(function(error, objectTemperature, ambientTemperature) {
console.log("temp: " + ambientTemperature);
callback();
});
},
function(callback) {
sensorTag.disableIrTemperature(callback);
},
function(callback) {
sensorTag.disconnect(callback);
}
]);
});

実行してみる。

root@raspberrypi:~# node sample.js
temp: 20.34375

3分でSleep状態になってしまうのでSleepにならないようにSensorTagに接続する必要がある。一度SleepになってしまうとSensorTagの電源ボタンを押さないと復帰しないので注意が必要です。

おわり。

参考

  1. http://www.tij.co.jp/tool/jp/cc2650stk
  2. https://github.com/sandeepmistry/node-sensortag