Armadillo-IoT + Heroku(Node.js)でHello World

Armadillo-IoTとHeroku(Node.js)でHello Worldをやってみましたので、 その際の作業手順をまとめてみます。

1. ATDE5にnode.jsをインストール

ここではATDE5でNode.jsを動かすために、Node.jsをインストールします。(ローカルで動作させる環境が不要な場合はこの章の手順は不要です)

Node.jsのパッケージ(nodejs, nodejs-legacy)は、ATDE5のベースであるDebian wheezyにはパッケージがありません。そのためbackportから取ってくる必要があります。

ここでは以下のURLを参考にATDE5にNode.jsをインストールします。

まずは/etc/apt/sources.list.d/backports.listファイルを以下の内容で作成してください。

deb http://ftp.jp.debian.org/debian/ wheezy-backports main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ wheezy-backports main contrib non-free

上記のファイルを追加したら、以下のコマンドを実行し、Node.jsとNode.jsのパッケージ管理ツールであるnpmをインストールしてください。

[atde ~]$ sudo apt-get update
[atde ~]$ sudo apt-get install nodejs nodejs-legacy
[atde ~]$ curl -L https://npmjs.org/install.sh | sudo sh 

2. Herokuの使用準備

以下のURLでHerokuのアカウントを作成してください。

以下のURLを参考にしHeroku toolbeltをインストールします。

以下のコマンドを実行し、toolbeltをATDE5にインストールしてください。

[atde ~]$ wget -qO- https://toolbelt.heroku.com/install-ubuntu.sh | sh

3. Node.jsアプリ(Armadilloとの連携なし)を作成し、動作確認

以下のように、どこかに適当なディレクトリ(ここでは~/temp/myapp)を作成し、そこに移動してください。

[atde ~]$ mkdir -p ~/temp/myapp
[atde ~]$ cd ~/temp/myapp

app.js(Node.jsアプリ)というファイルを、以下の内容で作成してください。

var express = require('express');
var app = express();
 
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));
 
app.get('/', function(request, response) {
  response.send('Hello World!');
});
 
app.listen(app.get('port'), function() {
  console.log("Node app is running at localhost:" + app.get('port'));
});

Procfile(Herokuの設定)というファイルを、以下の内容で作成してください。

web: node app.js

package.json(依存関係などの設定を記述)というファイルを、以下の内容で作成してください。

{
  "name": "myapp",
  "version": "1.0.0",
  "description": "",
  "main": "app.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "author": "",
  "license": "ISC",
  "dependencies": {
    "express": "^4.11.2"
  },
  "engines": {
    "node": "0.10.29",
    "npm": "2.5.1"
  }
}

以下のコマンドを実行して、Herokuにアップロードし、動作させるようにしてください。

[atde ~/temp/myapp]$ git init
[atde ~/temp/myapp]$ git add .
[atde ~/temp/myapp]$ git commit -m "initial commit."
[atde ~/temp/myapp]$ heroku create
[atde ~/temp/myapp]$ git push heroku master:master
[atde ~/temp/myapp]$ heroku ps:scale web=1

git pushコマンドを実行すると、最後に下記のようなメッセージがでます。

remote: -----> Compressing... done, 6.1MB
remote: -----> Launching... done, v3
remote:        https://powerful-garden-4275.herokuapp.com/ deployed to Heroku
remote: 
remote: Verifying deploy... done.
To https://git.heroku.com/powerful-garden-4275.git
 * [new branch]      master -> master

上記の"https://powerful-garden-4275.herokuapp.com/"と出ているところに、ブラウザでアクセスすると「Hello World!」と表示されます。(URLは毎回変わります)

4. Node.jsアプリ(Armadilloとの連携)を作成し、動作確認

4.1. Node.jsアプリ側の修正

app.jsを以下の様に修正してください。

var express = require('express');
var bodyParser = require('body-parser');
var app = express();
 
app.set('port', (process.env.PORT || 5000));
app.use(express.static(__dirname + '/public'));
 
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
 
app.get('/', function(request, response) {
  response.send('Hello World!');
});
 
app.post('/series', function(req, res) {
    console.log('post:/series');
    res.send(req.body.data);
});
 
app.listen(app.get('port'), function() {
  console.log("Node app is running at localhost:" + app.get('port'));
});

package.jsonファイルに以下の1行を追加してください。

  "dependencies": {
    "body-parser": "^1.12.0",     ←の行を追加する
    "express": "^4.11.2"
  }, 

以下のコマンドを実行して、Herokuにアップロードしてください。

[atde ~/temp/myapp]$ git add .
[atde ~/temp/myapp]$ git commit -m "add receive data."
[atde ~/temp/myapp]$ git push heroku master:master

4.2. Armadillo側からのデータ送信と動作確認

Armadilloをインターネットに繋がる環境にして、以下のコマンドを実行してください。

[armadillo ~]# wget -O- -q --post-data="data=Hello World" https://powerful-garden-4275.herokuapp.com/series

※: URLは動作確認の環境により、読み替えてください。

上記コマンドを実行すると、以下の結果が帰ってきます。

Hello World
製品: 
Armadillo-IoT G1/G2