아두이노, Yaler, IFTTT로 웹 연동 IoT 게이지 만들기
부품 및 소모품
아두이노 윤
×
1
서보 모터 (Tower Pro MG996R)
×
1
M3 너트 & 볼트
×
3
4mm 합판
×
1
필요한 도구 및 기계
레이저 커터
글루건
안드로이드 또는 iOS 스마트폰
앱 및 온라인 서비스
프로젝트 소개
(출처: Instructables )
REST API를 갖춘 웹 연동 아두이노 기반 IoT 게이지를 만들고, Yaler.net 릴레이 서비스를 통해 IFTTT.com 매시업 플랫폼과 연동하는 방법입니다.
이 프로젝트의 흥미로운 점: IFTTT가 Maker 채널을 통해 커스텀 웹훅을 지원하면서 2011년부터 기다려온 DIY IoT 프로젝트 통합이 가능해졌습니다.
WhereDial 이라는 IoT 고전 프로젝트에서 영감을 받아, IoT 게이지는 소유자의 현재 위치를 표시합니다. 해리포터의 위즐리 시계와 비슷한 개념이죠.
IoT 게이지의 설계와 코드는 범용적이라 날씨 상태 표시 등 다른 용도로도 활용할 수 있습니다. 로직은 클라우드에 두고, 게이지는 단순히 API를 가진 서보 모터 역할만 합니다.
Cheers, @tamberg
다운로드 (Uno용)
Yaler 아두이노 라이브러리, YalerEthernetServer.zip
아두이노 Uno 코드, IoTGaugeWebService.ino
* 필자는 Yaler의 창업자입니다.
** Zapier는 또 다른 매시업 플랫폼으로, 예전부터 커스텀 웹훅을 지원했습니다.
1단계: IoT 게이지 레이저 커팅 및 조립
부품 제작
IoT 게이지 설계 파일 다운로드
4mm 합판으로 레이저 커팅
위치 이름 등을 각인하거나 펜으로 직접 표기
IoT 게이지 조립
이더넷 쉴드를 아두이노에 장착 (Uno의 경우)
아두이노를 베이스 플레이트에 나사로 고정 (방향 주의)
큰 페이스 플레이트를 서보에, 작은 페이스 플레이트를 그 위에 장착
베이스 플레이트를 두 페이스 플레이트에 끼워 정렬
인디케이터를 페이스 플레이트에 접착, 방향 확인
점퍼 와이어로 서보를 아두이노(또는 쉴드)의 9번 핀, 5V, GND에 연결
시계 바늘 장착 (나중 캘리브레이션 필요)
2단계: IoT 게이지 웹 서비스 아두이노 코드 업로드
심플한 웹 서비스
IoT 게이지 제어는 간단합니다. 웹 서비스(REST API)가 들어오는 요청을 대기하다가 서보 위치를 설정합니다. IoT 게이지는 그저 "멍청한" 서보일 뿐입니다. 로직을 클라우드에 두면 나중에 "두뇌"를 바꿔 날씨 표시 등으로 용도 변경이 쉽습니다.
아두이노 원격 접근
IFTTT 클라우드 서비스가 IoT 게이지에 접근하려면 아두이노 REST API가 웹에서 접근 가능하고 주소 지정 가능해야 합니다. 전문가라면 방화벽이나 라우터 예외를 추가할 수 있지만, 번거로우므로 릴레이 서비스를 사용합니다.
아두이노 Uno 설치 (Yun은 아래 참조)
https://yaler.net/arduino 참조해 YalerEthernetServer.zip 라이브러리 설치
IoTGaugeWebService.ino 아두이노 Uno 코드 다운로드
고유한 MAC 주소 사용
RELAY_DOMAIN 을 본인의 릴레이 도메인으로 변경 (Yaler.net에서 무료 체험 계정 가입 후 발급)
코드를 아두이노 Uno에 업로드
아두이노 Yun 설치 (Uno는 위 참조)
왜 Yun 코드가 Uno 코드와 다를까?
Yun은 메일박스라는 내장 REST API를 제공합니다. 이 API를 웹에서 접근 가능하게 하려면 YalerTunnel 리눅스 데몬을 사용합니다(Uno와 달리 SSL 암호화도 지원). 이미 있는 기능을 활용해 코드를 단순화할 수 있습니다.
두 프로그램을 비교해 보세요. Yun의 메일박스 API가 완벽하진 않습니다(엄밀한 의미의 RESTful하지 않음, GET으로 값 변경 허용). 하지만 Yun의 리눅스 측에서 실행되는 스크립트 기반이라 아두이노 측의 귀중한 메모리를 덜 사용합니다.
* 릴레이 서비스 사용이 싫다면 제거하고 (Uno의 경우) 로컬 서버 주석 해제하세요.
3단계: Curl로 아두이노 웹 서비스 테스트
컴퓨터에 Curl 명령줄 도구 설치
아두이노 Yun API 활성화 (Uno는 건너뛰기)
Yun 전원 켜고 잠시 대기 후 https://arduino.local/ 접속
로그인 후 Configure 클릭
아래로 스크롤해 REST API 접근을 Open 으로 설정
Configure & Restart 클릭
Curl로 IoT 게이지 테스트
아두이노가 전원 연결되고 인터넷에 연결됐는지 확인
서보 위치를 3으로 설정 (1~5 중 아무 값이나 가능):
$ curl -vX POST https://RELAY_DOMAIN.try.yaler.io/mailbox/pos/3
(앞서 사용한 RELAY_DOMAIN 으로 치환)
서보가 원하는 위치로 이동했는지 확인 (바늘 위치 조정 필요시 조정)
Curl 호출 응답으로 < HTTP/1.1 200 OK 같은 응답 확인
< HTTP/1.1 504 가 나오면 아두이노가 오프라인이거나 오타 있음
왜 Curl로 API를 테스트해야 할까?
Curl은 표준 HTTP 클라이언트입니다. 브라우저는 GET 요청 테스트에 좋고, PUT/POST 테스트용 온라인 도구도 있지만, 브라우저는 리다이렉트 팔로우 등 '마법'을 부리기도 합니다. IFTTT에서 보내는 웹훅 호출 같은 기본 클라이언트나 서드파티 호출이 내 웹 서비스 API에 접근 가능한지 확실히 확인하려면 Curl이 최적입니다.
* Uno의 경우 요청 파싱 코드가 관대해 POST /mailbox/pos/3도 PUT /servo?pos=3과 동일하게 작동합니다.
4단계: 아두이노를 IFTTT Maker 채널과 연동
새 IFTTT 레시피 만들기 (기존 레시피 추가하려면 건너뛰기)
IFTTT는 트리거와 액션을 연결하는 레시피를 만듭니다.
https://ifttt.com/myrecipes/personal/new 접속 (가입 안 했다면 가입)
트리거 채널 선택: "Android Device" 또는 "iOS Location" 검색 후 채널 아이콘 선택
트리거 선택: 예: 특정 와이파이 네트워크에 연결됨 (안드로이드용)
네트워크 이름 또는 위치 입력
액션 채널 선택: Maker 채널 검색 후 선택
액션 선택: 웹 요청 만들기
URL 입력: https://RELAY_DOMAIN.try.yaler.io/mailbox/pos/3 (RELAY_DOMAIN 을 본인 도메인으로 치환)
Method: POST 선택
Content Type: application/x-www-form-urlencoded 선택
Body는 비워둠
기존 IFTTT 레시피 추가
IFTTT는 사용자가 레시피를 공유할 수 있게 합니다. IoT 게이지 제어용 레시피 두 가지:
"IoT 게이지 위치를 안드로이드 와이파이 위치로" 레시피 열기
또는 "IoT 게이지 위치를 iOS 위치로" 레시피 열기
또는 "IoT Gauge" 레시피 검색
Add 버튼 클릭해 내 레시피에 인스턴스 추가
와이파이 네트워크 이름 또는 위치 입력 (레시피가 요구하는 대로)
URL의 RELAY_DOMAIN 을 본인 도메인으로 치환
URL의 pos 파라미터를 1~5로 변경해 내 위치에 맞춤
위치별로 레시피 인스턴스 추가
* IFTTT가 아직 Maker 채널 레시피를 검색 결과에 추가하지 않는 것 같습니다.
5단계: IoT 게이지용 IFTTT Do 버튼 만들기
IFTTT Do 앱
IFTTT는 iOS와 안드로이드용 Do 앱도 제공합니다. 앱으로 액션을 수동 트리거할 수 있어 다른 IFTTT 레시피 테스트에 유용합니다.
일반 IFTTT 레시피와 달리 Do 앱 레시피는 (아직?) 공유하거나 공개할 수 없습니다. 직접 만들어야 합니다.
새 IFTTT Do 버튼 만들기
https://ifttt.com/products/do/button 에서 Do Button 안드로이드/iOS 앱 다운로드
필수(?) 인트로 화면들 통과
우측 하단 작은 아이콘 탭해 레시피 목록 열기
플러스 기호 탭, Channels 탭하고 Maker 채널 검색
액션 웹 요청 만들기 선택
URL 입력: https://RELAY_DOMAIN.try.yaler.io/mailbox/pos/3 (RELAY_DOMAIN 치환)
Method: POST 선택
Content Type: application/x-www-form-urlencoded 선택
Body 비워둠
Add 탭해 버튼 생성
생성 후 https://ifttt.com/myrecipes/do 에서 온라인으로 편집 가능
이상으로 마치겠습니다. 질문이나 제안사항 있으면 알려주세요.
코드
Bitbucket
커스텀 파트 및 인클로저
IoT_Gauge.zip
회로도