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

  • 0
    いいね
  • 0
    コメント
    この記事は最終更新日から1年以上が経過しています。

    以前の記事で 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秒くらいかかるかもしれません。(こいつ、アクセスが一定時間無いとサーバが寝てしまうので立ち上がるのに時間がかかるんです)

    下のように送ったデータがコンソールに出力されれば成功です。

    image

    まとめ

    これでEspruino、wifi経由でセンサーの情報をWEBにPOSTすることができるようになりました。ちなみに毎回これ書くのは大変なので、ちょっとしたラッパーメソッドを作り、Gistに上げてあります。
    sample_usage.jsにあるような使い方でPOSTリクエストを投げられます。