iT邦幫忙

2022 iThome 鐵人賽

DAY 22
0
自我挑戰組

IOT上課心得系列 第 22

Day 22 - ESP32 使用多核心上傳資料

  • 分享至 

  • xImage
  •  

使用另一個核心上傳資料


#include <WiFi.h>
#include <HTTPClient.h>
#include <SimpleDHT.h>
//請修改以下參數--------------------------------------------
char ssid[] = "SSID";
char password[] = "SSIDpassword";
//請修改為你自己的API Key,並將https改為http
String url = "http://api.thingspeak.com/update?api_key=換成你的APIKey";
int pinDHT11 = 4;//假設DHT11 接在腳位GPIO4,DHT11 接線圖請參考P74
//---------------------------------------------------------
SimpleDHT11 dht11(pinDHT11);//宣告SimpleDHT11物件

//公用變數區
byte temperature = 0;
byte humidity = 0;
bool SendFlag = false;
//宣告任務Task1
TaskHandle_t Task1;

//任務1副程式Task1_senddata
void Task1_senddata(void * pvParameters ) {
//無窮迴圈
for (;;) {
//偵測上傳旗標是否為true
if (SendFlag) {
Serial.print("Task1:啟動網頁連線,at core:");
Serial.println(xPortGetCoreID());
//開始上傳ThingSpeak
HTTPClient http;
//將溫度及濕度以http get參數方式補入網址後方
String url1 = url + "&field1=" + (int)temperature + "&field2=" +
(int)humidity;
//http client取得網頁內容
http.begin(url1);
int httpCode = http.GET();
if (httpCode == HTTP_CODE_OK) {
//讀取網頁內容到payload
String payload = http.getString();
//將內容顯示出來
Serial.print("網頁內容=");
Serial.println(payload);
} else {
//傳送失敗
Serial.println("網路傳送失敗");
}
//修改完畢,修改傳送旗標=false
SendFlag = false;
http.end();
} else {
//不可省略
delay(1);
}
}
}

void setup()
{
Serial.begin(115200);
Serial.print("開始連線到無線網路SSID:");
Serial.println(ssid);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
Serial.print(".");
delay(1000);
}
Serial.println("連線完成");
//在核心0啟動任務1
xTaskCreatePinnedToCore(
Task1_senddata,/任務實際對應的Function/
"Task1", /任務名稱/
10000, /堆疊空間/
NULL, /無輸入值/
0, /優先序0/
&Task1, /對應的任務變數位址/
0); /*指定在核心0執行 */
}

void loop()
{
Serial.print("loop主流程:溫濕度讀取,at core:");
Serial.println(xPortGetCoreID());
//嘗試讀取溫濕度內容
int err = SimpleDHTErrSuccess;
if ((err = dht11.read(&temperature, &humidity, NULL)) !=
SimpleDHTErrSuccess) {
Serial.print("溫度計讀取失敗,錯誤碼=");
Serial.println(err);
delay(1000);
return;
}
//讀取成功,將溫濕度顯示在序列視窗
Serial.print("溫度計讀取成功: ");
Serial.print((int)temperature); Serial.print(" *C, ");
Serial.print((int)humidity); Serial.println(" H");
//修改上傳旗標=true
SendFlag = true;
delay(20000);//休息20秒
}


上一篇
Day 21 - ESP32 核心應用
下一篇
Day 23 - ESP32-CAM 拍照存到記憶卡
系列文
IOT上課心得30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言