[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这款平台,因为它如上方介绍一样支援许多服务,算是个中继站点,那下次主要教储存资料的部分,那下篇依旧是介绍程序码,那明天再见罗~


<<:  LeetCode 双刀流:700. Search in a Binary Search Tree

>>:  Day13 | Dart 中的 Functional Programming

Day 17:Docker 的机敏资料管理

记得在第十五天的时候我有提过,目前 NOJ 有其中一个问题是我们会把一些机敏资料,像是 JWT 使用...

JavaScript内建标准物件:日期

JavaScript 除了原始资料型别例如数字、字串、布林等等以外,所有的资料类型都是物件。日期与时...

Leet Code 3. Palindrome Number

原文 Given an integer x, return true if x is palindr...

D1 第零周:心态培养

D1-第零周:心态培养   这周是通知录取课程到课程正式开始之前的准备时间,这时间点只能看到第五期课...

用 Python 畅玩 Line bot - 11:Sticker message

觉得你的机器人只有对话觉得太单调?想要跟他来场贴图战?那就可以来看看 Sticker message...