以前の記事で CC3000 wifiモジュールでgetリクエストを投げることに成功したので、今度はPOSTリクエストを投げてみます。GETリクエストの場合はHttp#get
というラッパーメソッドが用意されていたので楽でしたが、POSTリクエストを投げるにはHttp#request
メソッドを直接たたく必要があります。
イメージはnode.js
的な感じなので、触った事ある方には馴染みある書き方かもしれません。
目標
Espruino&CC3000にてPOSTリクエストを投げる!
結線
以前の記事と全く同じです。
プログラム
POSTリクエストを試せるサーバを立てたので、そこにリクエストを投げます。POSTリクエストをなげると、レスポンスとして送ったデータをエコーしてくれるので、今回はそれをコンソールに出せれば成功とします。
// wifi接続情報
var accessPointName = "######"; //SSID
var WPA2Key = "#######"; //PASSWORD
function postSample(){
// オプションを設定
var payload = {
sample_arg: "1",
sample_arg2: "2"
};
var queryString =
"sample_arg=" + payload.sample_arg +
"&sample_arg2=" + payload.sample_arg2;
var host = "node-test-rocky.herokuapp.com";
var port = 80;
var path = "/post_sample";
var options = {
host: host,
port: port,
path: path,
method: "POST",
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'Content-Length': queryString.length
}
};
var http = require("http");
var dataAsString = "";
var req = http.request( options, function(res) {
res.on('data', function(data){
// data chunkを繋ぎ込む
dataAsString += data;
});
res.on('close', function(){
console.log( 'from server' );
console.log( dataAsString );
});
});
req.write( queryString );
req.end();
}
// wifi繋ぎます
LED3.write(true);
var wlan = require("CC3000").connect();
LED2.write(true);
wlan.connect( accessPointName , WPA2Key , function (s) {
LED1.write(true);
console.log('connected');
if (s=="dhcp") {
postSample();
}
});
実行
GETリクエスト同様、完了まで時間がかかります。おまけにサーバもherokuを使っているので、30秒くらいかかるかもしれません。(こいつ、アクセスが一定時間無いとサーバが寝てしまうので立ち上がるのに時間がかかるんです)
下のように送ったデータがコンソールに出力されれば成功です。
まとめ
これでEspruino、wifi経由でセンサーの情報をWEBにPOSTすることができるようになりました。ちなみに毎回これ書くのは大変なので、ちょっとしたラッパーメソッドを作り、Gistに上げてあります。
sample_usage.js
にあるような使い方でPOSTリクエストを投げられます。