ESP32多任务参数通过电子表格



我在ESP32中使用相同的波特率115200为土壤湿度和压力传感器工作。此外,我使用2核多任务ESP32执行两个传感器。两个项目的核心1和核心2。

参数可以通过串行监视器查看,但不能通过电子表格传递。我正在使用IFTTT平台将ESP32连接到电子表格中。

这是我的代码:

#include <WiFi.h>
#include <HTTPClient.h>
TaskHandle_t Task1;
TaskHandle_t Task2;
const char * ssid = "XXXX";  
const char * password = "XXXX";  
String server = "http://maker.ifttt.com";
String eventName = "soil_pressure";
String IFTTT_Key = "XXXXXXXXXX";
String IFTTTUrl="https://maker.ifttt.com/trigger/soil_pressure/with/key/XXXXX";
int sensorPin = 2;
int sensorValueSoil;
int limit = 300; 
int sensorValuePressure;
int value1; // soil
int value2; // pressure
void setup() 
{
Serial.begin(115200);
pinMode(2, OUTPUT);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println("Internet Connected !!!");
xTaskCreatePinnedToCore(
Task1code,   /* Task function. */
"Task1",     /* name of task. */
10000,       /* Stack size of task */
NULL,        /* parameter of the task */
1,           /* priority of the task */
&Task1,      /* Task handle to keep track of created task */
0);          /* pin task to core 0 */                  
delay(500); 

xTaskCreatePinnedToCore(
Task2code,   /* Task function. */
"Task2",     /* name of task. */
10000,       /* Stack size of task */
NULL,        /* parameter of the task */
1,           /* priority of the task */
&Task2,      /* Task handle to keep track of created task */
1);          /* pin task to core 1 */
delay(500);  
}
void Task1code( void * pvParameters )
{
Serial.print("Task1 running on core ");
Serial.println(xPortGetCoreID());
for(;;)
{
sensorValueSoil = analogRead(sensorPin);
Serial.println(sensorValueSoil);
if (sensorValueSoil<limit) 
{
digitalWrite(2, HIGH); 
}
else {
digitalWrite(2, LOW); 
}
delay(1000);
}
}
void Task2code( void * pvParameters )
{
Serial.print("Task2 running on core ");
Serial.println(xPortGetCoreID());
for(;;)
{
sensorValuePressure = analogRead(13);
Serial.println(sensorValuePressure);
delay(1000);
}
}
void sendDataToSheet(void)
{
String url = server + "/trigger/" + eventName + "/with/key/" + IFTTT_Key + "
value1=" + String((int)value1) + "&value2="+String((int)value2);
Serial.println(url);
//Start to send data to IFTTT
HTTPClient http;
Serial.print("[HTTP] begin...n");
http.begin(url); //HTTP
Serial.print("[HTTP] GET...n");
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if(httpCode > 0) 
{
// HTTP header has been send and Server
response header has been handled
Serial.printf("[HTTP] GET... code: %dn", httpCode);
// file found at server
if(httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
}
} 
else 
{
Serial.printf("[HTTP] GET... failed, error: %sn",
http.errorToString(httpCode).c_str());
}
http.end();
}
void loop() 
{
value1 =  sensorValueSoil; 
value2 =  sensorValuePressure;
Serial.print("Values are ");
Serial.print(value1);
Serial.print(' ');
Serial.print(value2);
Serial.print(' ');
sendDataToSheet();
delay(5000);
}

您需要将WiFiClient对象传递到HTTPClient参数中。

HTTPClient http;
WiFiClient client;
void sendDataToSheet(void) {
String url = server + "/trigger/" + eventName + "/with/key/" + IFTTT_Key + "value1 = " + String((int)value1) + " & value2 = " + String((int)value2);
Serial.println(url);
//Start to send data to IFTTT
Serial.print("[HTTP] begin...n");
http.begin(client, url);
// start connection and send HTTP header
int httpCode = http.GET();
// httpCode will be negative on error
if (httpCode > 0) {
// HTTP header has been send and Server response header has been handled
Serial.printf("[HTTP] GET... code: %dn", httpCode);
// file found at server
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
Serial.println(payload);
}
} else {
Serial.printf("[HTTP] GET... failed, error: %sn", http.errorToString(httpCode).c_str());
}
http.end();
}

相关内容

最新更新