SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

特集記事

JS BoardではじめてみようJavaScript組み込みプログラミング


  • X ポスト
  • このエントリーをはてなブックマークに追加

JS Boardでプログラミング(2)

加速度センサの値を取得する

 PCとの接続が完了したらいよいよJavaScriptコードを書きましょう。

 まず、適当な場所にaccelというディレクトリを作成して移動します。

$ mkdir accel && cd $_

 accelディレクトリにtesselの加速度センサ用Node.jsモジュールをインストールします。

$ npm install accel-mma84

 テキストエディタを開いて、以下のコードをindex.jsという名前でaccelディレクトリ下に保存します。

index.js
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軸の値が変わっていきます。

index.jsを実行した
index.jsを実行した

 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として保存してください。

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
httpリクエストの様子
httpリクエストの様子

 Wi-Fiの接続処理はプログラムからも行うことができます。Wi-Fi接続からhttpリクエストを処理するコードは以下のようになります。

Wi-Fiの接続処理
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 という名前で保存しましょう。

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ページに詳しい機能が紹介されています。

LEDが点滅している
LEDが点滅している

 いかがでしたでしょうか。Tesselを使うと専用のモジュールや市販の電子部品を組み合わせてインターネットと通信ができるアプリケーションを開発できます。

 プログラミング言語がJavaScriptなので、いままで組み込み系の開発を経験したことのないWeb開発系の方々にも馴染みやすいのではないでしょうか。

まとめ

 JS Boardについて、現在の製品と使い方をざっと解説しました。JavaScriptで動く開発用ボードはこれ以外にもありますし、これからも続々と発売されてきそうです。

 上記でご紹介したCHIRIMENのリリースもこれからですが、Tesselもすでに次バージョンのTessel2が開発中であり、プレオーダーを受け付けています。

 開発用ボード以外に目を向けてみると、Leap MotionMyoPebbleといった製品はアプリケーション開発言語にJavaScriptを採用しています。

 このような製品も今後増加してくると考えられるので、よりハードウェアのレイヤーに近いところでJavaScriptが使われる機会は増えてくるのかもしれません。

 これからも新しいJS Boardがどんどん発表されてくるでしょう。みなさんも一緒に勉強して次世代のWeb技術を感じてみませんか?

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
特集記事連載記事一覧

もっと読む

この記事の著者

村岡 正和(ムラオカ マサカズ)

 1975年生まれ。鳥取県出身。 バスタイムフィッシュ代表。 神戸を拠点としてWebアプリケーションの開発、IT技術コンサルティングを行っている。 Webを有効活用したビジネスモデルの設計から、それを駆動させるためのアプリケーション開発、セールスマネージメントまで。事業の特性に合った最新技術を選定し...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/8997 2015/11/26 18:17

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング