今回得たいデータ
- ループ一周の処理にかかる時間の平均
- ロボットのモードの変更履歴
- バッテリーの減り具合
ループ一周は約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"
}
次回は実際にロボットにコードを入れて動かしてみます!