ブログ

CC2650STKのセンサーデータをNode.jsで取得する

at_shota.tamura
2016年12月1日 10時45分

紹介する内容

  1. Node.js のインストール方法
  2. node-sensortag (CC2650STKの Javascriptライブラリ) のインストール方法
  3. node-sensortag を使った簡単なアプリ開発

環境

  • Armadillo-IoT ゲートウェイ G3
    • Kernel: v5.00
    • Debian: v20160920
  • CC2650STK

作業

1. Node.js のインストール

ここでは node(インタープリター) と npm(パッケージマネージャー) をインストールする方法を紹介します。

nodenpm はご存知の方も多いかと思いますが、インストール方法がいくつもあります。 ここでは筆者が一番手軽だと感じた apt で Node.js をインストールする方法を紹介します。

ただし、apt でインストールできる node, npm のバージョンは新しくありませんので、 より新しいバージョンをインストールしたい方は別の方法を検索してみてください。

apt で Node.js をインストールする

以下のコマンドを実行し、インタープリターとパッケージマネージャーをインストールしてください。

armadillo:~# apt-get update
armadillo:~# apt-get install nodejs npm

一般に Node.js のスクリプトを実行する際には node というコマンドを使いますが、 Debian パッケージでは nodenodejs になっています。

以下のコマンドで alias を作り node で Node.js のインタープリターを実行できるようにしておきましょう。

armadillo:~# ln -s `which nodejs` /usr/local/bin/node

動作確認

atmarkユーザーでログインし、sudo を付けて node が動けば問題ありません。

armadillo:~$ sudo node -v
v0.10.29

もし、atmark ユーザーが sudoers に入っていない場合は、一度 root でログインし、visudo を使って追加してください。

2. node-sensortag のインストール

CC2650STKのJavascriptライブラリnode-sensortagをインストール方法を紹介します。

  • node-sensortag: https://github.com/sandeepmistry/node-sensortag

node-sensortag をインストールするためには node-gyp と noble を先にインストールしておく必要があります

  • node-gyp: https://github.com/nodejs/node-gyp
  • noble: https://github.com/sandeepmistry/noble

作業ディレクトリを作成

はじめに、作業用ディレクトリを作成します。

armadillo:~$ mkdir sensor-test
armadillo:~$ cd sensor-test

以降の手順はすべてこの作業ディレクトの中で行います。

node-gyp のインストール

以下のコマンドで node-gyp をインストールしてください。

armadillo:~/sensor-test$ npm install node-gyp

なぜ npm install -g node-gyp のように -g オプションを付けなかったかは、 以下のNode.jsのドキュメントを参照してください。

Global vs Local installation | Node.js

https://nodejs.org/en/blog/npm/npm-1-0-global-vs-local-installation/

noble のインストール

noble をインストールするためにはいくつかのパッケージが必要です。 npm install を行う前に必要なパッケージをインストールしましょう。

armadillo:~/sensor-test$ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev python

以下のコマンドで noble をインストールしてください。

armadillo:~/sensor-test$ npm install noble

node-sensortag のインストール

以下のコマンドで node-sensortag をインストールしてください。

armadillo:~/sensor-test$ npm install sensortag

これで node-sensortag のインストールは完了です。

動作確認

正しく node-sensortag がインストールできたかを確認するためにデモアプリを実行しましょう。 デモアプリを実行するために node_modules/sensortag/ 以下で npm install を行ってください。

armadillo:~/sensor-test$ cd node_modules/sensortag/
armadillo:~/sensor-test/node_modules/sensortag$ npm install

ここではtest-cc2650-io.jsというデモアプリを実行してみます。

CC2650STKに電池を入れ、緑LEDが点滅している状態にしてください

test-cc2650-io.jsを実行すると以下のようなログが表示されます。

armadillo:~/sensor-test/node_modules/sensortag$ sudo node test-cc2650-io.js
discovered: {"id":"b0b448d75e01","type":"cc2650"}
connectAndSetUp
IO off
writeIoConfig
LED red
LED green
buzzer
IO off
disconnect
disconnected!

ログ表示と同時にLED点灯やブザー鳴動が行われます。

簡単なアプリを開発

インストール時に作成した作業ディレクトリ内で簡単なアプリを開発します。

  • アプリ仕様
    • 右スイッチが押されるとコンソールに right: down と表示され、離すと right: up と表示される
    • 左スイッチが押されるとアプリを終了する

テキストエディタなどで下記の get-switch.js を作成します。

armadillo:~/sensor-test$ ls
node_modules/
armadillo:~/sensor-test$ vim get-switch.js
  • get-switch.js
var async = require('async');
var CC2650SensorTag = require('sensortag').CC2650;

CC2650SensorTag.discover(function(sensorTag) {
  console.log('discovered: ' + sensorTag);

  sensorTag.on('simpleKeyChange', function(left, right, reedRelay) {
    if (right) {
      console.log('right: down');
    } else {
      console.log('right: up');
    }

    if (left) {
      console.log('disconnected!');
      process.exit(0);
    }
  });

  async.series([
      function(callback) {
        console.log('connectAndSetUp');
        sensorTag.connectAndSetUp(callback);
      },
      function(callback) {
        sensorTag.notifySimpleKey(callback);
        console.log('key change waiting...');
      }
    ]
  );
});

アプリでは async というライブラリを使用しているので、 実行前に npm で async をインストールしておきましょう。

armadillo:~/sensor-test$ npm install async

実行はサンプルアプリ同様に sudo を付けて実行してください。

armadillo:~/sensor-test$ sudo node get-switch.js
discovered: {"id":"b0b448d75e01","type":"cc2650"}
connectAndSetUp
key change waiting...
right: down
right: up
right: down
right: up
right: down
right: up
right: down
right: up
right: up
disconnected!