Edited at
EspruinoDay 16

EspruinoをWiFiに繋ぐ - POSTリクエストを送る

More than 3 years have passed since last update.

以前の記事で 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リクエストを投げられます。