ESP32 Arduino httpSecureClient -1 核心 0 错误,无故
ESP32 Arduino httpSecureClient -1 error at core 0 without reason why
Arduino 中 ESP 的 httpsecureclient 库有问题 IDE。
我尝试将 http 请求发送到 https 域(不会更改)并且多次运行正常。
就像我做一些 HTTP 调用来获取某些数据让 ESP 做它的事情。但是当我想使用 WiFiClientSecure
和 HTTPClient
让 ESP post 向服务器发送有效载荷时,它有时可以正常工作,但突然间,它停止工作并抛出我是众所周知的,没什么好说的 -1
响应代码...
我用来发送心跳的代码如下;
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
WiFiClientSecure ApiClient;
HTTPClient ApiHttpClient;
StaticJsonDocument<256> doc;
doc["mac"] = deviceMacAddress;
doc["key"] = DEVICE_SECRET;
doc["type"] = DIGITAL_HQ_SOFTWARE_TYPE;
String heartbeatData;
serializeJson(doc, heartbeatData);
ApiClient.setInsecure(); //skip verification of SSL cert
Serial.println("Sending Heartbeat");
ApiHttpClient.begin(ApiClient, DIGITAL_HQ_HEARTBEAT_ENDPOINT);
ApiHttpClient.addHeader("Content-Type", "application/json");
ApiHttpClient.setUserAgent(DIGITAL_HQ_USER_AGENT);
int responseCode = ApiHttpClient.POST(heartbeatData); // just post, Don't care about the response.
if (responseCode != 200) {
failedApiCalls ++;
}
Serial.print("ResponseCode from heartbeat: ");
Serial.println(responseCode);
// Free resources
ApiHttpClient.end();
此代码通过以下函数在核心 0 上运行;
xTaskCreatePinnedToCore(sendHeartBeat, "Send Heartbeat", 20000, NULL, 25, &heartBeatTask, 0);
我确实在主核中调用了一次心跳,然后它起作用了,但是在第二个核上,它有时起作用,但其他时候却不起作用。
这没什么特别的,我想我真的想不通...
旁注:
有一个 MQTT 连接 运行 AWS IoT 中心,在核心 1 上,我对此没有任何问题。
我目前 运行 在更新库后遇到了同样的麻烦,esp32 http 客户端的旧代码停止工作并出现同样的症状。
我可以通过切换到只使用 HTTPClient 而不使用 WiFiClientSecure 来解决这个问题。它适用于 https。
#include <HTTPClient.h>
#include <Arduino_JSON.h>
void getPricesFromKraken(){
String url = "https://api.kraken.com/0/public/Ticker?pair=DOGEUSD,XBTUSD";
HTTPClient http;
JSONVar data;
http.begin(url.c_str());
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
String payload = http.getString();
data = JSON.parse(payload);
Serial.println(data);
}
else {
Serial.printf("http response code: %d\n", httpResponseCode);
}
http.end();
}
Arduino 中 ESP 的 httpsecureclient 库有问题 IDE。
我尝试将 http 请求发送到 https 域(不会更改)并且多次运行正常。
就像我做一些 HTTP 调用来获取某些数据让 ESP 做它的事情。但是当我想使用 WiFiClientSecure
和 HTTPClient
让 ESP post 向服务器发送有效载荷时,它有时可以正常工作,但突然间,它停止工作并抛出我是众所周知的,没什么好说的 -1
响应代码...
我用来发送心跳的代码如下;
#include <HTTPClient.h>
#include <WiFiClientSecure.h>
#include <ArduinoJson.h>
WiFiClientSecure ApiClient;
HTTPClient ApiHttpClient;
StaticJsonDocument<256> doc;
doc["mac"] = deviceMacAddress;
doc["key"] = DEVICE_SECRET;
doc["type"] = DIGITAL_HQ_SOFTWARE_TYPE;
String heartbeatData;
serializeJson(doc, heartbeatData);
ApiClient.setInsecure(); //skip verification of SSL cert
Serial.println("Sending Heartbeat");
ApiHttpClient.begin(ApiClient, DIGITAL_HQ_HEARTBEAT_ENDPOINT);
ApiHttpClient.addHeader("Content-Type", "application/json");
ApiHttpClient.setUserAgent(DIGITAL_HQ_USER_AGENT);
int responseCode = ApiHttpClient.POST(heartbeatData); // just post, Don't care about the response.
if (responseCode != 200) {
failedApiCalls ++;
}
Serial.print("ResponseCode from heartbeat: ");
Serial.println(responseCode);
// Free resources
ApiHttpClient.end();
此代码通过以下函数在核心 0 上运行;
xTaskCreatePinnedToCore(sendHeartBeat, "Send Heartbeat", 20000, NULL, 25, &heartBeatTask, 0);
我确实在主核中调用了一次心跳,然后它起作用了,但是在第二个核上,它有时起作用,但其他时候却不起作用。
这没什么特别的,我想我真的想不通...
旁注:
有一个 MQTT 连接 运行 AWS IoT 中心,在核心 1 上,我对此没有任何问题。
我目前 运行 在更新库后遇到了同样的麻烦,esp32 http 客户端的旧代码停止工作并出现同样的症状。
我可以通过切换到只使用 HTTPClient 而不使用 WiFiClientSecure 来解决这个问题。它适用于 https。
#include <HTTPClient.h>
#include <Arduino_JSON.h>
void getPricesFromKraken(){
String url = "https://api.kraken.com/0/public/Ticker?pair=DOGEUSD,XBTUSD";
HTTPClient http;
JSONVar data;
http.begin(url.c_str());
int httpResponseCode = http.GET();
if (httpResponseCode > 0) {
String payload = http.getString();
data = JSON.parse(payload);
Serial.println(data);
}
else {
Serial.printf("http response code: %d\n", httpResponseCode);
}
http.end();
}