iT邦幫忙

2021 iThome 鐵人賽

DAY 26
0
自我挑戰組

Maker making IoT !!系列 第 26

[Day25] Esp32s + IFTTT + LINE

1.前言

前兩篇使用到日常生活中使用率最高的通訊軟體LINE Notify功能,不知道各位小夥伴是否學完後對於即將接近尾聲的"Maker making IoT"系列文章再次燃起興趣了呢?!精彩的還在後頭也請各位小夥伴別錯過喔~ 今天使用的程式寫法與Esp32s連接到Line有所出入,因為Esp32s連接Line是直接透過Line Notify這個服務,而Esp32s連接IFTTT在透過IFTTT傳到Line Notify,所以多了IFTTT這個轉寄站。
※本章節需使用IFTTT、LINE帳跟Facecbook或Apple或Google帳號

2.IFTTT

IFTTT是個服務平台,且得名此口號if this then that,IFTTT整合許多社交網路的網站帳戶,有人認為這可以改變整個網際網路,則有些人則擔心會有巨大風險,因為需要給予社交網路網站帳戶極大的權限。

2-1.準備事項

1. 創建一個事件(IFTTT + Line Notify)

可選擇Login或Get started登入,如果有IFTTT帳號選擇Login就好,如果沒有IFTTT帳號可選擇Get start登入,Get started登入可以使用其他平台帳號登入(Apple、Google、Facebook)

圖片取自:IFTTT

點選Create(創建)

圖片取自:IFTTT

如果第一次使用IFTTT(沒創過任何事件),點擊Create後就會是這個畫面,那點擊if this後則輸入搜尋中打入webhook

圖片取自:IFTTT

點擊webhook的圖案

圖片取自:IFTTT

點擊左方Receive a web requset

圖片取自:IFTTT

在Event Name(事件名稱)中輸入名稱,例如:Esp32sAHT10或Esp32sAHT10Line(最好是之後自己看得懂這事件是做甚麼的),命名完後就點選下方Create trigger(建立觸發器)就可以囉

圖片取自:IFTTT

設定完觸發器後,接下來換設置如果觸發器被觸發後,所需要執行的程式,所以點擊Then Taht進行設定

圖片取自:IFTTT

接著照樣在搜尋欄位找LINE

圖片取自:IFTTT

點進來後只有它可選,所以就選它吧

圖片取自:IFTTT

這邊需要連接Line帳號,所以點擊Connect會跳出登入畫面

圖片取自:IFTTT

登入後,這邊會詢問你說要不要跟IFTTT做連動,那因為我們此行目的就是為了使用IFTTT,所以需要點同意並連動

圖片取自:IFTTT

這邊就是做傳輸設定,設定完成後就可Create action。

  • Recipient 設定傳輸位置(1對1、群組、社群)
  • Message 傳輸格式設定
    • EventName 事件名稱
    • Value 1 傳輸數值1
    • Value 2 傳輸數值2
    • Value 3 傳輸數值3
    • OccurredAt 日期
  • Photo URL 設定照片(每次傳輸時會附加一張照片)

圖片取自:IFTTT

我設定的樣式,提供各位參考,不一定都要照我一樣設定
※因為溫溼度只有溫度及濕度,所以不會有第3個數值,故沒使用Value3

圖片取自:IFTTT

如果都設置完畢會長這樣,在點Continue就會設置好囉

圖片取自:IFTTT

這邊點Finish就好囉

圖片取自:IFTTT

點擊Webhook圖示,進行後續測試
※切記這邊不要點擊Archive,此選項是刪除此事件

圖片取自:IFTTT

點擊Documentation

圖片取自:IFTTT

接下來會看見這個畫面,那以下有4個區塊

  1. IFTTT所給的key
  2. 測試區塊 - 事件名稱 (webhook事件名稱)
  3. 測試區塊 - 數值 (LINE Value欄位多少個,就可填多少欄位,數值隨意)
  4. 測試按鈕

圖片取自:IFTTT

