ESP32, IOT物聯網

【IOT物聯網應用-ESP32】第三十篇:DHT11 環境資料上傳Google Sheet 透過IFTTT

Google Sheet ,是Google推出的一個電子試算表程式。使用者可以在網路應用程式、Android、iOS、Windows、黑莓手機以及ChromeOS的應用程式上使用,就像是雲端版的Microsoft Excel。

IFTTT,是一個新生的網絡服務平台,通過其他不同平台的條件來決定是否執行下一條命令。即對網絡服務通過其他網絡服務作出反應。IFTTT得名為其口號「if this then that」。

知道兩者後我們利用ESP32+DHT11 取得溫濕度資料,透過WIFI將資料傳送給IFTTT網路服務平台,而IFTTT將資料轉換後填入Google Sheet。

▼ 購買IoT物聯網學習教材:

ESP32 物聯網應用學習套件 ESP32CAM IoT物聯網學習教材 適用Arduino

 

IFTTT帳號登入

進入IFTTT網站:https://ifttt.com

點擊”Get started” 進入登入帳號頁面,本篇使用Google 帳號登入,登入後自動跳轉頁面,點選Create

建立Applet Service

點選 ”If This” > 輸入webhooks並點選圖式 > 選擇 ”Receive a web request” > 輸入Event Name(僅限輸入英文) > 最後按下 “Create trigger”

點選 ”Then that” > 輸入”sheet”並點選圖示 > 選擇  “Add row to spreadsheet”

  • Spreadsheet name : 設定試算表名稱(可中文)。
  • Formatted row : 由於只需要用到溫度及濕度,只需要用到兩筆參數我們將Value3給刪除。
  • Drive folder pat : 使用Default路徑即可(資料夾會自動建立 )。
  • 完成後點選Create action

IF和Then內兩個Service建立完成後點選Continue,並點選Finish

測試服務頁面:

點選三角形後點選Documentation

  1. 輸入Event Name須與建立時同名,輸入錯誤會測試失敗
  2. 在value1和value2輸入參數
  3. 完成後按下 Test It
Note: 下方粉紅框為IFFT URL and key,可先複製儲存起來稍後程式碼的時候可以直接貼上使用!

Google Drive 檢查是否正確

打開根目錄下/IFTTT 的資料夾內的房間溫濕度試算表

注意:若砍掉/IFTTT資料夾或內容物,會導致後續無法傳遞資料,需要隔天後重建IFTTT Service才有效

程式:

  • 自行設定WIFI網路 (ssid、password)。
  • 將剛剛複製的IFFT URL and key貼上。
#include <WiFi.h>
#include <HTTPClient.h>
#include <SimpleDHT.h>

int pinDHT11 = 15; //ESP32 GPIO15
SimpleDHT11 dht11;

const char* ssid = "********"; //輸入wifi ssid
const char* password = "********"; //輸入wifi 密碼
String IFTTT="****************"; //IFFT URL key

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  //wifi 初始化
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connecting to ");
  Serial.println(ssid);
  Serial.println("");
  Serial.println("STAIP address: ");
  Serial.println(WiFi.localIP());  
}

void loop() {  
  byte temperature = 0;
  byte humidity = 0;
  int err = SimpleDHTErrSuccess;
  //wifi connected enter
  if ((WiFi.status() == WL_CONNECTED)) {
    // start working..
    Serial.println("=================================");
    if ((err = dht11.read(pinDHT11, &temperature, &humidity, NULL)) != SimpleDHTErrSuccess) {
       Serial.print("Read DHT11 failed, err="); Serial.println(err);delay(1000);
       return;
    }
    Serial.print("Humidity = ");   
    Serial.print((int)humidity);   
    Serial.print("% , ");   
    Serial.print("Temperature = ");   
    Serial.print((int)temperature);   
    Serial.println("C ");   
    delay(3000);  //每3秒讀取一次
  }
//創造一個IFTTT URL、內容包含溫度及濕度
  String IFTTTurl=IFTTT+"?value1="+String((int)temperature)+"&value2="+String((int)humidity); 
  HTTPClient http;
  Serial.print("===HTTP Send data to IFTTT===\n");
  http.begin(IFTTTurl);

  Serial.print("===HTTP GET Status===\n");
  int httpCode = http.GET(); //Get status
          if(httpCode > 0) {
            Serial.printf("HTTP to get Feeback status: %d\n", httpCode);
            if(httpCode == HTTP_CODE_OK) {
                String payload = http.getString();
                Serial.println(payload); //印出feedback字串
            }
            else {
            Serial.printf("HTTP to get Feedback failed, error: %s\n", http.errorToString(httpCode).c_str());
            }
          Serial.println("=================================");
          http.end();
        }
    delay(60000);//60秒傳送一次,傳送資料最少20~30秒,勿低於30秒  
}

結果:

開啟試算表與序列埠監控視窗,溫度及濕度兩邊可以對應的起來。 

 

 

 

 

相關文章