• Skip to primary navigation
  • Skip to main content

IoTmaker

사물인터넷에 대한 모든 것 여기서 해결하셔요!

  • 홈
  • 책:마이크로파이썬을 활용한 사물인터넷
  • 책:따라 하면서 배우는 사물인터넷
  • 온라인 교육 코스
  • 새로운 소식
  • 의견보내기
  • 내 수강정보
  • 로그인
  • 회원가입

IFTTT를 통하여 메일 보내기

책에서 사용하는 부품 구입하기 IFTTT는 인터넷에 존재하는 여러 서비스와 모바일 앱을 서로 연결하여 새로운 워크플로우를 만들 수 있는 서비스입니다. 원래 무료였으나 최근(2020.10)에 유료 옵션이 추가되었습니다.

IFTTT 가입하기
ifttt.com 바로가기 에서 Sign up 버튼을 눌러서 가입하거나 Continue with Google 등을 이용하여 가입합니다.

Webhook 정보 확인하기
웹훅(Webhook)은 URL 형식으로 정보를 송수신하기 위한 방법인데 각각 고유의 규칙이 있습니다. IFTTT에도 웹훅(Webhook)을 위하여 별도로 정한 규칙이 있습니다.

IFTTT에 로그인하고 ifttt.com/maker_webhooks을 누른 후 다시 Documentation 버튼을 누르면 다음과 같은 정보가 나타납니다.

웹훅 개인정보 화면

이 그림에서 개인키는 외부에 노출하면 안됩니다. 만약 이벤트가 email이라고 하면 Node-RED에서는 다음과 같은 URL을 지정합니다.

https://maker.ifttt.com/trigger/email/with/key/btXtk3RpXXXXX4X7_07eFY

통상 아두이노에서는 https를 지원하지 않으므로 다음과 같이 http로 시작하는 URL을 지정합니다.

http://maker.ifttt.com/trigger/email/with/key/btXtk3RpXXXXX4X7_07eFY
JSON 데이터는 Node-RED나 아두이노에서 다음과 같은 형식으로 문자열을 만들어야 합니다.

{ "value1" : "23", "value2" : "첫 번째 값", "value3" : "두 번째 값" }
Webhook 을 이용한 애플릿(Applet) 만들기
IFTTT에서 작성한 단위 워크플로우를 애플릿(Applet)이라고 합니다. 애플릿(Applet)은 자극에 대한 반응, 즉 트리거에 대한 액션 형식으로 구성됩니다.

애플릿(Applet)을 만드는 순서는 다음과 같습니다.

01 메뉴 create - Applets을 선택합니다.

+This 화면

위 화면에서 를 누르면 서비스 선택화면이 나타납니다.

02 서비스 선택하기

서비스 선택 화면

서비스 선택 화면의 검색창에 Webhook를 입력합니다. 아래에 나타나는웹훅 아이콘을 누르면 트리거 선택화면이 나옵니다.

03 트리거 선택하기

트리거 선택 화면

트리거가 하나 뿐이므로 Receive a web request를 선택합니다. 이벤트 이름 입력 화면이 나옵니다.

04 이벤트 이름 입력하고 트리거 완료하기

이벤트 이름 입력 화면

이벤트 이름으로 email를 입력하고 Create trigger 버튼을 눌러서 트리거 작성을 완료합니다. 다음에 +That 화면이 나옵니다.

05 +That화면에서 후속 작업하기

+That 화면

위 화면에서 를 누르면 액션 서비스 선택 화면이 나타납니다.

06 액션 서비스 선택하기

액션 서비스 선택 화면

위 화면에서 email를 입력하여 나타나는 아이콘 중에서 첫번째 아이콘을 누릅니다.

07 액션 선택하기

액션 선택 화면

위 화면에서 Send me a email 버튼을 누릅니다.

08 액션 필드 채우기

액션 필드 채우기 화면

실제로 이메일을 구성하기 위한 템플릿 파일이 나옵니다. 그대로 사용해도 되지만 아래와 같이 바꾸어 봅시다.

09 액션 필드 한글로 바꾸기

액션 필드 채우기 화면

여기서 Create action 버튼을 누릅니다.

10 검토하고 종료하기

검토하고 종료하기 화면

표제는 자동으로 만들어지지만 원하는 부분을 수정해도 됩니다. Finish 버튼을 누릅니다.

11 완성된 애플릿(Applet)

완성된 애플릿(Applet) 화면

이 웹페이지에 나오는 아두이노 프로그램에서는 Aim 또는 Aims_로 시작되는 라이브러리를 사용합니다. 다음 링크에서 라이브러리를 다운로드 받을 수 있습니다. AIM 라이브러리 설치하기   AIMS 스니펫 정보
아래에 오는 두 개의 아두이노 프로그램은 같은 기능을 합니다. 첫 번째 프로그램은 http의 POST 명령어의 사용법을 익히도록 하기 위하여 만들었습니다. 두 번째 프로그램은 Aims_ifttt.h 라이브러리를 사용하여 코드를 간략하게 만든 예입니다.

아두이노 프로그램: http.POST() 사용
http의 POST 기능을 사용하여 웹훅으로 IFTTT에 JSON 형식의 데이터를 전송합니다.

http-post-ifttt
// AP_SSID를 3개까지 지정할 수 있음
#define AP_SSID1  "ssid1"
#define AP_PASS1  "pass1"

#define AP_SSID2  "ssid2"
#define AP_PASS2  "pass2"

#define AP_SSID3  "ssid3"
#define AP_PASS3  "pass3"

