BeagleBone Blackにcloud9をインストールする
UbuntuをインストールしたBeagleBone Blackにcloud9 IDEをインストールしてみます。
cloud9 IDEとは
BeagleBone Blackに標準インストールのAngstrom上にプリインストールされている、Node.jsを利用したブラウザIDE環境です。今回はUbuntuに入れ替えてあるので、ここにcloud9 IEDを追加でインストールします。
cloud9 IDEのインストール
cloud9 IDEはgitihubに公開されていますので、これをインストールすれば動くはずです。
Requirements:
- NodeJS
>= 0.6.16
- NPM
>= 1.1.16
- libxml2-dev
となっていますが、すでにNode.jsは0.8.22をnodebrewを使ってインストール済みで、同時にNPMもインストールされているので、libxml2-devをインストールします。
$ sudo apt-get install libxml2-dev
次にcloud9をインストールします
$ git clone https://github.com/ajaxorg/cloud9.git $ cd cloud9 $ npm install
cloud9 IDEの起動
cloud9はデフォルトで起動すると、localhostからしかアクセスできないので、外部からブラウザ経由でアクセスするためには。以下のように起動します。
$ bin/cloud9.sh -l 0.0.0.0 make: Nothing to be done for `worker'. Linux ARM connect plugin start Connect server listening at http://0.0.0.0:3131 IDE SERVER PLUGIN: auth IDE SERVER PLUGIN: git IDE SERVER PLUGIN: gittools IDE SERVER PLUGIN: hg IDE SERVER PLUGIN: npm IDE SERVER PLUGIN: filelist IDE SERVER PLUGIN: search IDE SERVER PLUGIN: revisions IDE SERVER PLUGIN: settings IDE SERVER PLUGIN: shell IDE SERVER PLUGIN: state IDE SERVER PLUGIN: watcher IDE SERVER PLUGIN: node-runtime IDE SERVER PLUGIN: npm-runtime IDE SERVER PLUGIN: python-runtime IDE SERVER PLUGIN: apache-runtime IDE SERVER PLUGIN: ruby-runtime IDE SERVER PLUGIN: php-runtime Started '/home/ubuntu/cloud9/configs/default'! IDE server initialized. Listening on 0.0.0.0:3131
ポートは3131で起動していますので、BeagleBone BlackのIPアドレスを調べてアクセスしてみましょう。
LEDの点灯・消灯サンプル
clou9が起動したら、サンプルアプリを動かしてみましょう。「New File」で新規ファイルを作成します。led.jsとかファイル名を付けておきます。下記はBoneScriptを使って、LEDを制御するプログラムです。
/** * LED点灯、2秒後に消灯 */ var b = require('bonescript'); // LEDの設定 b.pinMode('USR0', b.OUTPUT); b.pinMode('USR1', b.OUTPUT); b.pinMode('USR2', b.OUTPUT); b.pinMode('USR3', b.OUTPUT); // LEDをONに b.digitalWrite('USR0', b.HIGH); b.digitalWrite('USR1', b.HIGH); b.digitalWrite('USR2', b.HIGH); b.digitalWrite('USR3', b.HIGH); // 2秒後にLEDをOFFに setTimeout(function() { b.digitalWrite('USR0', b.LOW); b.digitalWrite('USR1', b.LOW); b.digitalWrite('USR2', b.LOW); b.digitalWrite('USR3', b.LOW); }, 2000);
実行してみます。
Running Node Process Your code is running at 'http://0.0.0.0:21479'. Important: in your scripts, use 'process.env.PORT' as port and '0.0.0.0' as host. fs.js:338 return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode); ^ Error: EACCES, permission denied '/sys/class/leds/beaglebone:green:usr0/trigger' at Object.fs.openSync (fs.js:338:18) at Object.fs.writeFileSync (fs.js:756:15) at Object.f.pinMode (/home/ubuntu/cloud9/node_modules/bonescript/index.js:132:20) at Object. (/home/ubuntu/cloud9/myScript/led1.js:7:3) at Module._compile (module.js:449:26) at Object.Module._extensions..js (module.js:467:10) at Module.load (module.js:356:32) at Function.Module._load (module.js:312:12) at Module.runMain (module.js:492:10) at process.startup.processNextTick.process._tickCallback (node.js:245:9)
どうやら、LEDへのアクセス権が無いということで怒られてしまいました....cloud9をroot権限で実行してやらないと、デバイスへのアクセスは出来ないようです。
$ sudo bin/cloud9.sh make: Nothing to be done for `worker'. Linux ARM bin/cloud9.sh: 18: bin/cloud9.sh: node: not found
今度はnodeが無いと怒られてしまいました。nodebrewをubuntuユーザでインストールしたため、rootユーザにnodeがインストールされていません。これを回避するには
- rootでnodeをインストール
- rootでcloud9を起動し、ubuntuユーザのnodeパスを指定
のどちらかを選択することになりますが、今回はnodeがすでにインストールされているので後者の方法で起動します。cloud.shを下記のように書き換えます。
Linux*arm*) echo "Linux ARM" /home/ubuntu/.nodebrew/current/bin/node server.js "$@" -a x-www-browser ;;
BeagleBone Blackは"Linux ARM"なので、ここの部分をnodebrewのcurrentのnodeが起動するように修正します。これでもう一度起動して、先ほどのプログラムを実行します。
$ sudo bin/cloud9.sh -l 0.0.0.0 make: Nothing to be done for `worker'. Linux ARM connect plugin start Connect server listening at http://0.0.0.0:3131 IDE SERVER PLUGIN: auth IDE SERVER PLUGIN: git IDE SERVER PLUGIN: gittools IDE SERVER PLUGIN: hg IDE SERVER PLUGIN: npm IDE SERVER PLUGIN: filelist IDE SERVER PLUGIN: search IDE SERVER PLUGIN: revisions IDE SERVER PLUGIN: settings IDE SERVER PLUGIN: shell IDE SERVER PLUGIN: state IDE SERVER PLUGIN: watcher IDE SERVER PLUGIN: node-runtime IDE SERVER PLUGIN: npm-runtime IDE SERVER PLUGIN: python-runtime IDE SERVER PLUGIN: apache-runtime IDE SERVER PLUGIN: ruby-runtime IDE SERVER PLUGIN: php-runtime Started '/home/ubuntu/cloud9/configs/default'! IDE server initialized. Listening on 0.0.0.0:3131
今度はLEDが一斉に点灯して、2秒後に消灯するように動くはずです。
おわりに
BoneScriptは簡単にLEDやGPIOを制御できる便利なライブラリです。以前BoneScriptのライブラリ構成を調べましたが、socket.ioやserialportも入ってると思ったのですが、これらはBoneScript配下で使用されるようで、自分で意識して扱う場合には別途インストールする必要があるようです。
cloud9 IDEはBeagelBone Black上でGPIO制御などの動作確認やプロトタイピングにはいいのですが、実際にNode.jsサーバを動かすといった場合には、いつものようexpressなどを使うのが良いと思われます。おそらくBoneScriptはそのまま使えるので、上手く利用できるでしょう。