Fri 01/13, 2012

BeagleBone + Node.js [Computer and Networking , Electronics ]

BeagleBoard シリーズの末っ子 BeagleBone を仕入れた。これは標準では HDMI や Audio を実装していない(daughter board あり)ものの、EtherNet に USB serial + JTAG 機能を搭載していて更に Arduino ライクに多数の IO ピンがユーザに解放されている。面白いのが Cloud9 IDE で、これはサーバサイド JavaScript である Node.js での開発を Web ブラウザでできるものだ。サンプルプログラムの blink.js ではボード上の LED (と IO ピンのひとつ)をオンオフできる。ついでにこれを Web アプリケーションに仕立ててみることにした。そのための第一歩として Node.js とその Web アプリケーションフレームワークである express の勉強から。実は Node.js は初めてだし、JavaScript も不得手なのだ。express を使うまでもなく bone101 サンプルをベースにする手もあるのだが、それはそれ、ついでというもの。

express は Node.js のための Web アプリケーションフレームワークパッケージだが、これを入れるにはパッケージツールの npm がまず必要になる。BeagleBone の Cloud9 ユーザプログラムのベースディレクトリは /usr/liib/cloud9 以下だけど、とりあえずは ssh かシリアルコンソールでログインしてホームディレクトリで作業する。

# pwd
/home/root
# nove -v node のバージョン
v0.4.12 
# curl http://npmjs.org/install.sh | sh npm のインストール
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  7881  100  7881    0     0   1421      0  0:00:05  0:00:05 --:--:-- 22075
tar=/bin/tar
version:
tar (GNU tar) 1.26
Copyright (C) 2011 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.
install npm@1.0
fetching: http://registry.npmjs.org/npm/-/npm-1.0.106.tgz
0.4.12
1.0.106 これが npm のバージョン
cleanup prefix=/usr

All clean!
/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
/usr/bin/npm_g -> /usr/lib/node_modules/npm/bin/npm-cli.js
/usr/bin/npm-g -> /usr/lib/node_modules/npm/bin/npm-cli.js
npm@1.0.106 /usr/lib/node_modules/npm
It worked
# npm -v npm のバージョン確認
1.0.6
#

express はこの npm を使ってインストールする。

# npm install -g express express モジュールをグローバルインストール
express@2.5.5 /usr/lib/node_modules/express
├─ mkdirp@0.0.7
├─ mime@1.2.4
├─ qs@0.4.0
└─ connect@1.8.5
# npm install -g node-dev ついでに node アプリケーションの開発/テストに便利な node-dev も入れる。
/usr/bin/node-dev -> /usr/lib/node_modules/node-dev/node-dev
node-dev@0.2.1 /usr/lib/node_modules/node-dev
#

早速 express でアプリケーションを作成する。

# express blink スケルトンが blink ディレクトリ以下に構築される

   create : blink
   create : blink/package.json
   create : blink/app.js
   create : blink/public
   create : blink/routes
   create : blink/routes/index.js
   create : blink/views
   create : blink/views/layout.jade
   create : blink/views/index.jade
   create : blink/public/javascripts
   create : blink/public/images
   create : blink/public/stylesheets
   create : blink/public/stylesheets/style.css

   dont forget to install dependencies:
   $ cd blink && npm install

# cd blink
# npm install 上記のメッセージにしたがうと必要なモジュールがインストールされる
jade@0.20.0 ./node_modules/jade
├─ mkdirp@0.2.2
└─ commander@0.2.1
exress@2.5.5 ./node_modules/express
├─ mkdirp@0.0.7
├─ qs@0.4.0
├─ mime@1.2.4
└─ connect@1.8.5
#

ここまでできたら、早速起動してみる。

# node app.js
[ERROR] Error
Error: EADDRINUSE, Address already in use
    at HTTPServer._doListen (net.js:1100:5)
    at net.js:1071:14
    at Object.lookup (dns.js:153:45)
    at HTTPServer.listen (net.js:1065:20)
    at Object. (/home/root/blink/app.js:34:5)
    at Module._compile (module.js:411:26)
    at Object..js (module.js:417:10)
    at Object..js (/usr/lib/node_modules/node-dev/wrapper.js:85:16)
    at Module.load (module.js:343:31)
    at Function._load (module.js:302:12)
#

エラーになったのは express でできた app.js でのデフォルトのポート番号 3000 が Cloud9 IDE のそれと同じで衝突したため。app.listen(3000); となっている箇所を例えば app.listen(8080); とし、今度は node-dev で実行。停止は ctrl-C だ。node-dev で実行するとプログラムが変更されるとそれを検出して自動的に再起動してくれる。

# node-dev app.js
Express server listening on port 8080 in development mode
^C#

で、これをホスト機の Web ブラウザからアクセスすると下記のようなページが表示される。

Express

Welcome to Express

ここまでは組込みアプリケーションという感じでは全くなくて、通常の Linux と変わらない。今回はホームディレクトリ(/home/root)以下で作業したが、Cloud9 のユーザアプリケーション用ベースディレクトリである /var/lib/cloud9 以下に置けば、Could9 からプログラムの編集や操作ができる。

次回はこれをリモート LED チカチカに仕立てる予定。

Posted by masato at 09:25 PM
このエントリーのトラックバックURL: http://bird.dip.jp/cgi-bin/mt/mt-tb.cgi/1814
コメントする

おそらく携帯電話等からは投稿できません。日本語文字列を含まないコメントやトラックバック、および当サイトへの言及を含まないトラックバックは御遠慮いただいております。また、90日以上経過した記事へのコメントはできません。










名前、アドレスを登録しますか?