前兩篇使用到日常生活中使用率最高的通訊軟體LINE Notify功能,不知道各位小夥伴是否學完後對於即將接近尾聲的"Maker making IoT"系列文章再次燃起興趣了呢?!精彩的還在後頭也請各位小夥伴別錯過喔~ 今天使用的程式寫法與Esp32s連接到Line有所出入,因為Esp32s連接Line是直接透過Line Notify這個服務,而Esp32s連接IFTTT在透過IFTTT傳到Line Notify,所以多了IFTTT這個轉寄站。
※本章節需使用IFTTT、LINE帳跟Facecbook或Apple或Google帳號
IFTTT是個服務平台,且得名此口號if this then that,IFTTT整合許多社交網路的網站帳戶,有人認為這可以改變整個網際網路,則有些人則擔心會有巨大風險,因為需要給予社交網路網站帳戶極大的權限。
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。
圖片取自:IFTTT
我設定的樣式,提供各位參考,不一定都要照我一樣設定
※因為溫溼度只有溫度及濕度,所以不會有第3個數值,故沒使用Value3
圖片取自:IFTTT
如果都設置完畢會長這樣,在點Continue就會設置好囉
圖片取自:IFTTT
這邊點Finish就好囉
圖片取自:IFTTT
點擊Webhook圖示,進行後續測試
※切記這邊不要點擊Archive,此選項是刪除此事件
圖片取自:IFTTT
點擊Documentation
圖片取自:IFTTT
接下來會看見這個畫面,那以下有4個區塊
圖片取自:IFTTT
這邊除了第1點的key,剩下的2、3、4都是拿來測試剛剛的事件的,那下方是我測試的畫面,如果測試沒問題Line Notify會傳輸訊息。
圖片取自:IFTTT
如果測試成功代表設定就都沒問題囉~
圖片取自:使用者繪製
Esp32s
GND
-> St01(C)-
Esp32sVcc(5V)
-> St01(C)+
Esp32s22
-> St01(C)SCL
Esp32s21
-> St01(C)SDA
請記得更改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
}
完成以上步驟且成功執行就會顯示下方畫面,如果覺得傳輸格式不好看,可以在試著自己修改看看,不管是改IFTTT那方,或者直接修改燒錄程式碼都可以
圖片取自:使用者拍攝
那如果訊息過很久都沒傳輸可以試著更改第85行的延遲時間,因為網路不好的話會受到影響。
好了,今天主要教各位IFTTT這款平台,因為它如上方介紹一樣支援許多服務,算是個中繼站點,那下次主要教儲存資料的部分,那下篇依舊是介紹程式碼,那明天再見囉~