无法在程序的 WiFi 初始化中使用 GET 方法
Not able to use GET method in WiFi initialization of program
我有一个功能可以将日志发送到 Telegram。
当我从 void setup()
或 void loop()
函数或我定义的某个函数调用它时,此函数工作正常。
当我的 esp32 连接到 Wifi 时,我还想向 Telegram 发送消息。
这是我的代码的样子。
void telegram_report(String error_message) {
String url = "";
url += "https://api.telegram.org/bot";
url += TELEGRAM_TOKEN;
url += "/sendMessage?chat_id=";
url += TELEGRAM_CHAT_ID;
url += "&parse_mode=Markdown&text=";
url += "[ ESP32(1) ] ";
url += error_message;
HTTPClient http;
http.begin(url);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int countTries = 0;
int httpCode = -1;
while(httpCode == -1){
if (countTries > 3) {
Serial.println("[ ERR ] Could not send Error Report to Telegram. Max number of tries reached");
http.end();
Serial.println(error_message);
return;
}
httpCode = http.GET();
countTries++;
}
}
void connectToWiFi() {
Serial.println(" ");
Serial.print("[ INF ] Connencting to WiFi");
Serial.print(" ");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_NETWORK, WIFI_PASSWORD);
unsigned long startAttemptTime = millis();
while(WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 20000) {
Serial.print(".");
delay(500);
}
if (WiFi.status() != WL_CONNECTED) {
Serial.println("[ ERR ] Failed connect to WiFi!");
delay(5000);
}
else {
String connected = "";
connected += "[ SUCC ] Connected to WiFi:";
connected += String(WIFI_NETWORK);
connected += " - with IP address ";
connected += String(WiFi.localIP());
telegram_report(connected); // This is where I'm struggling
}
}
当我从我的代码某处调用函数 telegram_report()
时,我能够得到对 Telegram 的响应。
但是当我尝试从 Wifi 连接功能调用该功能时,我什么也没得到。
当我调用 telegram_report(connected);
.
时,我的 Wifi 连接已经建立
难道我将 String
传递给函数而不是引用?
此外,当我尝试打印它时,我从 String(WiFi.localIP())
得到了奇怪的输出。是因为我要将其转换为 String
吗?
安全连接 (https) 需要检查证书的有效性。这包括检查日期。 ESP32 SDK 连接网络后立即获取网络时间,但需要几毫秒。
您可以通过将时间与大于 1970-01-01(默认 'unset' 时间)的某个时间戳进行比较来检查时间是否已被检索。
time_t now = time(nullptr);
uint8_t timeoutCounter = 0;
while (now < SECS_YR_2000 && timeoutCounter < 10) {
timeoutCounter++
delay(100);
now = time(nullptr);
}
#define SECS_YR_2000 ((time_t)(946684800UL))
我有一个功能可以将日志发送到 Telegram。
当我从 void setup()
或 void loop()
函数或我定义的某个函数调用它时,此函数工作正常。
当我的 esp32 连接到 Wifi 时,我还想向 Telegram 发送消息。
这是我的代码的样子。
void telegram_report(String error_message) {
String url = "";
url += "https://api.telegram.org/bot";
url += TELEGRAM_TOKEN;
url += "/sendMessage?chat_id=";
url += TELEGRAM_CHAT_ID;
url += "&parse_mode=Markdown&text=";
url += "[ ESP32(1) ] ";
url += error_message;
HTTPClient http;
http.begin(url);
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
int countTries = 0;
int httpCode = -1;
while(httpCode == -1){
if (countTries > 3) {
Serial.println("[ ERR ] Could not send Error Report to Telegram. Max number of tries reached");
http.end();
Serial.println(error_message);
return;
}
httpCode = http.GET();
countTries++;
}
}
void connectToWiFi() {
Serial.println(" ");
Serial.print("[ INF ] Connencting to WiFi");
Serial.print(" ");
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_NETWORK, WIFI_PASSWORD);
unsigned long startAttemptTime = millis();
while(WiFi.status() != WL_CONNECTED && millis() - startAttemptTime < 20000) {
Serial.print(".");
delay(500);
}
if (WiFi.status() != WL_CONNECTED) {
Serial.println("[ ERR ] Failed connect to WiFi!");
delay(5000);
}
else {
String connected = "";
connected += "[ SUCC ] Connected to WiFi:";
connected += String(WIFI_NETWORK);
connected += " - with IP address ";
connected += String(WiFi.localIP());
telegram_report(connected); // This is where I'm struggling
}
}
当我从我的代码某处调用函数 telegram_report()
时,我能够得到对 Telegram 的响应。
但是当我尝试从 Wifi 连接功能调用该功能时,我什么也没得到。
当我调用 telegram_report(connected);
.
难道我将 String
传递给函数而不是引用?
此外,当我尝试打印它时,我从 String(WiFi.localIP())
得到了奇怪的输出。是因为我要将其转换为 String
吗?
安全连接 (https) 需要检查证书的有效性。这包括检查日期。 ESP32 SDK 连接网络后立即获取网络时间,但需要几毫秒。
您可以通过将时间与大于 1970-01-01(默认 'unset' 时间)的某个时间戳进行比较来检查时间是否已被检索。
time_t now = time(nullptr);
uint8_t timeoutCounter = 0;
while (now < SECS_YR_2000 && timeoutCounter < 10) {
timeoutCounter++
delay(100);
now = time(nullptr);
}
#define SECS_YR_2000 ((time_t)(946684800UL))