這邊除了第1點的key,剩下的2、3、4都是拿來測試剛剛的事件的,那下方是我測試的畫面,如果測試沒問題Line Notify會傳輸訊息。

圖片取自:IFTTT

如果測試成功代表設定就都沒問題囉~

3.接線圖

圖片取自:使用者繪製

Esp32s GND -> St01(C)-
Esp32s Vcc(5V) -> St01(C)+
Esp32s 22 -> St01(C) SCL
Esp32s 21 -> St01(C) SDA

4.程式碼

請記得更改10、11行(ssid、password),80行 /trigger/(填寫Webhook事件名稱)/key/(IFTTT給的key)
80行更改範例:/trigger/Esp32sAHT10Line/with/key/cEf5MJB

#include <WiFi.h>
#include <WiFiClient.h>

#include <AHT10.h>
#include <Wire.h>
uint8_t readStatus = 0;
AHT10 myAHT10(AHT10_ADDRESS_0X38);

// Replace with your SSID and Password
const char* ssid     = "xxxx";
const char* password = "xxxxxxxx";

float humidity, temp;   // 從 myAHT10 讀取的值
String tempe1="";      // 顯示溫度的字串
String humid1="";      // 顯示濕度的字串

unsigned long previousMillis = 0;        // will store last temp was read
const long interval = 2000;              // interval at which to read sensor
const char* host = "maker.ifttt.com";
const int httpPort = 80;
 
void setup(void)
{
  Serial.begin(115200);  // 設定速率 感測器
  myAHT10.begin();           // 初始化

  WiFi.mode(WIFI_STA);
  // 連接無線基地台
  WiFi.begin(ssid, password);
  Serial.print("\n\r \n\rWorking to connect");

  // 等待連線,並從 Console顯示 IP
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("myAHT10 Weather Reading Server");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
}
 
void loop(void)
{
  // 量測間等待至少 2 秒
  unsigned long currentMillis = millis();
 
  if(currentMillis - previousMillis >= interval) {
    // 將最後讀取感測值的時間紀錄下來 
    previousMillis = currentMillis;   

    // 讀取溫度大約 250 微秒!
    humidity = myAHT10.readHumidity();          // 讀取濕度(百分比)
    temp = myAHT10.readTemperature();     // 讀取溫度(華氏)
    
    // 檢查兩個值是否為空值
    if (isnan(humidity) || isnan(temp)) {
       Serial.println("Failed to read from myAHT10 sensor!");
       return;
    }
  }

  // 除錯用
  tempe1="Temperature:"+String(temp)+"C";   
  humid1="Humidity:"+String(humidity)+"%";

  Serial.println(tempe1);
  Serial.println(humid1);

  WiFiClient client;
  Serial.print("connecting to ");
  Serial.println(host);
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }

  String getStr_line = "GET /trigger/Esp32sAHT10Line/with/key/cEf5MJB?value1="+tempe1+"&value2="+humid1+" HTTP/1.1\r\n"
  + "Host: " + host + "\r\n" + "User-Agent: BuildFailureDetectorESP32\r\n" + "Connection: close\r\n\r\n";
  
  Serial.println(getStr_line);
  client.print(getStr_line);
  delay(100);
  client.stop();
  
  delay(60000);     //每1分鐘送一次到Line Notify
}

5.操作畫面

完成以上步驟且成功執行就會顯示下方畫面,如果覺得傳輸格式不好看,可以在試著自己修改看看,不管是改IFTTT那方,或者直接修改燒錄程式碼都可以

圖片取自:使用者拍攝

那如果訊息過很久都沒傳輸可以試著更改第85行的延遲時間,因為網路不好的話會受到影響。

歡迎交流

好了,今天主要教各位IFTTT這款平台,因為它如上方介紹一樣支援許多服務,算是個中繼站點,那下次主要教儲存資料的部分,那下篇依舊是介紹程式碼,那明天再見囉~


上一篇
[Day24] Esp32 + LINE - (程式碼講解)
下一篇
[Day26] Esp32s + IFTTT + LINE - (程式碼講解)
系列文
Maker making IoT !!30

尚未有邦友留言

立即登入留言