Tessel で遊ぶ シリーズTesselで遊ぶ:気候モジュールのサンプルコードを動かしてみる
前回のTesselで遊ぶ:HELLO, (PHYSICAL) WORLD!でTesselの概要をなんとなく理解し、動作させる環境を用意しました。今回は気候センサモジュールをつなげてサンプルコードを動かしてみたいと思います。
モジュールの接続について
モジュールの接続には注意点があります。モジュールポートは4つあり、それぞれA,B,C,Dとポート名が付いています。ポートを介したモジュールへのアクセスはJavascriptで指定することができます。モジュールを接続する際、モジュールの向き(裏表)と接続の際にはMicro-USBを抜いて電源が入っていない状態にしてください。
モジュールの向きはTesselメインボードとモジュールの裏面に書かれているTesselのロゴマークが同じ向きにあるよう接続します。今回はサンプルの通りにモジュールポートAを使います。
気候センサを動かしてみる
今回はわかりやすそうな気候センサのサンプルを動かしてみます。気候モジュールをモジュールポートAに接続し、PCとMicro−USBケーブルで接続します。
接続が終わったら前回作成したサンプルディレクトリの中に今回のサンプルを作るためのディレクトリを作ります。
$ mkdir climate
$ cd climate
nodeモジュールのインストール
ドキュメントにあるとおり、気候センサのセンサには種類があり種類によって使用するnodeモジュールが異なります。モジュールの基板の裏側を確認しclimate-si7020
かclimate-si7005
かを確認します。私の購入したモジュールはclimate-si7020
でした。以下のコマンドでnodeモジュールをインストールします。
$ npm install climate-si7020
npm WARN package.json start.tessel@1.0.0 No description
npm WARN package.json start.tessel@1.0.0 No repository field.
npm WARN package.json start.tessel@1.0.0 No README data
climate-si7020@0.1.1 node_modules/climate-si7020
一階層上のディレクトリにnode_modules
というフォルダが作られそこにnodeモジュールがインストールされます。
サンプルコードを動かす
サンプルコードを動かしてみます。先ほど作成したclimate
フォルダにclimate.js
というファイルを作ります。公式のページに記載されているコードはclimate-si7005
向けに書かれているため、nodeモジュールを読み込んでいる部分を書き換えてやる必要があります。該当箇所はvar climatelib = require('climate-si7005');
とconsole.log('Connected to si7005');
です。
// Any copyright is dedicated to the Public Domain.
// http://creativecommons.org/publicdomain/zero/1.0/
/*********************************************
This basic climate example logs a stream
of temperature and humidity to the console.
*********************************************/
var tessel = require('tessel');
// if you're using a si7020 replace this lib with climate-si7020
var climatelib = require('climate-si7020');
var climate = climatelib.use(tessel.port['A']);
climate.on('ready', function () {
console.log('Connected to si7020');
// Loop forever
setImmediate(function loop () {
climate.readTemperature('f', function (err, temp) {
climate.readHumidity(function (err, humid) {
console.log('Degrees:', temp.toFixed(4) + 'F', 'Humidity:', humid.toFixed(4) + '%RH');
setTimeout(loop, 300);
});
});
});
});
climate.on('error', function(err) {
console.log('error connecting module', err);
});
サンプルを実行する
サンプルを実行するとTerminalに温度(華氏)と湿度のログが流れます。
$ tessel run climate.js
TESSEL! Connected to TM-00-04-f000da30-00714741-323565c2.
INFO Bundling directory /Users/nukos/Projects/start.tessel
INFO Deploying bundle (37.50 KB)...
INFO Running script...
Connected to si7020
Degrees: 85.9916F Humidity: 33.7987%RH
Degrees: 85.9530F Humidity: 33.7987%RH
Degrees: 85.9337F Humidity: 33.7758%RH
Degrees: 85.9916F Humidity: 33.7758%RH
Degrees: 85.9723F Humidity: 33.7835%RH
Degrees: 85.9916F Humidity: 33.7835%RH
Degrees: 85.9916F Humidity: 33.7835%RH
Degrees: 85.9723F
は温度(華氏:F)、Humidity: 33.7835%RH
は相対湿度です。華氏(°F)を摂氏(°C)にするには°C = (5 / 9) * (°F - 32)
の計算式で求められます。サンプルコードを以下のように摂氏を求めて変数に代入しログを出力するように変更します。
climate.readHumidity(function (err, humid) {
var c = (5 / 9) * (temp - 32);
console.log('Degrees(c):', c.toFixed(2) + 'C');
console.log('Degrees:', temp.toFixed(4) + 'F', 'Humidity:', humid.toFixed(4) + '%RH');
setTimeout(loop, 300);
});
$ tessel run climate.js
TESSEL! Connected to TM-00-04-f000da30-00714741-323565c2.
INFO Bundling directory /Users/ryuichi/Projects/start.tessel
INFO Deploying bundle (37.50 KB)...
INFO Running script...
Connected to si7020
Degrees(c): 30.06C
Degrees(f): 86.1074F Humidity: 32.8298%RH
Degrees(c): 30.08C
Degrees(f): 86.1460F Humidity: 32.8298%RH
このように摂氏で温度を取得できるようになりました。体感の室温とはかなり異なりますね。この点の違いについては追々勉強するとしてこれでモジュールを使うことができました。
今回はここまで。次回はチュートリアルの通りにWi-FIに接続してみたいと思います。
参考
シリーズ
- Tesselで遊ぶ:HELLO, (PHYSICAL) WORLD!
- Tesselで遊ぶ:気候モジュールのサンプルコードを動かしてみる
- Tesselで遊ぶ:Wi-Fiにつないでみる
- Tesselで遊ぶ:主なコマンドとスクリプトをフラッシュメモリへ書き込む
- Tesselで遊ぶ:Tesselからツイートできなかった話