問題
TinyGSM v0.11.5 時点ではSIM7600でHTTPS通信はできない
解決
ATコマンドで直接やる
製造元のページよりユーザー登録してログインして、PDFをダウンロードする
- SIM7500_SIM7600_Series_HTTP(S)_Application Note_V3.00
// 通常通りここまででIPアドレスを振られてネットに繋がる状態にしておく
// まず初期化
modem.sendAT(GF("+HTTPINIT"));
modem.waitResponse();
// URL設定(PDFにはないが、256byte分しか設定できないので注意)
modem.sendAT(GF("+HTTPPARA=\"URL\","), "\"", url, "\"");
modem.waitResponse();
// get (=0) 送信
modem.sendAT(GF("+HTTPACTION=0"));
//////////////////////////////////
// +HTTPACTION=0からの期待する返答
//////////////////////////////////
// OK
// <- modem.stream.available()がすぐに来ないので注意
// +HTTPACTION: 0,200,9999 // 9999はページのbyteサイズ
// response待ち
if (modem.waitResponse() != 1) { // 「OK」のパート
// ダメなら終了
modem.sendAT(GF("+HTTPTERM"));
modem.waitResponse();
}
// 「modem.stream.available()がすぐに来ないので注意」パート
for (auto c = 0; c < 5000; c++) {
if (modem.stream.available()) {
break;
}
delay(1);
}
// 「+HTTPACTION: 0,200,9999」のパート
// lineを加工するなりしてステータスコードを読んだり、bodyを読み込むためのbyte lengthを確保
std::string line = "";
line.reserve(50);
while (modem.stream.available()) {
line += (char)modem.stream.read();
}
// length は上の結果から抽出したとして
modem.sendAT(GF("+HTTPREAD=0"), ",", length);
//////////////////////////////////
// +HTTPREAD=0からの期待する返答
//////////////////////////////////
// OK
// <- modem.stream.available()がすぐに来ないので注意
// +HTTPREAD: 9999
// GETした内容...
// +HTTPREAD: 0
// 「OK」のパート
modem.waitResponse();
// 「modem.stream.available()がすぐに来ないので注意」パート
for (auto c = 0; c < 5000; c++) {
if (modem.stream.available()) {
break;
}
delay(1);
}
// 上下を +HTTPREAD: に挟まれた形になるのでどうにか加工して中身だけ取る
std::string body = "";
body.reserve(length);
while (modem.stream.available()) {
body += (char)modem.stream.read();
}