LoginSignup
5
7

More than 5 years have passed since last update.

[SensorTag] Texas Instruments の CC2650 SensorTag を試す(2)

Last updated at Posted at 2015-12-03

前回はこちらでCC2650の動作確認を行いました :smile:
[SensorTag] Texas Instruments の CC2650 SensorTag を試す

今日は温度・湿度を継続的に取得するプラグラムを書いてみたいと思います。

node、npm のバージョンはこちら

$ # node.js
$ node -v
v5.0.0
$ # npm
$ npm -v
3.3.10

続いてさくさくとプロジェクトを作っていきます。

$ # create workspace
$ mkdir sensor && cd $_
$ # initialize git
$ git init
$ # create package.json
$ npm init -y
$ # gulp
$ npm install gulp gulp-babel --save-dev
$ # ES6/2015 support
$ npm install babel-preset-es2015 --save-dev
$ # ES7 support
$ npm install babel-preset-stage-0 --save-dev
$ # CC2560 SensorTag
$ npm install sensortag --save

git用に .gitignore を作ります。

node_modules
dist

babel用に .babelrc を作ります。

{
  "presets": ["es2015", "stage-0"]
}

gulp用に gulpfile.babel.js を作ります。
(ES6の記述に慣れるために gulpfile もES6で書いています。)

gulpfile.babel.js
import gulp from 'gulp'
import babel from 'gulp-babel'

gulp.task('default', () => {
  return gulp.src('src/**.js')
    .pipe(babel())
    .pipe(gulp.dest('dist'));
});

$ npm start で プログラムを実行させたいので
package.jsonscripts"start": "gulp && node ./dist/sample.js" を追加します。

package.json
{
  "name": "sensor",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "start": "gulp && node ./dist/sample.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "sensortag": "^1.2.0"
  },
  "devDependencies": {
    "babel-preset-es2015": "^6.1.18",
    "babel-preset-stage-0": "^6.1.18",
    "gulp": "^3.9.0",
    "gulp-babel": "^6.1.1"
  }
}

ここから、メインのプログラムを書きます :santa:

src/sample.js
import SensorTag from 'sensortag'

const PERIOD = process.argv[2] || 2550;

console.log(`SensorTag を探しています...`);

SensorTag.discover(tag => {
  const sensorInfo = `[${tag.type}][${tag.id}]`;

  console.log(`${sensorInfo} SensorTag を発見しました。`);

    tag.on('disconnect', () => {
    console.log(`プログラムを終了します。`);
        process.exit(0);
    });

  console.log(`${sensorInfo} SensorTag へ接続します...`);

    tag.connectAndSetUp(error => {
    console.log(`${sensorInfo} SensorTag へ接続しました。`);
    tag.enableHumidity(error => {
      console.log(`${sensorInfo} SensorTag の情報取得周期を${PERIOD}msに変更します。`);
      tag.setHumidityPeriod(PERIOD, error => {
        console.log(`${sensorInfo} SensorTag の情報を取得します。`);
        tag.notifyHumidity(listenHumidity);
        tag.notifySimpleKey(listenSimpleKey);
      });
    });
  });

  function listenHumidity(error) {
    tag.on('humidityChange', (temperature, humidity) => {
      console.log(`${sensorInfo} 温度: ${temperature.toFixed(1)} °C`);
      console.log(`${sensorInfo} 湿度: ${humidity.toFixed(1)} %`);
    });
  }

  function listenSimpleKey(error) {
    tag.on('simpleKeyChange', (left, right) => {
      console.log(`${sensorInfo} 左: ${left} 右: ${right}`);
      if (left && right) {
        console.log(`${sensorInfo} SensorTag から切断します。`);
        tag.disconnect();
      }
    });
  }
});
$ # 動作確認
$ npm start

> sensor@1.0.0 start /Users/madobon/dev/original/sensor
> gulp && node ./dist/sample.js

[21:02:41] Requiring external module babel-core/register
[21:02:41] Using gulpfile ~/dev/original/sensor/gulpfile.babel.js
[21:02:41] Starting 'default'...
[21:02:41] Finished 'default' after 126 ms
SensorTag を探しています...
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] SensorTag を発見しました。
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] SensorTag へ接続します...
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] SensorTag へ接続しました。
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] SensorTag の情報取得周期を2550msに変更します。
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] SensorTag の情報を取得します。
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 温度: 15.2 °C
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 湿度: 84.2 %
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 温度: 15.2 °C
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 湿度: 84.2 %
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 温度: 15.2 °C
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 湿度: 84.1 %
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 温度: 15.2 °C
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 湿度: 84.1 %
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 左: false 右: true
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 左: true 右: true
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] SensorTag から切断します。
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 左: true 右: false
[cc2650][10XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX] 左: false 右: false
プログラムを終了します。

うまく動いてそうですね。
ココらへんでコミットしときます。

$ # add to index
$ git add .
$ # check status
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

    new file:   .babelrc
    new file:   .gitignore
    new file:   gulpfile.babel.js
    new file:   package.json
    new file:   src/sample.js
$ # commit files
$ git commit -m "first commit"
[master (root-commit) af380c9] first commit
 5 files changed, 82 insertions(+)
 create mode 100644 .babelrc
 create mode 100644 .gitignore
 create mode 100644 gulpfile.babel.js
 create mode 100644 package.json
 create mode 100644 src/sample.js
$ # add remote repository
$ git remote add origin https://github.com/madobon/sensor.git
$ # push origin to master
$ git push -u origin master
Counting objects: 8, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (8/8), 1.42 KiB | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To https://github.com/madobon/sensor.git
 * [new branch]      master -> master

とりあえずコミットまでしときました。

タグ v_0.0.1 もつけておきます。

$ git tag v_0.0.1
$ git push origin v_0.0.1
Total 0 (delta 0), reused 0 (delta 0)
To https://github.com/madobon/sensor.git
 * [new tag]         v_0.0.1 -> v_0.0.1

ここまでのソースはこちらにあります。
https://github.com/madobon/sensor/tree/v_0.0.1

次回はWebSocketを使って、
気温をリアルタイムに描画することをしてみたいと思います :heart_eyes:

5
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
7