JS Boardでプログラミング(2)
加速度センサの値を取得する
PCとの接続が完了したらいよいよJavaScriptコードを書きましょう。
まず、適当な場所にaccelというディレクトリを作成して移動します。
$ mkdir accel && cd $_
accelディレクトリにtesselの加速度センサ用Node.jsモジュールをインストールします。
$ npm install accel-mma84
テキストエディタを開いて、以下のコードをindex.jsという名前でaccelディレクトリ下に保存します。
var tessel = require('tessel');
var accel = require('accel-mma84').use(tessel.port['A']);
accel.on('ready', function () {
accel.on('data', function (xyz) {
console.log('x:', xyz[0].toFixed(2), 'y:', xyz[1].toFixed(2), 'z:', xyz[2].toFixed(2));
});
});
accel.on('error', function(err){ console.log('Error:', err); });
以下のコマンドで index.js をTesselメインボードに転送して実行します。
$ tessel run index.js
コマンドラインに加速度センサの値が表示されます。 メインボードの向きを変えるとx、y、z軸の値が変わっていきます。
1行目ではtesselのハードウェアインターフェースモジュールを呼び出しています。
2行目では加速度センサモジュールを呼び出し、tesselハードウェアのAポートを指定しています。
4~8行目で加速度センサのイベントを監視し、値を取得しています。加速度センサのreadyイベント発火後、dataイベントを補足することで3軸の値をconsole.logで出力しています。
httpで通信してみる
TesselメインボードはWifiチップをビルトインしているのでインターネット通信することができます。
Wi-Fiをセットアップしてhttpリクエストするプログラムを書いてみましょう。
まず、TesselメインボードのWi-Fiをセットアップします。
tessel wifi -n [SSID] -p [Password] -s [Security type]
-sオプションは省略可能です。デフォルトはwpa2です。 接続に成功するとIPアドレス、Gatewayアドレスなどが表示されます。
接続に成功したら以下のコードをwifi.jsとして保存してください。
var http = require('http');
http.get("http://httpstat.us/200", function (res) {
var bufs = [];
res.on('data', function (data) {
bufs.push(new Buffer(data));
console.log('# received', new Buffer(data).toString());
})
res.on('end', function () {
console.log('done.');
})
}).on('error', function (e) {
console.log('not ok -', e.message, 'error event')
});
wifi.jsを実行するとhttpリクエストが送信されレスポンスが表示されます。
$ tessel run wifi.js
Wi-Fiの接続処理はプログラムからも行うことができます。Wi-Fi接続からhttpリクエストを処理するコードは以下のようになります。
var http = require('http');
var wifi = require('wifi-cc3000');
var wifiSettings = {
ssid: "[SSID]",
password: "[PASS PHRASE]",
security: "wpa2", // optional
timeout: 20 // optional
};
function request() {
http.get("http://httpstat.us/200", function (res) {
var bufs = [];
res.on('data', function (data) {
bufs.push(new Buffer(data));
console.log('# received', new Buffer(data).toString());
})
res.on('end', function () {
console.log('done.');
})
}).on('error', function (e) {
console.log('not ok -', e.message, 'error event')
});
}
wifi.connect(wifiSettings, request);
[SSID]、[PASS PHRASE]には使用するお使いのWifiの情報を設定してください。`tessel wifi -d`コマンドでTesselメインボードのWifi接続を切ってからプログラムを実行してみましょう。
$ tessel wifi -d $ tessel run wifi.js

Wi-Fi接続した後、httpリクエストが送信され、レスポンスが表示されます。
注
2015年9月24日時点で、筆者のTesselメインボードを最新のファームウェアにアップデートした状態でhttp.get()がうまく動作しない現象を確認しました。詳細は不明ですが、おそらくファームウェアのバグと思われます。http.get()でENOENTエラーが発生する場合は一度 `$ tessel update -b 0.1.19` を実行してファームウェアバージョンを0.1.19に落として実行してみてください。
GPIOポートを使ってみる
Tesselメインボードは専用モジュール用のポートの他に汎用IOポート(GPIO)を備えています。GPIOポートを使うと様々な電子部品を接続することができます。
ここでは、GPIOポートにLEDを接続して光らせてみましょう。
まず、LEDのアノード(+極 長い方)をTesselメインボードの「TX/G1」と書いてあるポートに接続します。次にLEDのカソード(-極 短い方)をTesselメインボードのGNDと書いてあるポートに接続します。
接続できたら以下のコードをled.js という名前で保存しましょう。
var tessel = require('tessel');
var gpio = tessel.port['GPIO'];
gpio.digital[0].write(0); // TX/G1
var flag = true;
setInterval(function() {
if(flag === true) {
gpio.digital[0].write(1);
flag = false;
} else {
gpio.digital[0].write(0);
flag = true;
}
console.log(flag);
}, 1000);
ファイルを保存したら、実行します。
tessel run led.js
1秒間隔でLEDが点滅しはじめたでしょうか。うまくいかない場合は極の方向が間違ってないか、違うポートに接続していないかを確認してみてください。
TesselメインボードのHardware APIページに詳しい機能が紹介されています。
いかがでしたでしょうか。Tesselを使うと専用のモジュールや市販の電子部品を組み合わせてインターネットと通信ができるアプリケーションを開発できます。
プログラミング言語がJavaScriptなので、いままで組み込み系の開発を経験したことのないWeb開発系の方々にも馴染みやすいのではないでしょうか。
まとめ
JS Boardについて、現在の製品と使い方をざっと解説しました。JavaScriptで動く開発用ボードはこれ以外にもありますし、これからも続々と発売されてきそうです。
上記でご紹介したCHIRIMENのリリースもこれからですが、Tesselもすでに次バージョンのTessel2が開発中であり、プレオーダーを受け付けています。
開発用ボード以外に目を向けてみると、Leap Motion、Myo、 Pebbleといった製品はアプリケーション開発言語にJavaScriptを採用しています。
このような製品も今後増加してくると考えられるので、よりハードウェアのレイヤーに近いところでJavaScriptが使われる機会は増えてくるのかもしれません。
これからも新しいJS Boardがどんどん発表されてくるでしょう。みなさんも一緒に勉強して次世代のWeb技術を感じてみませんか?
