前回はこちらでCC2650の動作確認を行いました
[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で書いています。)
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.json
の scripts
に "start": "gulp && node ./dist/sample.js"
を追加します。
{
"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"
}
}
ここから、メインのプログラムを書きます
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を使って、
気温をリアルタイムに描画することをしてみたいと思います