中高生国際ロボットチーム


世界初(?)FRCロボットからサーバーにデータを送ってみた結果… #2

date_range
history2020/03/31

 
 

今回得たいデータ

  • ループ一周の処理にかかる時間の平均
  • ロボットのモードの変更履歴
  • バッテリーの減り具合

ループ一周は約0.02秒なので毎ループデータを送ってるとサーバーの反応を待てません。
なので、余裕をもって2秒(100ループ)ごとに別スレッドを建てて送ります!

使ったコード

ロボットからデータを送るコードはこちらのコードを流用させていただきました!

 private String strPostUrl = "https://api.sakura-tempesta.org/robot/";

 public String callPost(String JSON) {

        HttpURLConnection con = null;
        StringBuffer result = new StringBuffer();
        try {

            URL url = new URL(strPostUrl);
            con = (HttpURLConnection) url.openConnection();
            // HTTPリクエストコード
            con.setDoOutput(true);
            con.setRequestMethod("POST");
            con.setRequestProperty("Accept-Language", "jp");
            // データがJSONであること、エンコードを指定する
            con.setRequestProperty("Content-Type", "application/JSON; charset=utf-8");
            // POSTデータの長さを設定
            con.setRequestProperty("Content-Length", String.valueOf(JSON.length()));
            // リクエストのbodyにJSON文字列を書き込む
            OutputStreamWriter out = new OutputStreamWriter(con.getOutputStream());
            out.write(JSON);
            out.flush();
            con.connect();

            // HTTPレスポンスコード
            final int status = con.getResponseCode();
            if (status == HttpURLConnection.HTTP_OK) {
                // 通信に成功した
                // テキストを取得する
                final InputStream in = con.getInputStream();
                String encoding = con.getContentEncoding();
                if (null == encoding) {
                    encoding = "UTF-8";
                }
                final InputStreamReader inReader = new InputStreamReader(in, encoding);
                final BufferedReader bufReader = new BufferedReader(inReader);
                String line = null;
                // 1行ずつテキストを読み込む
                while ((line = bufReader.readLine()) != null) {
                    result.append(line);
                }
                bufReader.close();
                inReader.close();
                in.close();
            } else {
                outputStatus("HTTP_BAD");
            }

        } catch (Exception e1) {
            e1.printStackTrace();
            outputStatus(e1.toString());
        } finally {
            if (con != null) {
                // コネクションを切断
                con.disconnect();
            }
        }
        return result.toString();
    }

JSONの形式

そして、JSONの方は以下のように生成するようにしました。 実際は横並びですが、ここでは整形します。


{
  "Mode_Change" : {
    "(変更した時間)s" : "(変更後のモード)",
    "(変更した時間)s" : "(変更後のモード)",
  },
  "Voltage_Change" : {
    "(変化した時間)s" : "(変化後の電圧)V",
    "(変化した時間)s" : "(変化後の電圧)V",
  },
"Ave_Loop_Time" : "(計算された平均時間)s"
}

次回は実際にロボットにコードを入れて動かしてみます!

この記事を書いた人 - WRITER -
この活動が良い経験になればと思います。ベストを尽くせるよう頑張ります。

Copyright© FRC Team SAKURA Tempesta , 2020 All Rights Reserved.

arrow_upward