// SSID 개수 임의로 지정 가능(AP_SSID1말고 직접 지정해도 됨)
const char* ssid[] = {AP_SSID1,AP_SSID2,AP_SSID3};
const char* pass[] = {AP_PASS1,AP_PASS2,AP_PASS3};

#include <AimWiFi.h>
AimWiFi wifi;

// http 방식으로 접속하기 위함 
#if defined(ESP8266)
#include <ESP8266HTTPClient.h>
#elif defined(ESP32)
#include <HTTPClient.h>
#endif

// IFTTT webhook (https는 http로 바꾸어야함)
String event = "email";
String key = "btXtk3RpXXXXX4X7_07eFY";
String url = "http://maker.ifttt.com/trigger/{event}/with/key/{key}";

// 60 마다 연결 
#include <AimTimer.h>
AimTimer timerPost(60);

// JSON 형식의 데이터 처리 
#include <ArduinoJson.h>

void setup(void) {
  Serial.begin(115200);
  Serial.println();
  wifi.begin(ssid,pass,sizeof(ssid));
  timerPost.nowOn();

  // webhook URL 완성만들기  
  url.replace("{event}",event);
  url.replace("{key}",key);
}

void loop() {
  if (timerPost.isOn()) {
  	postToIFTTT();
  }
}

void postToIFTTT() {	
	
	// 인터넷 사이트에 접속하기 위하여 http 생성 
	HTTPClient http;

  // 인터넷 사이트에 접속
	http.begin(url);

	// JSON형식의 데이터 보냄
	http.addHeader("Content-Type","application/json");

	// JSON 형식으로 데이터 만듬
  String value1 = String(millis()/1000);
  String value2 = "두 번째 값";
  String value3 = "세 번째 값";
	String json = makeJson(value1,value2,value3);

	// 인터넷 사이트에서 데이터 받아오기 위하여 접속 시도  
	int httpCode = http.POST(json);
  
	// 인터넷 사이트에 접속이 되면 
	if (httpCode > 0 ) {
	  // 인터넷 사이트에서 처리 결과 메시지를 받아옴 
	  String payload = http.getString();
	  Serial.println("webhook return :"+payload);
	}
	else {
		Serial.printf("httpCode=%d\n",httpCode);
	}
	
	// 접속을 종료함 
	http.end();	
}

String makeJson(String v1,String v2,String v3) {
	
	// Prepare JSON document : 메모리에 JSON 표현
  DynamicJsonDocument doc(2048);
  doc["value1"] = v1;
  doc["value2"] = v2;
  doc["value3"] = v3;

  // Serialize JSON document : {} 텍스트 형식 
  String json;
  serializeJson(doc, json);
  Serial.println(json);
  return json;
}

시리얼 모니터에 출력된 실행결과입니다.

Connecting Wifi to [ssid1][ssid2][ssid3]
...........
Connected to ssid2 [192.168.43.29]
{"value1":"11","value2":"두 번째 값","value3":"세 번째 값"}
webhook return :Congratulations! You've fired the email event
{"value1":"71","value2":"두 번째 값","value3":"세 번째 값"}
webhook return :Congratulations! You've fired the email event
아두이노 프로그램: Aims_ifttt.h 사용
http의 POST 기능을 사용하여 웹훅으로 IFTTT에 JSON 형식의 데이터를 전송합니다. 이러한 과정을 간단히 처리하기 위하여 여기서는 Aims_ifttt.h를 사용합니다.

http-post-ifttt-class
// AP_SSID를 3개까지 지정할 수 있음
#define AP_SSID1  "ssid1"
#define AP_PASS1  "pass1"

#define AP_SSID2  "ssid2"
#define AP_PASS2  "pass2"

#define AP_SSID3  "ssid3"
#define AP_PASS3  "pass3"

// SSID 개수 임의로 지정 가능(AP_SSID1말고 직접 지정해도 됨)
const char* ssid[] = {AP_SSID1,AP_SSID2,AP_SSID3};
const char* pass[] = {AP_PASS1,AP_PASS2,AP_PASS3};

#include <AimWiFi.h>
AimWiFi wifi;

#include <Aims_ifttt.h>
Aims_ifttt ifttt;

String event = "email";
String key = "btXtk3RpXXXXX4X7_07eFY";

// 60 마다 연결 
#include <AimTimer.h>
AimTimer timerPost(60);

void setup(void) {
  Serial.begin(115200);
  Serial.println();
  
  wifi.begin(ssid,pass,sizeof(ssid));
  timerPost.nowOn();
}

void loop() {
  if (timerPost.isOn()) {
  	String value1 = String(millis()/1000);
  	String value2 = "두 번째 값";
  	String value3 = "세 번째 값";
  	int httpCode = ifttt.send(event,key,value1,value2,value3);
  	if (httpCode > 0) {
      Serial.printf("value1:[%s],value2:[%s],value3:[%s]\n",value1.c_str(),value2.c_str(),value3.c_str());
  	  Serial.println(ifttt.getString());
  	}
  }
}

시리얼 모니터에 출력된 실행결과입니다.

Connecting Wifi to [ssid1][ssid2][ssid3]
...........
Connected to ssid2 [192.168.43.29]
Connected to s2020 [192.168.43.29]
value1:[13],value2:[두 번째 값],value3:[세 번째 값]
Congratulations! You've fired the email event
value1:[73],value2:[두 번째 값],value3:[세 번째 값]
Congratulations! You've fired the email event

이메일 수신결과
IFTTT 가입시에 지정한 이메일로 전달된 내용입니다.

이메일 수신 내용

Aims_ifttt.h 다운로드

아이콘

Aims_ifttt.zip

1 파일 3.17 KB
다운로드

Copyright © 2025 ·로그인