Я написал несколько кодов о параллельной обработке, одно ядро считывает данные dht11, а другое ядро отправляет данные в thingpeak.
Я использую IDE Arduino и использую функцию: xTaskCreatePinnedToCore для выполнения этой работы.
Но httpclient всегда 10 раз успешно выполняется и постоянно выдает ошибку.
Когда я традиционно использую его в l oop, он работает хорошо.
httpcode = -1, это то, что я получил.
#include <WiFi.h>
#include <HTTPClient.h>
#include <SimpleDHT.h>
char ssid[] = "ssid";
char password[] = "pws";
//
String url = "http://api.thingspeak.com/update?api_key=yourAPIKey";
int pinDHT11 = 14;
SimpleDHT11 dht11(pinDHT11);
byte temperature = 0;
byte humidity = 0;
//Task1
TaskHandle_t Task1;
int count = 1;
void senddata(void * pvParameters ) {
//Sending to thingspeak
for ( ;; ) {
Serial.print("Sending via core:");
Serial.println(xPortGetCoreID());
Serial.println("Start sending");
HTTPClient http;
String url1 = url + "&field1=" + (int)temperature + "&field2=" + (int)humidity;
Serial.println(url1);
Serial.println(WiFi.status());
//http client
http.begin(url1);
int httpCode = http.GET();
Serial.println(httpCode);
if (httpCode == HTTP_CODE_OK) {
//payload
String payload = http.getString();
Serial.print("payload=");
Serial.println(payload);
Serial.println("count=" + String(count++));
} else {
//Fail
Serial.println("Send fail");
}
//http.end();
Serial.println("deleting");
vTaskDelete(Task1);//vTaskDelete(NULL) is the same fail after 10 times
}
}
void setup()
{
Serial.begin(115200);
Serial.print("connecting SSID:");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println("connected");
}
void loop()
{
Serial.print("reading dht11 via core:");
Serial.println(xPortGetCoreID());
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
Serial.print("Read error="); Serial.println(err); delay(1000);
return;
}
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
xTaskCreatePinnedToCore(
senddata, /*Function*/
"Task1", /**/
100000, /*1000,10000,100000 all sended http 10 times, and fail*/
NULL, /**/
0, /**/
&Task1, /**/
0); /**/
delay(20000);//20s
}