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技術を感じてみませんか?