구글 어시스턴트로 아두이노 제어하기: IFTTT·웹훅·ESP8266 완전 정복 가이드
프로젝트 목표
인터넷 서비스(구글 어시스턴트)와 아두이노 보드 간 연결 방법을 익힙니다. 완료 후 다음을 할 수 있습니다:
- 구글 어시스턴트에서 데이터 수신
- IFTTT 애플릿 생성 및 활용
- 웹훅(Webhook)과 HTTP 요청 이해
- 음성 명령으로 아두이노 제어 (GPIO, PWM, 시리얼 등)
핵심 개념
구글 어시스턴트 & IFTTT 애플릿
구글 어시스턴트는 AI 기반 가상 비서로 자연어 음성 명령을 인식합니다. IFTTT(If This Then That)는 '이 조건이면 저 동작 수행' 식의 간단한 조건문(애플릿)을 만들어 웹 서비스 간 연동을 자동화하는 무료 서비스입니다. 구글 어시스턴트를 'This'(트리거)로, 웹훅을 'That'(액션)으로 연결합니다.
웹훅 & JSON
웹훅은 HTTP 콜백으로 웹 애플리케이션 간 실시간 데이터 전달 방식입니다. JSON(JavaScript Object Notation)은 사람이 읽기 쉬운 텍스트 기반 데이터 포맷으로, 속성-값 쌍과 배열로 구성되어 비동기 통신에 널리 쓰입니다.
구현 아키텍처
구글 어시스턴트 → IFTTT → 웹훅(HTTP POST, JSON) → 서버/데이터베이스 → ESP8266(폴링) → 시리얼 → 아두이노
회로 구성
- 아두이노 우노: 메인 제어 대상
- ESP8266 ESP-01: 와이파이 통신 및 서버 폴링, 아두이노와 시리얼 통신 (TX/RX 크로스 연결)
단계별 구현 가이드
1. IFTTT 애플릿 생성
- ifttt.com 가입/로그인 → My Applets → New Applet
- This: Google Assistant → "Say a phrase with a number ingredient" 선택
- 명령어 예: "Set PWM of pin 9 to #" (숫자 부분은 #로 치환), 동의어 추가 가능
- 응답 메시지: "The PWM is updated"
- That: Webhooks → "Make a web request"
- URL: 본인 서버 엔드포인트 (예:
https://your-server/api/Home/GetAllApp)
- Method: POST, Content-Type: application/json
- Body:
{"Number":"{{NumberField}}"}
2. 서버 및 데이터베이스
IFTTT 웹훅 요청을 받아 JSON 파싱 후 DB에 저장하는 서버 코드 필요 (C#, Node.js, PHP 등 자유). 작성자는 비주얼 스튜디오 2017로 샘플 서버 코드 작성 (다운로드 링크 별도 제공).
3. ESP8266 펌웨어 (아두이노 IDE)
#include "ESP8266WiFi.h"
#include "ESP8266HTTPClient.h"
#include "ArduinoJson.h"
const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting...");
}
}
void loop() {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin("https://your-ip/api/Home/GetAllApp");
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
// TODO: JSON 파싱 후 아두이노로 전송
Serial.println(payload);
}
http.end();
}
delay(3000); // 3초마다 폴링
}
필수 라이브러리: ArduinoJson (라이브러리 매니저에서 설치)
4. 아두이노 펌웨어
ESP8266에서 시리얼로 수신한 JSON 문자열을 파싱하여 명령 실행 (예: PWM 핀 9 값 설정). 제공된 코드는 문자열 검색 방식으로 간단히 구현되어 있으며, 더 견고한 JSON 파싱(ArduinoJson 라이브러리 사용) 권장.
확장 아이디어
- 릴레이 모듈 연동으로 조명/가전 제어
- 아두이노 → 구글 어시스턴트 역방향 데이터 전송 (센서 값 음성 안내 등)
- 다중 핀/장치 제어를 위한 명령 프로토콜 확장