Google Sheet ,是Google推出的一個電子試算表程式。使用者可以在網路應用程式、Android、iOS、Windows、黑莓手機以及ChromeOS的應用程式上使用,就像是雲端版的Microsoft Excel。
IFTTT,是一個新生的網絡服務平台,通過其他不同平台的條件來決定是否執行下一條命令。即對網絡服務通過其他網絡服務作出反應。IFTTT得名為其口號「if this then that」。
知道兩者後我們利用ESP32+DHT11 取得溫濕度資料,透過WIFI將資料傳送給IFTTT網路服務平台,而IFTTT將資料轉換後填入Google Sheet。
▼ 購買IoT物聯網學習教材:
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
- 輸入Event Name須與建立時同名,輸入錯誤會測試失敗
- 在value1和value2輸入參數
- 完成後按下 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秒
}
結果:
開啟試算表與序列埠監控視窗,溫度及濕度兩邊可以對應的起來。