SDから読み込んだ文字列だとAWS通信でエラー
現在、ESP-WROOM-32でAWSサーバーへアクセスするプログラムをやってます。ESP-WROOM-32に接続したSDカードリーダーから"config"というテキストファイルを読み込んで、そのファイルに書かれたAWSサーバー名やポート番号に応じて接続処理を行いたいと思っています。(*いちいちスケッチで書き込んでコンパイルするのがめんどくさいため)
もともとのスケッチにて、次の様なサーバーの変数名の宣言などがされていて、接続できていました。
(例)
const char* server = "am5y9zzdy09g0-ats.iot.us-wwww-2.amazonaws.com";
const int port = 8883;
これの"const char* server"部分のサーバー名の文字列をSDカードの”config”ファイルから持って来ようと思い次の様なコードを作ったのですが、シリアルモニタで
Serial.printf("aws server: %s \n", server);
これで文字列を確認しても"am5y9zzdy09g0-ats.iot.us-wwww-2.amazonaws.com"
と出てきているのに、AWSサーバとの通信で必ずエラーを起こします。
(今回のプログラム内容の関数部分)
const char* server;
bool getAwsServer(fs::FS &fs, String path) {
//File file = SD_MMC.open(path, "r");
File file = fs.open(path, "r");
if (!file) {
Serial.printf("Can't Open File %s \n", path);
return false;
}
while (file.available()) {
String line = file.readStringUntil('\n');
line = line.substring(0, line.indexOf('#'));
//Serial.printf("DeviceID: %s \n", line.c_str());
//String deviceCheck = line.substring(0, line.indexOf("device name"));
if (line.indexOf("aws server") != -1) {
String deviceID = line.substring(line.indexOf(':')+1); deviceID.trim();
//Serial.printf("aws server: %s \n", deviceID.c_str());
server = (const char*)deviceID.c_str();
Serial.printf("aws server: %s \n", server);
return true;
}
}
Serial.printf("aws server is no data \n");
return false;
}
このプログラムの問題箇所や解決策など、ご教示の程よろしくお願い致します。